From 28eb898cb1da5e2c7c7dc274b30aa76c2f8a5ab4 Mon Sep 17 00:00:00 2001 From: polpol Date: Thu, 9 May 2024 20:37:46 -0700 Subject: [PATCH] fix drones not moving and add stress level LPD priority --- src/components/Widget/ListWidget.tsx | 2 +- src/components/Widget/Widget.tsx | 81 +----- src/prototype/lpd/initialLPD.ts | 9 +- src/prototype/lpd/stress/highLPD.ts | 354 ++++++++++++------------ src/prototype/lpd/stress/lowLPD.ts | 375 ++++++++++++-------------- src/prototype/lpd/stress/mediumLPD.ts | 296 ++++++++++---------- src/redux/slices/minimapSlice.ts | 8 +- src/utils/lpdHelper.ts | 32 +++ submodules/message-schemas | 2 +- 9 files changed, 526 insertions(+), 633 deletions(-) diff --git a/src/components/Widget/ListWidget.tsx b/src/components/Widget/ListWidget.tsx index 347b1ac..ead0838 100644 --- a/src/components/Widget/ListWidget.tsx +++ b/src/components/Widget/ListWidget.tsx @@ -34,7 +34,7 @@ const ListWidget = ({ widget }: ListWidgetProps) => {
diff --git a/src/components/Widget/Widget.tsx b/src/components/Widget/Widget.tsx index 9de05f0..b0bd774 100644 --- a/src/components/Widget/Widget.tsx +++ b/src/components/Widget/Widget.tsx @@ -13,87 +13,8 @@ const Widget = ({ widget }: WidgetProps) => { return ; case 'list': return ; - // case 'custom': - // return ( - //
- // {"missileToOwnship"} - //

- // {'text' in widget.elements[1] && widget.elements[1].text} - //

- //
- // ); case 'custom': - return ( -
-

- {'text' in widget.elements[0] && widget.elements[0].text} -

- {widget.elements[1] ? - : undefined } - {widget.elements[2] ? - : undefined } -
- ); + return
Custom Widget
; default: return
Unknown Widget
; } diff --git a/src/prototype/lpd/initialLPD.ts b/src/prototype/lpd/initialLPD.ts index 882f34f..29c3265 100644 --- a/src/prototype/lpd/initialLPD.ts +++ b/src/prototype/lpd/initialLPD.ts @@ -154,10 +154,11 @@ export const drones: Widget[] = [ const initialShips: WidgetMap = { [ownship.id]: ownship, - ...drones.reduce((acc, drone) => { - acc[drone.id] = drone; - return acc; - }, {} as WidgetMap), + [drones[0].id]: drones[0], + [drones[1].id]: drones[1], + [drones[2].id]: drones[2], + [drones[3].id]: drones[3], + [drones[4].id]: drones[4], }; const initialLPD = { diff --git a/src/prototype/lpd/stress/highLPD.ts b/src/prototype/lpd/stress/highLPD.ts index 3fc735d..e486eca 100644 --- a/src/prototype/lpd/stress/highLPD.ts +++ b/src/prototype/lpd/stress/highLPD.ts @@ -1,34 +1,34 @@ -import type { Message } from "src/types/schema-types"; +import type { Message, MissileToOwnshipDetected, RequestApprovalToAttack } from "src/types/schema-types"; import { v4 as uuid } from 'uuid'; import lpdHelper from "src/utils/lpdHelper"; import DANGER_ICON from 'src/icons/danger.svg'; import DRONE_ICON from 'src/icons/drone.svg'; -import type { Element } from "src/types/element"; import { elements } from "./lowLPD"; -export const MissileToOwnshipDetected_ID = uuid(); -export const acaFuelLow_ID = uuid(); - // Functions to create widgets, elements, and sections for each message type -const requestApprovalToAttackMessageHigh = () => { - elements.push( +const requestApprovalToAttackMessageHigh = (message: RequestApprovalToAttack) => { + elements.push( + lpdHelper.generateRequestApprovalElement( + lpdHelper.generateBaseElement( + uuid(), + 'visual', + 30, + 30, + 0, + 0, + message.priority, + ), + message, lpdHelper.generateIconElement( lpdHelper.generateBaseElement( uuid(), 'visual', - 30, - 30, + 80, + 80, 0, 0, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, ), - DRONE_ICON, + DANGER_ICON, ), lpdHelper.generateButtonElement( lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), @@ -38,199 +38,179 @@ const requestApprovalToAttackMessageHigh = () => { lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), 'Approve', ), - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'request', - 100, - 100, - 200, - 200, - '/pearce-screen', - false, - false, - 1, - elements, - ))], - }; -} - -const acaFuelLowMessageHigh = () => { - elements.push( - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 50, - 200, - 0, - 0, - ), - 2, - 2, - [['Fuel', 'Low'],['Altitude', 'Low']], - ) - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'message', - 500, - 500, - 150, - 150, - '/pearce-screen', - false, - false, - 1, - elements, - ))], - }; -} - -const missileToOwnshipDetectedMessageHigh = () => { - elements.push( - lpdHelper.generateIconElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 80, - 80, - 0, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - display: 'block', - margin: 'auto', - width: '50%', - }, - ), - 'DANGER_ICON', - ), - lpdHelper.generateTextElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 70, - 200, - 75, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - background: 'black', - color: '#02d118', - fontWeight: 'bold', - fontSize: '16px', - }, - ), - 'Low Stress: Missile to ownship detected! T-30 till impact', - ), - ); + ), + ); return { sections: [], possibleWidgets: [ - lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'highWarning', - 100, - 100, - 200, - 200, - '/pearce-screen', - false, - true, - 1, - elements, + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 100, + 100, + 300, + 800, + '/pearce-screen', + false, + false, + 1, + [...elements], + ), ), - )], + ], }; -} +}; -const acaDefectMessageHigh = () => { +const acaFuelLowMessageHigh = (message: Message) => { elements.push( - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 50, - 200, - 0, - 0, + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), + 2, + 2, + [ + ['Fuel', 'Low'], + ['Altitude', 'Low'], + ], ), - 2, - 2, - [['Defect', 'Engine'], ['Altitude', 'Low']]), ); return { sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'highWarning', - 500, - 500, - 20, - 200, - '/pearce-screen', - false, - true, - 1, - elements, - ))], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + false, + 1, + [...elements], + ), + ), + ], }; -} +}; -const acaHeadingToBaseMessageHigh = () => { +const missileToOwnshipDetectedMessageHigh = (message: MissileToOwnshipDetected) => { elements.push( - lpdHelper.generateTextElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 30, - 200, - 0, - 0, + lpdHelper.generateMissileIncomingElement( + lpdHelper.generateBaseElement( + uuid(), + 'visual', + 50, + 200, + 0, + 0, + message.priority, + ), + message, + lpdHelper.generateIconElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 80, 80, 0, 0), + DANGER_ICON, + ), ), - 'Aircraft heading to base'), ); return { sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'message', - 500, - 500, - 20, - 200, - '/pearce-screen', - false, - true, - 1, - elements, - ))], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 100, + 100, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], + ), + ), + ], }; -} +}; + +const acaDefectMessageHigh = (message: Message) => { + elements.push( + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), + 2, + 2, + [ + ['Defect', 'Engine'], + ['Altitude', 'Low'], + ], + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'highWarning', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], + ), + ), + ], + }; +}; + +const acaHeadingToBaseMessageHigh = (message: Message) => { + elements.push( + lpdHelper.generateTextElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 30, 200, 0, 0, message.priority), + 'Aircraft heading to base', + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], + ), + ), + ], + }; +}; // Map each message type to its corresponding LPD function -const highLPDMessageFunctions = { - 'RequestApprovalToAttack': requestApprovalToAttackMessageHigh, - 'AcaFuelLow': acaFuelLowMessageHigh, - 'MissileToOwnshipDetected': missileToOwnshipDetectedMessageHigh, - 'AcaDefect': acaDefectMessageHigh, - 'AcaHeadingToBase': acaHeadingToBaseMessageHigh, +const highLPDMessageFunctions: any = { + RequestApprovalToAttack: requestApprovalToAttackMessageHigh, + AcaFuelLow: acaFuelLowMessageHigh, + MissileToOwnshipDetected: missileToOwnshipDetectedMessageHigh, + AcaDefect: acaDefectMessageHigh, + AcaHeadingToBase: acaHeadingToBaseMessageHigh, }; const highLPD = (message: Message) => { - return highLPDMessageFunctions[message.kind](); -} + return highLPDMessageFunctions[message.kind](message); +}; export default highLPD; \ No newline at end of file diff --git a/src/prototype/lpd/stress/lowLPD.ts b/src/prototype/lpd/stress/lowLPD.ts index b27e3da..6339614 100644 --- a/src/prototype/lpd/stress/lowLPD.ts +++ b/src/prototype/lpd/stress/lowLPD.ts @@ -1,35 +1,36 @@ -import type { Message } from "src/types/schema-types"; -import lpdHelper from "src/utils/lpdHelper"; +import type { Message, MissileToOwnshipDetected, RequestApprovalToAttack } from 'src/types/schema-types'; +import lpdHelper from 'src/utils/lpdHelper'; import { v4 as uuid } from 'uuid'; -import { l } from "node_modules/vite/dist/node/types.d-aGj9QkWt"; -import type { Element } from "src/types/element"; +import type { Element } from 'src/types/element'; import DANGER_ICON from 'src/icons/danger.svg'; import DRONE_ICON from 'src/icons/drone.svg'; -export const MissileToOwnshipDetected_ID = uuid(); -export const acaFuelLow_ID = uuid(); export const elements: Element[] = []; // Functions to create widgets, elements, and sections for each message type -const requestApprovalToAttackMessageLow = () => { - elements.push( +const requestApprovalToAttackMessageLow = (message: RequestApprovalToAttack) => { + elements.push( + lpdHelper.generateRequestApprovalElement( + lpdHelper.generateBaseElement( + uuid(), + 'visual', + 30, + 30, + 0, + 0, + message.priority, + ), + message, lpdHelper.generateIconElement( lpdHelper.generateBaseElement( uuid(), 'visual', - 30, - 30, + 80, + 80, 0, 0, - true, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, ), - DRONE_ICON, + DANGER_ICON, ), lpdHelper.generateButtonElement( lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), @@ -39,201 +40,179 @@ const requestApprovalToAttackMessageLow = () => { lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), 'Approve', ), - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - uuid(), - 'request', - 100, - 100, - 200, - 200, - '/pearce-screen', - false, - false, - 1, - elements, - ))], - }; -} - -const acaFuelLowMessageLow = () => { - elements.push( - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 50, - 200, - 0, - 0, - ), - 2, - 2, - [['Fuel', 'Low'],['Altitude', 'Low']], - ) - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'message', - 500, - 500, - 150, - 150, - '/pearce-screen', - false, - false, - 1, - elements, - ))], - }; -} - -const missileToOwnshipDetectedMessageLow = () => { - elements.push( - lpdHelper.generateIconElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 80, - 80, - 0, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - display: 'block', - margin: 'auto', - width: '50%', - }, - ), - 'DANGER_ICON', - ), - lpdHelper.generateTextElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 70, - 200, - 75, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - background: 'black', - color: '#02d118', - fontWeight: 'bold', - fontSize: '16px', - }, - ), - 'Low Stress: Missile to ownship detected! T-30 till impact', - ), - ); - return { - sections: [], - possibleWidgets: [ - lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( 'list', - 'highWarning', + 'tinder', 100, 100, - 200, - 200, + 300, + 800, + '/pearce-screen', + false, + false, + 1, + [...elements], + ), + ), + ], + }; +}; + +const acaFuelLowMessageLow = (message: Message) => { + elements.push( + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), + 2, + 2, + [ + ['Fuel', 'Low'], + ['Altitude', 'Low'], + ], + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + false, + 1, + [...elements], + ), + ), + ], + }; +}; + +const missileToOwnshipDetectedMessageLow = (message: MissileToOwnshipDetected) => { + elements.push( + lpdHelper.generateMissileIncomingElement( + lpdHelper.generateBaseElement( + uuid(), + 'visual', + 50, + 200, + 0, + 0, + message.priority, + ), + message, + lpdHelper.generateIconElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 80, 80, 0, 0), + DANGER_ICON, + ), + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 100, + 100, + 300, + 800, '/pearce-screen', false, true, 1, - elements, + [...elements], ), - ) - ] - }; + ), + ], + }; +}; -} - -const acaDefectMessageLow = () => { - elements.push( - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 50, - 200, - 0, - 0, - ), - 2, - 2, - [['Defect', 'Engine'], ['Altitude', 'Low']]), - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'highWarning', - 500, - 500, - 20, - 200, - '/pearce-screen', - false, - true, - 1, - elements, - ))], - }; -} - -const acaHeadingToBaseMessageLow = () => { - elements.push( - lpdHelper.generateTextElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 30, - 200, - 0, - 0, +const acaDefectMessageLow = (message: Message) => { + elements.push( + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), + 2, + 2, + [ + ['Defect', 'Engine'], + ['Altitude', 'Low'], + ], + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], ), - 'Aircraft heading to base'), - ); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'message', - 500, - 500, - 20, - 200, - '/pearce-screen', - false, - true, - 1, - elements, - ))], - }; -} + ), + ], + }; +}; + +const acaHeadingToBaseMessageLow = (message: Message) => { + elements.push( + lpdHelper.generateTextElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 30, 200, 0, 0, message.priority), + 'Aircraft heading to base', + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], + ), + ), + ], + }; +}; // Map each message type to its corresponding LPD function const lowLPDMessageFunctions: any = { - 'RequestApprovalToAttack': requestApprovalToAttackMessageLow, - 'AcaFuelLow': acaFuelLowMessageLow, - 'AcaDefect': acaDefectMessageLow, - 'AcaHeadingToBase': acaHeadingToBaseMessageLow, - 'MissileToOwnshipDetected': missileToOwnshipDetectedMessageLow, -} + RequestApprovalToAttack: requestApprovalToAttackMessageLow, + AcaFuelLow: acaFuelLowMessageLow, + AcaDefect: acaDefectMessageLow, + AcaHeadingToBase: acaHeadingToBaseMessageLow, + MissileToOwnshipDetected: missileToOwnshipDetectedMessageLow, +}; const lowLPD = (message: Message) => { - return lowLPDMessageFunctions[message.kind](); + return lowLPDMessageFunctions[message.kind](message); }; export default lowLPD; \ No newline at end of file diff --git a/src/prototype/lpd/stress/mediumLPD.ts b/src/prototype/lpd/stress/mediumLPD.ts index 6eaacd2..2c47924 100644 --- a/src/prototype/lpd/stress/mediumLPD.ts +++ b/src/prototype/lpd/stress/mediumLPD.ts @@ -1,35 +1,34 @@ -import type { Message } from "src/types/schema-types"; +import type { Message, MissileToOwnshipDetected, RequestApprovalToAttack } from "src/types/schema-types"; import lpdHelper from "src/utils/lpdHelper"; import { v4 as uuid } from 'uuid'; import DANGER_ICON from 'src/icons/danger.svg'; import DRONE_ICON from 'src/icons/drone.svg'; -import { elements } from "./lowLPD"; - -import type { Element } from "src/types/element"; - -export const MissileToOwnshipDetected_ID = uuid(); -export const acaFuelLow_ID = uuid(); +import { elements } from './lowLPD'; // Functions to create widgets, elements, and sections for each message type -const requestApprovalToAttackMessageMedium = () => { - elements.push( +const requestApprovalToAttackMessageMedium = (message: RequestApprovalToAttack) => { + elements.push( + lpdHelper.generateRequestApprovalElement( + lpdHelper.generateBaseElement( + uuid(), + 'visual', + 30, + 30, + 0, + 0, + message.priority, + ), + message, lpdHelper.generateIconElement( lpdHelper.generateBaseElement( uuid(), 'visual', - 30, - 30, + 80, + 80, 0, 0, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, ), - DRONE_ICON, + DANGER_ICON, ), lpdHelper.generateButtonElement( lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), @@ -39,198 +38,179 @@ const requestApprovalToAttackMessageMedium = () => { lpdHelper.generateBaseElement(uuid(), 'visual', 30, 80, 0, 0), 'Approve', ), - ); + ), + ); return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( 'list', - 'request', + 'tinder', 100, 100, - 200, - 200, + 300, + 800, '/pearce-screen', false, false, 1, - elements, - ))], + [...elements], + ), + ), + ], }; -} +}; -const acaFuelLowMessageMedium = () => { +const acaFuelLowMessageMedium = (message: Message) => { elements.push( - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), + 2, + 2, + [ + ['Fuel', 'Low'], + ['Altitude', 'Low'], + ], + ), + ); + return { + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 500, + 500, + 300, + 800, + '/pearce-screen', + false, + false, + 1, + [...elements], + ), + ), + ], + }; +}; + +const missileToOwnshipDetectedMessageMedium = (message: MissileToOwnshipDetected) => { + elements.push( + lpdHelper.generateMissileIncomingElement( + lpdHelper.generateBaseElement( uuid(), 'visual', 50, 200, 0, 0, - ), - 2, - 2, - [['Fuel', 'Low'],['Altitude', 'Low']], - )); - return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'message', - 500, - 500, - 150, - 150, - '/pearce-screen', - false, - false, - 1, - elements, - ))], - }; -} - -const missileToOwnshipDetectedMessageMedium = () => { - elements.push( - lpdHelper.generateIconElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 80, - 80, - 0, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - display: 'block', - margin: 'auto', - width: '50%', - }, + message.priority, ), - 'DANGER_ICON', - ), - lpdHelper.generateTextElement( - lpdHelper.generateBaseElement( - uuid(), - 'visual', - 70, - 200, - 75, - 0, - undefined, - undefined, - undefined, - undefined, - false, - false, - { - background: 'black', - color: '#02d118', - fontWeight: 'bold', - fontSize: '16px', - }, + message, + lpdHelper.generateIconElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 80, 80, 0, 0), + DANGER_ICON, ), - 'Low Stress: Missile to ownship detected! T-30 till impact', ), -); + ); return { sections: [], possibleWidgets: [ - lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( - 'list', - 'highWarning', - 100, - 100, - 200, - 200, - '/pearce-screen', - false, - true, - 1, - elements, - )), - ], - }; -} - -const acaDefectMessageMedium = () => { - elements.push( - - lpdHelper.generateTableElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 50, - 200, - 0, - 0, + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( + 'list', + 'tinder', + 100, + 100, + 300, + 800, + '/pearce-screen', + false, + true, + 1, + [...elements], + ), ), + ], + }; +}; + +const acaDefectMessageMedium = (message: Message) => { + elements.push( + lpdHelper.generateTableElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, 0, 0, message.priority), 2, 2, - [['Defect', 'Engine'], ['Altitude', 'Low']]), + [ + ['Defect', 'Engine'], + ['Altitude', 'Low'], + ], + ), ); return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( 'list', - 'highWarning', + 'tinder', 500, 500, - 20, - 200, + 300, + 800, '/pearce-screen', false, true, 1, - elements, - ))], + [...elements], + ), + ), + ], }; -} +}; -const acaHeadingToBaseMessageMedium = () => { +const acaHeadingToBaseMessageMedium = (message: Message) => { elements.push( - lpdHelper.generateTextElement(lpdHelper.generateBaseElement( - uuid(), - 'visual', - 30, - 200, - 0, - 0, + lpdHelper.generateTextElement( + lpdHelper.generateBaseElement(uuid(), 'visual', 30, 200, 0, 0, message.priority), + 'Aircraft heading to base', ), - 'Aircraft heading to base'),); + ); return { - sections: [], - possibleWidgets: [lpdHelper.generateListWidget(lpdHelper.generateBaseWidget( + sections: [], + possibleWidgets: [ + lpdHelper.generateListWidget( + lpdHelper.generateBaseWidget( 'list', - 'message', + 'tinder', 500, 500, - 20, - 200, + 300, + 800, '/pearce-screen', false, true, 1, - elements, - ))], + [...elements], + ), + ), + ], }; -} +}; // Map each message type to its corresponding LPD function const mediumLPDMessageFunctions: any = { - 'RequestApprovalToAttack': requestApprovalToAttackMessageMedium, - 'AcaFuelLow': acaFuelLowMessageMedium, - 'AcaDefect': acaDefectMessageMedium, - 'AcaHeadingToBase': acaHeadingToBaseMessageMedium, - 'MissileToOwnshipDetected': missileToOwnshipDetectedMessageMedium, -} + RequestApprovalToAttack: requestApprovalToAttackMessageMedium, + AcaFuelLow: acaFuelLowMessageMedium, + AcaDefect: acaDefectMessageMedium, + AcaHeadingToBase: acaHeadingToBaseMessageMedium, + MissileToOwnshipDetected: missileToOwnshipDetectedMessageMedium, +}; const mediumLPD = (message: Message) => { - return mediumLPDMessageFunctions[message.kind](); + return mediumLPDMessageFunctions[message.kind](message); }; export default mediumLPD; \ No newline at end of file diff --git a/src/redux/slices/minimapSlice.ts b/src/redux/slices/minimapSlice.ts index 5466add..925841d 100644 --- a/src/redux/slices/minimapSlice.ts +++ b/src/redux/slices/minimapSlice.ts @@ -28,11 +28,11 @@ export type InitialMinimapState = { const initialState: InitialMinimapState = { visualComplexity: 0, audioComplexity: 0, - ownship, - drones, + ownship: null, + drones: [], messages: [], - // Initial sections, widgets, and elements - ...selector(), + widgets: {}, + sections: [], }; export const minimapSlice = createSlice({ diff --git a/src/utils/lpdHelper.ts b/src/utils/lpdHelper.ts index ec1ddb0..b90d8b2 100644 --- a/src/utils/lpdHelper.ts +++ b/src/utils/lpdHelper.ts @@ -5,6 +5,7 @@ import type * as Widget from "src/types/widget"; import type { Properties } from "csstype"; import type { Modality } from "src/types/modality"; import type { Screen, Section, SectionType } from "src/types/support-types"; +import type { MissileToOwnshipDetected, RequestApprovalToAttack } from "src/types/schema-types"; // Functions to create sections, widgets, and elements const generateSection = ( @@ -108,6 +109,8 @@ const generateBaseElement = ( w: number, xWidget: number, yWidget: number, + priority?: number, + widgetId?: string, collapsed?: boolean, expirationInterval?: number, expiration?: string, @@ -122,6 +125,8 @@ const generateBaseElement = ( w, xWidget, yWidget, + widgetId, + priority, collapsed, expirationInterval, expiration, @@ -197,6 +202,31 @@ const generateAudioElement = ( }); // Generate complex elements +const generateMissileIncomingElement = ( + baseElement: Element.BaseElement, + message: MissileToOwnshipDetected, + icon: Element.IconElement, +): Element.MissileIncomingElement => ({ + ...baseElement, + type: 'missile-incoming', + message, + icon, +}); + +const generateRequestApprovalElement = ( + baseElement: Element.BaseElement, + message: RequestApprovalToAttack, + icon: Element.IconElement, + leftButton: Element.ButtonElement, + rightButton: Element.ButtonElement, +): Element.RequestApprovalElement => ({ + ...baseElement, + type: 'request-approval', + message, + icon, + leftButton, + rightButton, +}); const lpdHelper = { generateBaseWidget, @@ -212,6 +242,8 @@ const lpdHelper = { generateTextElement, generateImageElement, generateAudioElement, + generateMissileIncomingElement, + generateRequestApprovalElement, }; export default lpdHelper; \ No newline at end of file diff --git a/submodules/message-schemas b/submodules/message-schemas index e92d57a..ce12c3c 160000 --- a/submodules/message-schemas +++ b/submodules/message-schemas @@ -1 +1 @@ -Subproject commit e92d57ab4226c46e97bdd5164f8121db67caf808 +Subproject commit ce12c3c5617c1dd30124481e795b6791daa7f3b0