From 2fbc7acc7deddbe74474a0ef3270673d9cd9d9c9 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 19 Jan 2018 03:09:40 +0100 Subject: [PATCH] Ref T229, track sent position in SimObject --- .../simulator/fsxcommon/simconnectobject.cpp | 21 ++++++++++++++++++- .../simulator/fsxcommon/simconnectobject.h | 13 ++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 6f8053c4b..e04141968 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -69,6 +69,24 @@ namespace BlackSimPlugin m_partsAsSent = dd; } + bool CSimConnectObject::isSameAsSent(const SIMCONNECT_DATA_INITPOSITION &position) const + { + return std::tie(m_positionAsSent.Airspeed, m_positionAsSent.Altitude, m_positionAsSent.Bank, m_positionAsSent.Heading, m_positionAsSent.Latitude, m_positionAsSent.Longitude, m_positionAsSent.Pitch, m_positionAsSent.OnGround) == + std::tie(position.Airspeed, position.Altitude, position.Bank, position.Heading, position.Latitude, position.Longitude, position.Pitch, position.OnGround); + } + + void CSimConnectObject::invalidatePositionAsSent() + { + m_positionAsSent.Airspeed = 0; + m_positionAsSent.Altitude = -1; + m_positionAsSent.Bank = -1; + m_positionAsSent.Heading = -1; + m_positionAsSent.Latitude = -1; + m_positionAsSent.Longitude = -1; + m_positionAsSent.OnGround = 0; + m_positionAsSent.Pitch = -1; + } + void CSimConnectObject::setObjectId(DWORD id) { m_objectId = id; @@ -104,12 +122,13 @@ namespace BlackSimPlugin m_confirmedAdded = false; m_currentLightsInSim = CAircraftLights(); m_lightsAsSent = CAircraftLights(); - m_partsAsSent = DataDefinitionRemoteAircraftPartsWithoutLights {}; // init with 0s m_requestId = -1; m_objectId = -1; m_lightsRequestedAt = -1; m_validRequestId = false; m_validObjectId = false; + this->invalidatePartsAsSent(); + this->invalidatePositionAsSent(); } bool CSimConnectObject::hasValidRequestAndObjectId() const diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index aade8ab50..1b58461d7 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -81,6 +81,18 @@ namespace BlackSimPlugin //! Invalidate parts as sent void invalidatePartsAsSent(); + //! Parts as sent to simulator + const SIMCONNECT_DATA_INITPOSITION &getPositionAsSent() const { return m_positionAsSent; } + + //! Position as sent + void setPositionAsSent(const SIMCONNECT_DATA_INITPOSITION &position) { m_positionAsSent = position; } + + //! Same as sent + bool isSameAsSent(const SIMCONNECT_DATA_INITPOSITION &position) const; + + //! Invalidate position as sent; + void invalidatePositionAsSent(); + //! Lights as sent to simulator const BlackMisc::Aviation::CAircraftLights &getLightsAsSent() const { return m_lightsAsSent; } @@ -172,6 +184,7 @@ namespace BlackSimPlugin bool m_pendingRemoved = false; int m_lightsRequestedAt = -1; DataDefinitionRemoteAircraftPartsWithoutLights m_partsAsSent {}; //!< parts as sent + SIMCONNECT_DATA_INITPOSITION m_positionAsSent {}; //!< position as sent 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