From 3a6df31c99e8df4454a6e34898880e02379ccde5 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 17 Mar 2017 18:56:57 +0100 Subject: [PATCH] refs #916, interpolator mode utility functions for SimObjects --- .../simulator/fsxcommon/simconnectobject.cpp | 38 ++++++++++++++++++- .../simulator/fsxcommon/simconnectobject.h | 28 ++++++++------ 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 59d75e0d5..7b2f9f304 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -22,9 +22,9 @@ namespace BlackSimPlugin CSimConnectObject::CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, DWORD requestId, - BlackMisc::Simulation::CInterpolationLogger *logger) : + CInterpolationLogger *logger) : m_aircraft(aircraft), m_requestId(requestId), m_validRequestId(true), - m_interpolator(QSharedPointer::create(aircraft.getCallsign())) + m_interpolator(QSharedPointer::create(aircraft.getCallsign())) { m_interpolator->attachLogger(logger); } @@ -74,6 +74,16 @@ namespace BlackSimPlugin return this->hasValidRequestId() && this->hasValidObjectId(); } + void CSimConnectObject::toggleInterpolatorMode() + { + this->m_interpolator->toggleMode(); + } + + bool CSimConnectObject::setInterpolatorMode(CInterpolatorMulti::Mode mode) + { + return this->m_interpolator->setMode(mode); + } + bool CSimConnectObjects::setSimConnectObjectIdForRequestId(DWORD requestId, DWORD objectId, bool resetSentParts) { // First check, if this request id belongs to us @@ -123,5 +133,29 @@ namespace BlackSimPlugin } return false; } + + void CSimConnectObjects::toggleInterpolatorModes() + { + for (const CCallsign &cs : this->keys()) + { + (*this)[cs].toggleInterpolatorMode(); + } + } + + void CSimConnectObjects::toggleInterpolatorMode(const CCallsign &callsign) + { + if (!this->contains(callsign)) { return; } + (*this)[callsign].toggleInterpolatorMode(); + } + + int CSimConnectObjects::setInterpolatorModes(CInterpolatorMulti::Mode mode) + { + int c = 0; + for (const CCallsign &cs : this->keys()) + { + if ((*this)[cs].setInterpolatorMode(mode)) c++; + } + return c; + } } // namespace } // namespace diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index 3578cd954..f139e9e60 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -13,18 +13,10 @@ #define BLACKSIMPLUGIN_FSXCOMMON_SIMCONNECTOBJECT_H #include "blackmisc/simulation/simulatedaircraft.h" +#include "blackmisc/simulation/interpolatormulti.h" #include "simconnectdatadefinition.h" #include -namespace BlackMisc -{ - namespace Simulation - { - class CInterpolatorLinear; - class CInterpolatorMulti; - class CInterpolationLogger; - } -} namespace BlackSimPlugin { namespace FsxCommon @@ -128,12 +120,18 @@ namespace BlackSimPlugin //! Was the object really added to SIM bool hasValidRequestAndObjectId() const; + //! Toggle interpolator mode + void toggleInterpolatorMode(); + + //! Set interpolator mode + bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode); + private: BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft DWORD m_requestId = 0; DWORD m_objectId = 0; bool m_validRequestId = false; - bool m_validObjectId = false; + bool m_validObjectId = false; bool m_confirmedAdded = false; bool m_pendingRemoved = false; int m_lightsRequestedAt = -1; @@ -141,7 +139,6 @@ namespace BlackSimPlugin BlackMisc::Aviation::CAircraftLights m_currentLightsInSim { nullptr }; //!< current lights to know state for toggling BlackMisc::Aviation::CAircraftLights m_lightsAsSent { nullptr }; //!< lights as sent to simulator SIMCONNECT_PERIOD m_requestSimDataPeriod = SIMCONNECT_PERIOD_NEVER; //!< how often do we query ground elevation - // QSharedPointer m_interpolator; //!< shared pointer because CSimConnectObject can be copied QSharedPointer m_interpolator; //!< shared pointer because CSimConnectObject can be copied }; @@ -166,6 +163,15 @@ namespace BlackSimPlugin //! Pending add condition bool containsPendingAdd() const; + + //! Toggle interpolator modes + void toggleInterpolatorModes(); + + //! Toggle interpolator modes + void toggleInterpolatorMode(const BlackMisc::Aviation::CCallsign &callsign); + + //! Set interpolator modes + int setInterpolatorModes(BlackMisc::Simulation::CInterpolatorMulti::Mode mode); }; } // namespace } // namespace