From 924d4aab7f042f07b7aa8adbe89bc5cbd6415f37 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 4 Nov 2017 15:53:08 +0100 Subject: [PATCH] Ref T180, get interpolated situation utility function in CSimConnectObject, returning the aircraft situation if there is no interpolation value --- .../simulator/fsxcommon/simconnectobject.cpp | 13 +++++++++++++ src/plugins/simulator/fsxcommon/simconnectobject.h | 13 ++++++++++--- .../simulator/fsxcommon/simulatorfsxcommon.cpp | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 7296618f0..ed565d4be 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -98,6 +98,19 @@ namespace BlackSimPlugin return m_interpolator->getInterpolatorInfo(); } + CAircraftSituation CSimConnectObject::getInterpolatedSituation( + qint64 currentTimeSinceEpoc, + const CInterpolationAndRenderingSetup &setup, + const CInterpolationHints &hints, CInterpolationStatus &status) const + { + Q_ASSERT(m_interpolator); + const CAircraftSituation s = m_interpolator->getInterpolatedSituation(currentTimeSinceEpoc, setup, hints, status); + + // return original position if interpolation fails for some reason + const bool valid = status.allTrue() && !s.isPositionNull() && !s.isGeodeticHeightNull(); + return valid ? m_aircraft.getSituation() : s; + } + bool CSimConnectObjects::setSimConnectObjectIdForRequestId(DWORD requestId, DWORD objectId, bool resetSentParts) { // First check, if this request id belongs to us diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index d3969cceb..6761f5ebd 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -45,9 +45,6 @@ namespace BlackSimPlugin //! Simulated aircraft model string const QString &getAircraftModelString() const { return m_aircraft.getModelString(); } - //! Interpolator - BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); } - //! Add parts for interpolator void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts); @@ -132,6 +129,16 @@ namespace BlackSimPlugin //! Interpolator info QString getInterpolatorInfo() const; + //! Interpolator + BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); } + + //! Get interpolated situation + //! \remark return original position if interpolation fails for some reason + BlackMisc::Aviation::CAircraftSituation getInterpolatedSituation( + qint64 currentTimeSinceEpoc, + const BlackMisc::Simulation::CInterpolationAndRenderingSetup &setup, + const BlackMisc::Simulation::CInterpolationHints &hints, BlackMisc::Simulation::CInterpolationStatus &status) const; + private: BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft DWORD m_requestId = 0; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index e1692b636..10b4d9d1e 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -1068,7 +1068,7 @@ namespace BlackSimPlugin CInterpolationHints hints(m_hints[callsign]); hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts); hints.setLoggingInterpolation(logInterpolationAndParts); - const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus); + const CAircraftSituation interpolatedSituation = simObj.getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus); if (interpolatorStatus.allTrue()) {