diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index d15cd668e..e3a1afc5d 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -845,7 +845,7 @@ namespace BlackCore m_simulatorInternals.setSimulatorInstallationDirectory(s.getSimulatorDirectoryOrDefault()); } - void ISimulator::rememberElevationAndSimulatorCG(const CCallsign &callsign, const QString &modelString, const CElevationPlane &elevation, const CLength &simulatorCG) + void ISimulator::rememberElevationAndSimulatorCG(const CCallsign &callsign, const CAircraftModel &model, const CElevationPlane &elevation, const CLength &simulatorCG) { if (callsign.isEmpty()) { return; } if (!elevation.isNull()) @@ -855,14 +855,22 @@ namespace BlackCore this->rememberGroundElevation(callsign, elevation); } + const QString modelString = model.getModelString(); + if (modelString.isEmpty()) { return; } const CLength cgOvr = this->overriddenCGorDefault(simulatorCG, modelString); if (!cgOvr.isNull() && !this->hasSameSimulatorCG(cgOvr, callsign)) { this->insertCG(cgOvr, modelString, callsign); // per model string and CG - // here we know we have a valid model and CG - m_autoPublishing.insert(modelString, simulatorCG); // still using CG here, not the overridden value - m_autoPublishing.insert(modelString, this->getSimulatorInfo()); + // here we know we have a valid model and CG did change + const CSimulatorInfo sim = this->getSimulatorInfo(); + m_autoPublishing.insert(modelString, simulatorCG); // still using simulator CG here, not the overridden value + + // if simulator did change, add as well + if (!model.getSimulator().matchesAll(sim)) + { + m_autoPublishing.insert(modelString, this->getSimulatorInfo()); + } } } @@ -997,7 +1005,7 @@ namespace BlackCore void ISimulator::unload() { this->disconnectFrom(); // disconnect from simulator - const bool saved = m_autoPublishing.writeJsonToFile(); + const bool saved = m_autoPublishing.writeJsonToFile(); // empty data are ignored if (saved) { emit this->autoPublishDataWritten(this->getSimulatorInfo()); } m_autoPublishing.clear(); m_remoteAircraftProviderConnections.disconnectAll(); // disconnect signals from provider diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index f46be82f2..00d0ef491 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -435,7 +435,7 @@ namespace BlackCore //! Set elevation and CG in the providers and for auto publishing //! \sa ISimulator::updateOwnSituationAndGroundElevation - void rememberElevationAndSimulatorCG(const BlackMisc::Aviation::CCallsign &callsign, const QString &modelString, const BlackMisc::Geo::CElevationPlane &elevation, const BlackMisc::PhysicalQuantities::CLength &simulatorCG); + void rememberElevationAndSimulatorCG(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModel &model, const BlackMisc::Geo::CElevationPlane &elevation, const BlackMisc::PhysicalQuantities::CLength &simulatorCG); //! Emit the combined status //! \param oldStatus optionally one can capture and provide the old status for comparison. In case of equal status values no signal will be sent diff --git a/src/plugins/simulator/flightgear/flightgearmpaircraft.h b/src/plugins/simulator/flightgear/flightgearmpaircraft.h index 200088dd1..d67711f23 100644 --- a/src/plugins/simulator/flightgear/flightgearmpaircraft.h +++ b/src/plugins/simulator/flightgear/flightgearmpaircraft.h @@ -51,6 +51,9 @@ namespace BlackSimPlugin //! Simulated aircraft model string const QString &getAircraftModelString() const { return m_aircraft.getModelString(); } + //! Simulated aircraft model + const BlackMisc::Simulation::CAircraftModel &getAircraftModel() const { return m_aircraft.getModel(); } + //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolatorInfo QString getInterpolatorInfo(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.cpp b/src/plugins/simulator/flightgear/simulatorflightgear.cpp index fff141794..693ad1586 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.cpp +++ b/src/plugins/simulator/flightgear/simulatorflightgear.cpp @@ -732,7 +732,7 @@ namespace BlackSimPlugin const CLength cg = std::isnan(cgValue) ? CLength::null() : CLength(cgValue, CLengthUnit::m(), CLengthUnit::ft()); - this->rememberElevationAndSimulatorCG(cs, fgAircraft.getAircraftModelString(), elevation, cg); + this->rememberElevationAndSimulatorCG(cs, fgAircraft.getAircraftModel(), elevation, cg); // loopback if (logCallsigns.contains(cs)) diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 5446c7fa7..e7869d029 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -814,7 +814,7 @@ namespace BlackSimPlugin if (remoteAircraftData.aboveGroundFt() < 250) { const CLength cg(remoteAircraftData.cgToGroundFt, CLengthUnit::ft()); - this->rememberElevationAndSimulatorCG(cs, simObject.getAircraftModelString(), elevation, cg); + this->rememberElevationAndSimulatorCG(cs, simObject.getAircraftModel(), elevation, cg); } const bool log = this->isLogCallsign(cs); @@ -864,7 +864,7 @@ namespace BlackSimPlugin so.setAircraftModelString(modelString); // update in 2 providers - this->rememberElevationAndSimulatorCG(cs, modelString, CElevationPlane::null(), cg); // env. provider + this->rememberElevationAndSimulatorCG(cs, simObject.getAircraftModel(), CElevationPlane::null(), cg); // env. provider this->updateCGAndModelString(cs, cg, modelString); // remote aircraft provider } diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index ed315e75c..c509b9cc3 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -1005,7 +1005,7 @@ namespace BlackSimPlugin const CLength cg = std::isnan(cgValue) ? CLength::null() : CLength(cgValue, CLengthUnit::m(), CLengthUnit::ft()); - this->rememberElevationAndSimulatorCG(cs, xpAircraft.getAircraftModelString(), elevation, cg); + this->rememberElevationAndSimulatorCG(cs, xpAircraft.getAircraftModel(), elevation, cg); // loopback if (logCallsigns.contains(cs)) diff --git a/src/plugins/simulator/xplane/xplanempaircraft.h b/src/plugins/simulator/xplane/xplanempaircraft.h index 10348005e..55e886454 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.h +++ b/src/plugins/simulator/xplane/xplanempaircraft.h @@ -48,6 +48,9 @@ namespace BlackSimPlugin //! Simulated aircraft (as added) const BlackMisc::Simulation::CSimulatedAircraft &getAircraft() const { return m_aircraft; } + //! Simulated aircraft model + const BlackMisc::Simulation::CAircraftModel &getAircraftModel() const { return m_aircraft.getModel(); } + //! Simulated aircraft model string const QString &getAircraftModelString() const { return m_aircraft.getModelString(); }