From cbd7d4e0ae543b39b7e0b2e198a6d43900724440 Mon Sep 17 00:00:00 2001 From: Kilian Hofmann Date: Sat, 14 Jun 2025 16:47:27 +0200 Subject: [PATCH] Check prog pax load/unload --- PackageSources/js-bundle/src/App.tsx | 4 +-- .../src/components/SBEntry/SBEntryPax.tsx | 19 +++++++------- .../js-bundle/src/components/pax/Pax.tsx | 16 ++---------- .../stationEntry/StationEntryPax.tsx | 19 +++++++------- .../src/components/zfwEntry/ZFWEntryPax.tsx | 19 +++++++------- .../js-bundle/src/configs/shared.ts | 21 ---------------- PackageSources/js-bundle/src/constants.ts | 2 +- PackageSources/js-bundle/src/utils/utils.ts | 25 +++++++++++++++++++ PackageSources/wasm-module/load-manager.cpp | 8 +++--- README.md | 3 --- ...fdidesign-md11-load-manager.code-workspace | 16 ++++++------ 11 files changed, 73 insertions(+), 79 deletions(-) delete mode 100644 PackageSources/js-bundle/src/configs/shared.ts create mode 100644 PackageSources/js-bundle/src/utils/utils.ts diff --git a/PackageSources/js-bundle/src/App.tsx b/PackageSources/js-bundle/src/App.tsx index 60616f6..fd72d3a 100644 --- a/PackageSources/js-bundle/src/App.tsx +++ b/PackageSources/js-bundle/src/App.tsx @@ -1,7 +1,7 @@ import { FC, useCallback, useEffect, useState } from 'react'; import Pax from './components/pax/Pax'; import { - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_LIVE_DATA_EVENT, TFDI_SIMBRIEF_USERNAME_CALL, TFDI_SIMBRIEF_USERNAME_EVENT, @@ -32,7 +32,7 @@ const App: FC = ({ commBus }) => { commBus.on(COMM_BUS_LIVE_DATA_EVENT, wasmCallback); setTimeout(() => { - Coherent.call(COHERENT_COMBUS_WASM_CALL, TFDI_SIMBRIEF_USERNAME_CALL, 'null'); + Coherent.call(COHERENT_COMM_BUS_WASM_CALL, TFDI_SIMBRIEF_USERNAME_CALL, 'null'); }, 1000); return () => { diff --git a/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx b/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx index e7f5fbc..3cccc5a 100644 --- a/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx +++ b/PackageSources/js-bundle/src/components/SBEntry/SBEntryPax.tsx @@ -1,7 +1,6 @@ import { FC, useEffect, useRef, useState } from 'react'; -import { unloadAircraft } from '../../configs/shared'; import { - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED, @@ -9,6 +8,7 @@ import { import { WASMDataPax } from '../../types/WASMData'; import { LoadingState } from '../../types/general'; import { ImportFlightPlan } from '../../utils/TFDISBImport'; +import { inRangeOf, loadAircraft, unloadAircraft } from '../../utils/utils'; import CGSelect from '../CGSelect/CGSelect'; import ActionBar from '../actionbar/ActionBar'; @@ -17,10 +17,9 @@ interface SBEntryProps { loadingState: LoadingState; username: string; setLoadingState: (newState: LoadingState) => void; - loadAircraft: () => void; } -const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoadingState, loadAircraft }) => { +const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [fuelEnabled, setFuelEnabled] = useState(true); @@ -31,7 +30,7 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa const cargo = useRef(0); const ZFW = () => { - if (loadingState !== 'loaded') return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -101,12 +100,12 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa [WASMData.userData.isER] ); useEffect(() => { - setFuelEnabled(Math.round(WASMData.livePayload.fuel) === fuel); + setFuelEnabled(inRangeOf(Math.round(WASMData.livePayload.fuel), fuel)); }, [WASMData.livePayload.fuel]); const updateData = (_CGTarget?: number) => { Coherent.call( - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, JSON.stringify({ mode: 0, @@ -200,7 +199,8 @@ const SBEntryPax: FC = ({ WASMData, loadingState, username, setLoa
= ({ WASMData, loadingState, username, setLoa
= ({ WASMData, username }) => { loadingState={loadingState} username={username} setLoadingState={setLoadingState} - loadAircraft={loadAircraft} /> )} {((username && selectedTab === 1) || (!username && selectedTab === 0)) && ( - + )} {((username && selectedTab === 2) || (!username && selectedTab === 1)) && ( - + )} ); diff --git a/PackageSources/js-bundle/src/components/stationEntry/StationEntryPax.tsx b/PackageSources/js-bundle/src/components/stationEntry/StationEntryPax.tsx index b54be44..631ea3e 100644 --- a/PackageSources/js-bundle/src/components/stationEntry/StationEntryPax.tsx +++ b/PackageSources/js-bundle/src/components/stationEntry/StationEntryPax.tsx @@ -1,23 +1,22 @@ import { FC, useEffect, useState } from 'react'; -import { unloadAircraft } from '../../configs/shared'; import { - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, GSX_SERVICE_CALLED, GSX_SERVICE_FINISHED, } from '../../constants'; import { LoadingState } from '../../types/general'; import { WASMDataPax } from '../../types/WASMData'; +import { inRangeOf, loadAircraft, unloadAircraft } from '../../utils/utils'; import ActionBar from '../actionbar/ActionBar'; interface StationEntryProps { WASMData: WASMDataPax; loadingState: LoadingState; setLoadingState: (newState: LoadingState) => void; - loadAircraft: () => void; } -const StationEntryPax: FC = ({ WASMData, loadingState, setLoadingState, loadAircraft }) => { +const StationEntryPax: FC = ({ WASMData, loadingState, setLoadingState }) => { const [business1, setBusiness1] = useState(WASMData.targetPayload.business1); const [business2, setBusiness2] = useState(WASMData.targetPayload.business2); const [economy1, setEconomy1] = useState(WASMData.targetPayload.economy1); @@ -28,7 +27,7 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded') return Math.round(WASMData.targetPayload.total); + if (loadingState !== 'loaded' && !GSXActive()) return Math.round(WASMData.targetPayload.total); return Math.round(WASMData.livePayload.total); }; @@ -73,12 +72,12 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa [WASMData.userData.isER] ); useEffect(() => { - setFuelEnabled(Math.round(WASMData.livePayload.fuel) === fuel); + setFuelEnabled(inRangeOf(Math.round(WASMData.livePayload.fuel), fuel)); }, [WASMData.livePayload.fuel]); const updateData = () => { Coherent.call( - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, JSON.stringify({ mode: 2, @@ -196,7 +195,8 @@ const StationEntryPax: FC = ({ WASMData, loadingState, setLoa
= ({ WASMData, loadingState, setLoa
void; - loadAircraft: () => void; } -const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingState, loadAircraft }) => { +const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingState }) => { const [CGTarget, setCGTarget] = useState(WASMData.targetPayload.CGTarget); const [fuel, setFuel] = useState(Math.round(WASMData.livePayload.fuel)); const [ZFWTarget, setZFWTarget] = useState(Math.round(WASMData.targetPayload.total)); const [fuelEnabled, setFuelEnabled] = useState(true); const ZFW = () => { - if (loadingState !== 'loaded') return ZFWTarget; + if (loadingState !== 'loaded' && !GSXActive()) return ZFWTarget; return Math.round(WASMData.livePayload.total); }; @@ -96,12 +95,12 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat [WASMData.userData.isER] ); useEffect(() => { - setFuelEnabled(Math.round(WASMData.livePayload.fuel) === fuel); + setFuelEnabled(inRangeOf(Math.round(WASMData.livePayload.fuel), fuel)); }, [WASMData.livePayload.fuel]); const updateData = (_ZFWTarget?: number, _CGTarget?: number) => { Coherent.call( - COHERENT_COMBUS_WASM_CALL, + COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT, JSON.stringify({ mode: 1, @@ -186,7 +185,8 @@ const ZFWEntryPax: FC = ({ WASMData, loadingState, setLoadingStat
= ({ WASMData, loadingState, setLoadingStat
{ - Coherent.call( - COHERENT_COMBUS_WASM_CALL, - COMM_BUS_UPDATE_TARGET_EVENT, - JSON.stringify({ - mode: 3, - }) - ); -}; - -export const unloadAircraft = () => { - Coherent.call( - COHERENT_COMBUS_WASM_CALL, - COMM_BUS_UPDATE_TARGET_EVENT, - JSON.stringify({ - mode: 4, - }) - ); -}; diff --git a/PackageSources/js-bundle/src/constants.ts b/PackageSources/js-bundle/src/constants.ts index 9e5a2ef..ec273aa 100644 --- a/PackageSources/js-bundle/src/constants.ts +++ b/PackageSources/js-bundle/src/constants.ts @@ -1,4 +1,4 @@ -export const COHERENT_COMBUS_WASM_CALL = 'COMM_BUS_WASM_CALLBACK'; +export const COHERENT_COMM_BUS_WASM_CALL = 'COMM_BUS_WASM_CALLBACK'; export const TFDI_SIMBRIEF_USERNAME_CALL = 'requestSimBriefUsername'; export const TFDI_SIMBRIEF_USERNAME_EVENT = 'receiveSimBriefUsername'; diff --git a/PackageSources/js-bundle/src/utils/utils.ts b/PackageSources/js-bundle/src/utils/utils.ts new file mode 100644 index 0000000..1fa77a0 --- /dev/null +++ b/PackageSources/js-bundle/src/utils/utils.ts @@ -0,0 +1,25 @@ +import { COHERENT_COMM_BUS_WASM_CALL, COMM_BUS_UPDATE_TARGET_EVENT } from '../constants'; + +export const loadAircraft = () => { + Coherent.call( + COHERENT_COMM_BUS_WASM_CALL, + COMM_BUS_UPDATE_TARGET_EVENT, + JSON.stringify({ + mode: 3, + }) + ); +}; + +export const unloadAircraft = () => { + Coherent.call( + COHERENT_COMM_BUS_WASM_CALL, + COMM_BUS_UPDATE_TARGET_EVENT, + JSON.stringify({ + mode: 4, + }) + ); +}; + +export const inRangeOf = (value: number, target: number, tolerance: number = 10) => { + return Math.abs(value - target) < 10; +}; diff --git a/PackageSources/wasm-module/load-manager.cpp b/PackageSources/wasm-module/load-manager.cpp index ff04a2c..7bd4a1a 100644 --- a/PackageSources/wasm-module/load-manager.cpp +++ b/PackageSources/wasm-module/load-manager.cpp @@ -891,13 +891,13 @@ void CALLBACK MyDispatchProc(SIMCONNECT_RECV* pData, DWORD cbData, void* pContex memcpy(&localPayload, targetPaxPayloadData, sizeof(localPayload)); localPayload.paxCount.business1 -= min(targetPaxPayloadData->paxCount.business1, passengersDeboarded); - passengersDeboarded -= localPayload.paxCount.business1; + passengersDeboarded -= targetPaxPayloadData->paxCount.business1 - localPayload.paxCount.business1; localPayload.paxCount.business2 -= min(targetPaxPayloadData->paxCount.business2, passengersDeboarded); - passengersDeboarded -= localPayload.paxCount.business2; + passengersDeboarded -= targetPaxPayloadData->paxCount.business2 - localPayload.paxCount.business2; localPayload.paxCount.economy1 -= min(targetPaxPayloadData->paxCount.economy1, passengersDeboarded); - passengersDeboarded -= localPayload.paxCount.economy1; + passengersDeboarded -= targetPaxPayloadData->paxCount.economy1 - localPayload.paxCount.economy1; localPayload.paxCount.economy2 -= min(targetPaxPayloadData->paxCount.economy2, passengersDeboarded); - passengersDeboarded -= localPayload.paxCount.economy2; + passengersDeboarded -= targetPaxPayloadData->paxCount.economy2 - localPayload.paxCount.economy2; localPayload.forwardCargo -= targetPaxPayloadData->forwardCargo * (cargoDeboarded / 100); localPayload.rearCargo -= targetPaxPayloadData->rearCargo * (cargoDeboarded / 100); diff --git a/README.md b/README.md index 148a763..ad6e985 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ - https://www.satco-inc.com/product-pallet/?part_number=31086-595 - https://www.satco-inc.com/product-container/?part_number=34124-901 -Coherent.call("COMM_BUS_WASM_CALLBACK", "khofmann_tfdi_md-11_load_manager_update_target", '{"mode" : 1, "ZFWTarget": 162000, "CGTarget": 20.5}'); - TODO: - JS @@ -16,4 +14,3 @@ TODO: - WASM - Custom pax/bag weights - F loading stuff - - TEST GSX synced unload diff --git a/xkhofmann-tfdidesign-md11-load-manager.code-workspace b/xkhofmann-tfdidesign-md11-load-manager.code-workspace index 876a149..ebe4802 100644 --- a/xkhofmann-tfdidesign-md11-load-manager.code-workspace +++ b/xkhofmann-tfdidesign-md11-load-manager.code-workspace @@ -1,8 +1,10 @@ { - "folders": [ - { - "path": "." - } - ], - "settings": {} -} \ No newline at end of file + "folders": [ + { + "path": "." + } + ], + "settings": { + "cSpell.words": ["deboarding", "khofmann", "tfdi", "TFDI", "TOCG", "ZFWCG"] + } +}