diff --git a/src/blackcore/context/contextownaircraftimpl.cpp b/src/blackcore/context/contextownaircraftimpl.cpp index 8a1a43af8..cce534142 100644 --- a/src/blackcore/context/contextownaircraftimpl.cpp +++ b/src/blackcore/context/contextownaircraftimpl.cpp @@ -290,6 +290,15 @@ namespace BlackCore return true; } + bool CContextOwnAircraft::updateOwnCG(const CLength &cg) + { + QWriteLocker l(&m_lockAircraft); + const bool changed = (m_ownAircraft.getModel().getCG() != cg); + if (!changed) { return false; } + m_ownAircraft.setCG(cg); + return true; + } + bool CContextOwnAircraft::updateOwnPosition(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::Aviation::CAltitude &altitude, const CAltitude &pressureAltitude) { if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << position << altitude; } diff --git a/src/blackcore/context/contextownaircraftimpl.h b/src/blackcore/context/contextownaircraftimpl.h index 436d9a615..d73195307 100644 --- a/src/blackcore/context/contextownaircraftimpl.h +++ b/src/blackcore/context/contextownaircraftimpl.h @@ -110,6 +110,10 @@ namespace BlackCore //! \ingroup ownaircraftprovider virtual bool updateOwnParts(const BlackMisc::Aviation::CAircraftParts &parts) override; + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::updateOwnParts + //! \ingroup ownaircraftprovider + virtual bool updateOwnCG(const BlackMisc::PhysicalQuantities::CLength &cg) override; + //! \copydoc BlackMisc::IProvider::asQObject virtual QObject *asQObject() override { return this; } diff --git a/src/blackmisc/simulation/ownaircraftprovider.cpp b/src/blackmisc/simulation/ownaircraftprovider.cpp index 0ce037d39..f23ac0cd0 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.cpp +++ b/src/blackmisc/simulation/ownaircraftprovider.cpp @@ -105,6 +105,12 @@ namespace BlackMisc return this->provider()->updateOwnParts(parts); } + bool COwnAircraftAware::updateOwnCG(const CLength &cg) + { + Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); + return this->provider()->updateOwnCG(cg); + } + bool COwnAircraftAware::updateOwnCallsign(const CCallsign &callsign) { Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); diff --git a/src/blackmisc/simulation/ownaircraftprovider.h b/src/blackmisc/simulation/ownaircraftprovider.h index 3912548cf..2e8a31145 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.h +++ b/src/blackmisc/simulation/ownaircraftprovider.h @@ -92,6 +92,9 @@ namespace BlackMisc //! Update own parts virtual bool updateOwnParts(const Aviation::CAircraftParts &parts) = 0; + //! Update own aircraft's CG (aka vertical offset) + virtual bool updateOwnCG(const PhysicalQuantities::CLength &cg) = 0; + // ------------------------------------------------------------------------ // cockpit / aircraft related updates, which can come from multiple sources // and are subject of roundtrips -> originator @@ -168,6 +171,9 @@ namespace BlackMisc //! \copydoc IOwnAircraftProvider::updateOwnParts bool updateOwnParts(const Aviation::CAircraftParts &parts); + //! \copydoc IOwnAircraftProvider::updateOwnCG + bool updateOwnCG(const PhysicalQuantities::CLength &cg); + protected: //! Constructor COwnAircraftAware(IOwnAircraftProvider *ownAircraftProvider) : IProviderAware(ownAircraftProvider) { Q_ASSERT(ownAircraftProvider); } diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp index 8b4b59014..97853a60c 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp @@ -113,6 +113,12 @@ namespace BlackMisc return true; } + bool COwnAircraftProviderDummy::updateOwnCG(const CLength &cg) + { + QWriteLocker l(&m_lock); + return m_ownAircraft.setCG(cg); + } + bool COwnAircraftProviderDummy::updateOwnCallsign(const CCallsign &callsign) { QWriteLocker l(&m_lock); diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.h b/src/blackmisc/simulation/ownaircraftproviderdummy.h index e72f4288b..be9ae19c3 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.h +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.h @@ -102,6 +102,9 @@ namespace BlackMisc //! \copydoc IOwnAircraftProvider::updateOwnParts virtual bool updateOwnParts(const BlackMisc::Aviation::CAircraftParts &parts) override; + //! \copydoc IOwnAircraftProvider::updateOwnCG + virtual bool updateOwnCG(const BlackMisc::PhysicalQuantities::CLength &cg) override; + private: BlackMisc::Simulation::CSimulatedAircraft m_ownAircraft; mutable QReadWriteLock m_lock; //!< lock for m_ownAircraft