diff --git a/src/blackmisc/simulation/simulatedaircraftlist.cpp b/src/blackmisc/simulation/simulatedaircraftlist.cpp index da4625a56..3ff5dff25 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.cpp +++ b/src/blackmisc/simulation/simulatedaircraftlist.cpp @@ -149,6 +149,18 @@ namespace BlackMisc return c; } + int CSimulatedAircraftList::setAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation, bool onlyFirst) + { + int c = 0; + for (CSimulatedAircraft &aircraft : (*this)) + { + if (aircraft.getCallsign() != callsign) { continue; } + aircraft.setSituation(situation); + if (onlyFirst) break; + } + return c; + } + int CSimulatedAircraftList::setGroundElevation(const CCallsign &callsign, const CAltitude &elevation, bool onlyFirst) { int c = 0; diff --git a/src/blackmisc/simulation/simulatedaircraftlist.h b/src/blackmisc/simulation/simulatedaircraftlist.h index 0ec46be96..bcd5b7842 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.h +++ b/src/blackmisc/simulation/simulatedaircraftlist.h @@ -89,6 +89,9 @@ namespace BlackMisc //! Set aircraft parts int setAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts, bool onlyFirst = true); + //! Set aircraft parts + int setAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, bool onlyFirst = true); + //! Set ground elevation int setGroundElevation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAltitude &elevation, bool onlyFirst = true); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index a48d482de..43e408502 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -1485,14 +1485,28 @@ namespace BlackSimPlugin void CSimulatorFsxCommon::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) { - if (!m_simConnectObjects.contains(situation.getCallsign())) { return; } - m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation); + if (m_simConnectObjects.contains(situation.getCallsign())) + { + m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation); + } + else + { + // update if in pending + m_addPendingAircraft.setAircraftSituation(situation.getCallsign(), situation); + } } - void CSimulatorFsxCommon::onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts) + void CSimulatorFsxCommon::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) { - if (!m_simConnectObjects.contains(callsign)) { return; } - m_simConnectObjects[callsign].addAircraftParts(parts); + if (m_simConnectObjects.contains(callsign)) + { + m_simConnectObjects[callsign].addAircraftParts(parts); + } + else + { + // update if in pending + m_addPendingAircraft.setAircraftParts(callsign, parts); + } } QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)