diff --git a/src/blackcore/simulator.cpp b/src/blackcore/simulator.cpp index 8b5b4def3..273279a44 100644 --- a/src/blackcore/simulator.cpp +++ b/src/blackcore/simulator.cpp @@ -78,6 +78,13 @@ namespace BlackCore ISimulator::registerHelp(); } + void ISimulator::rememberElevationAndCG(const CCallsign &callsign, const Geo::CElevationPlane &elevation, const CLength &cg) + { + if (callsign.isEmpty()) { return; } + if (!elevation.isNull()) { this->rememberGroundElevation(elevation); } + if (!cg.isNull() && !this->hasSameCG(cg, callsign)) { this->insertCG(cg, callsign); } + } + void ISimulator::emitSimulatorCombinedStatus(SimulatorStatus oldStatus) { const SimulatorStatus newStatus = this->getSimulatorStatus(); diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 65ca2a372..8b8cefd1a 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -258,6 +258,9 @@ namespace BlackCore //! Remove all remote aircraft virtual int physicallyRemoveAllRemoteAircraft() = 0; + //! Set elevation and CG in the providers + void rememberElevationAndCG(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevation, const BlackMisc::PhysicalQuantities::CLength &cg); + //! 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 //! \sa simulatorStatusChanged; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 0f609a936..5b0070e75 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -485,12 +485,9 @@ namespace BlackSimPlugin } // CElevationPlane: deg, deg, feet - CElevationPlane elevation(remoteAircraftData.latitude, remoteAircraftData.longitude, remoteAircraftData.elevation); + CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt); elevation.setSinglePointRadius(); - - // set it in the remote aircraft provider and in elevation provider - this->updateAircraftGroundElevation(simObject.getCallsign(), elevation); - this->rememberGroundElevation(elevation); + this->rememberElevationAndCG(simObject.getCallsign(), elevation, CLength(remoteAircraftData.cgToGroundFt, CLengthUnit::ft())); } void CSimulatorFsxCommon::updateOwnAircraftFromSimulator(const DataDefinitionClientAreaSb &sbDataArea) diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 061a4e7b7..b30e34c0b 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -923,11 +923,7 @@ namespace BlackSimPlugin CElevationPlane elevation(CLatitude(latitudeDeg, CAngleUnit::deg()), CLongitude(longitudeDeg, CAngleUnit::deg()), CAltitude(elevationMeters, CLengthUnit::m())); elevation.setSinglePointRadius(); - this->rememberGroundElevation(elevation); - this->insertCG(CLength(modelVerticalOffsetMeters, CLengthUnit::m()), callsign); - - // set it in the remote aircraft provider - this->updateAircraftGroundElevation(cs, elevation); + this->rememberElevationAndCG(callsign, elevation, CLength(modelVerticalOffsetMeters, CLengthUnit::m())); } BlackCore::ISimulator *CSimulatorXPlaneFactory::create(const CSimulatorPluginInfo &info,