diff --git a/src/blackcore/context/contextownaircraftimpl.cpp b/src/blackcore/context/contextownaircraftimpl.cpp index c03d37c5a..953d88341 100644 --- a/src/blackcore/context/contextownaircraftimpl.cpp +++ b/src/blackcore/context/contextownaircraftimpl.cpp @@ -226,7 +226,6 @@ namespace BlackCore } emit this->movedAircraft(); } - } } // only if simulating } @@ -249,7 +248,7 @@ namespace BlackCore } // changed model - emit this->changedModel(model); + emit this->changedModel(updateModel); return true; } diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 5bcecf8de..cbcffac10 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -13,6 +13,7 @@ #include "blackcore/context/contextownaircraft.h" #include "blackcore/context/contextownaircraftimpl.h" #include "blackcore/context/contextsimulatorimpl.h" +#include "blackcore/db/databaseutils.h" #include "blackcore/corefacade.h" #include "blackcore/application.h" #include "blackcore/pluginmanagersimulator.h" @@ -43,6 +44,7 @@ #include using namespace BlackConfig; +using namespace BlackCore::Db; using namespace BlackMisc; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; @@ -374,7 +376,7 @@ namespace BlackCore Q_ASSERT(c); c = connect(simulator, &ISimulator::physicallyAddingRemoteModelFailed, this, &CContextSimulator::onAddingRemoteAircraftFailed); Q_ASSERT(c); - c = connect(simulator, &ISimulator::ownAircraftModelChanged, this, &IContextSimulator::ownAircraftModelChanged); + c = connect(simulator, &ISimulator::ownAircraftModelChanged, this, &CContextSimulator::onOwnSimulatorModelChanged); Q_ASSERT(c); c = connect(simulator, &ISimulator::aircraftRenderingChanged, this, &IContextSimulator::aircraftRenderingChanged); Q_ASSERT(c); @@ -960,6 +962,16 @@ namespace BlackCore } } + void CContextSimulator::onOwnSimulatorModelChanged(const CAircraftModel &model) + { + CAircraftModel lookupModel(model); + if (!lookupModel.isLoadedFromDb()) + { + lookupModel = this->reverseLookupModel(model); + } + this->ownAircraftModelChanged(lookupModel); + } + void CContextSimulator::stopSimulatorListeners() { for (const CSimulatorPluginInfo &info : getAvailableSimulatorPlugins()) @@ -996,6 +1008,13 @@ namespace BlackCore m_matchingMessages.remove(callsign); } + CAircraftModel CContextSimulator::reverseLookupModel(const CAircraftModel &model) + { + bool modified = false; + const CAircraftModel reverseModel = CDatabaseUtils::consolidateOwnAircraftModelWithDbData(model, false, &modified); + return reverseModel; + } + void CContextSimulator::initByLastUsedModelSet() { // no models in matcher, but in cache, we can set them as default diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index ff5cd0baf..30f1a0b6d 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -203,6 +203,9 @@ namespace BlackCore //! Listener reports the simulator has started void onSimulatorStarted(const BlackMisc::Simulation::CSimulatorPluginInfo &info); + //! Simulator model has been changed + void onOwnSimulatorModelChanged(const BlackMisc::Simulation::CAircraftModel &model); + //! Failed adding remote aircraft void onAddingRemoteAircraftFailed(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, bool disabled, const BlackMisc::CStatusMessage &message); @@ -236,6 +239,9 @@ namespace BlackCore //! Clear matching messages void clearMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign); + //! Reverse lookup of a model + BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model); + //! Load the last know model set void initByLastUsedModelSet(); diff --git a/src/blackgui/components/logincomponent.cpp b/src/blackgui/components/logincomponent.cpp index e8b7b591a..2e1bdc898 100644 --- a/src/blackgui/components/logincomponent.cpp +++ b/src/blackgui/components/logincomponent.cpp @@ -136,8 +136,8 @@ namespace BlackGui if (sGui && sGui->getIContextSimulator()) { - connect(sGui->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this, &CLoginComponent::onSimulatorModelChanged); - connect(sGui->getIContextSimulator(), &IContextSimulator::vitalityLost, this, &CLoginComponent::autoLogoffDetection); + connect(sGui->getIContextSimulator(), &IContextSimulator::ownAircraftModelChanged, this, &CLoginComponent::onSimulatorModelChanged, Qt::QueuedConnection); + connect(sGui->getIContextSimulator(), &IContextSimulator::vitalityLost, this, &CLoginComponent::autoLogoffDetection, Qt::QueuedConnection); } // server and UI elements when in disconnect state diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 5938970ec..185360dbc 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -228,8 +228,9 @@ namespace BlackSimPlugin situation.setBank({ m_xplaneData.rollDeg, CAngleUnit::deg() }); situation.setGroundSpeed({ m_xplaneData.groundspeedMs, CSpeedUnit::m_s() }); - // updates - updateOwnIcaoCodes(m_xplaneData.aircraftIcaoCode, CAirlineIcaoCode()); + // Updates + // Do not update ICAO codes, as this overrides reverse lookups + // updateOwnIcaoCodes(m_xplaneData.aircraftIcaoCode, CAirlineIcaoCode()); updateOwnSituation(situation); // defaults @@ -276,7 +277,7 @@ namespace BlackSimPlugin { if (isConnected()) { - m_serviceProxy->getAircraftModelPathAsync(&m_xplaneData.aircraftModelPath); + m_serviceProxy->getAircraftModelPathAsync(&m_xplaneData.aircraftModelPath); // this is NOT the model string m_serviceProxy->getAircraftIcaoCodeAsync(&m_xplaneData.aircraftIcaoCode); m_serviceProxy->getBeaconLightsOnAsync(&m_xplaneData.beaconLightsOn); m_serviceProxy->getLandingLightsOnAsync(&m_xplaneData.landingLightsOn);