diff --git a/src/plugins/simulator/fsx/simconnect_datadefinition.cpp b/src/plugins/simulator/fsx/simconnect_datadefinition.cpp index 39267d873..ae019791d 100644 --- a/src/plugins/simulator/fsx/simconnect_datadefinition.cpp +++ b/src/plugins/simulator/fsx/simconnect_datadefinition.cpp @@ -19,7 +19,7 @@ namespace BlackSimPlugin { HRESULT hr = S_OK; hr = initOwnAircraft(hSimConnect); - hr = initAircraftPosition(hSimConnect); + hr = initRemoteAircraftSituation(hSimConnect); hr = initAircraftConfiguration(hSimConnect); return hr; } @@ -44,15 +44,10 @@ namespace BlackSimPlugin return hr; } - HRESULT CSimConnectDataDefinition::initAircraftPosition(const HANDLE hSimConnect) + HRESULT CSimConnectDataDefinition::initRemoteAircraftSituation(const HANDLE hSimConnect) { HRESULT hr = S_OK; - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Latitude", "Degrees"); - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Longitude", "Degrees"); - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Altitude", "Feet"); - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Heading Degrees True", "Degrees"); - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Pitch Degrees", "Degrees"); - hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Bank Degrees", "Degrees"); + hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataDefinitionRemoteAircraftSituation, "Initial Position", "", SIMCONNECT_DATATYPE_INITPOSITION); return hr; } diff --git a/src/plugins/simulator/fsx/simconnect_datadefinition.h b/src/plugins/simulator/fsx/simconnect_datadefinition.h index d466a33a6..b6323fdd4 100644 --- a/src/plugins/simulator/fsx/simconnect_datadefinition.h +++ b/src/plugins/simulator/fsx/simconnect_datadefinition.h @@ -34,14 +34,9 @@ namespace BlackSimPlugin }; //! \brief Data struct of aircraft position - struct DataDefinitionAircraftPosition + struct DataDefinitionRemoteAircraftSituation { - double latitude; //!< Latitude - double longitude; //!< Longitude - double altitude; //!< Altitude - double trueHeading; //!< True heading - double pitch; //!< Pitch - double bank; //!< Bank + SIMCONNECT_DATA_INITPOSITION position; //!< Position struct }; //! \brief Data struct of aircraft position @@ -62,7 +57,7 @@ namespace BlackSimPlugin //! \brief SimConnect definiton ID's enum DataDefiniton { DataOwnAircraft, - DataAircraftPosition, + DataDefinitionRemoteAircraftSituation, DataAircraftConfiguration }; @@ -93,7 +88,7 @@ namespace BlackSimPlugin * \param hSimConnect * \return */ - static HRESULT initAircraftPosition(const HANDLE hSimConnect); + static HRESULT initRemoteAircraftSituation(const HANDLE hSimConnect); /*! * \brief Initialize data definition for remote aircraft configuration diff --git a/src/plugins/simulator/fsx/simulator_fsx.cpp b/src/plugins/simulator/fsx/simulator_fsx.cpp index 78c846000..e1c774b86 100644 --- a/src/plugins/simulator/fsx/simulator_fsx.cpp +++ b/src/plugins/simulator/fsx/simulator_fsx.cpp @@ -350,15 +350,20 @@ namespace BlackSimPlugin { if (simObj.m_interpolator.hasEnoughAircraftSituations()) { - DataDefinitionAircraftPosition position; - CAircraftSituation situation = simObj.m_interpolator.getCurrentSituation(); - position.latitude = situation.latitude().value(); - position.longitude = situation.longitude().value(); - position.altitude = situation.getAltitude().value(CLengthUnit::ft()); - position.pitch = situation.getPitch().value(); - position.bank = situation.getBank().value(); - position.trueHeading = situation.getHeading().value(CAngleUnit::deg()); + SIMCONNECT_DATA_INITPOSITION position; + CAircraftSituation situation = simObj.m_interpolator.getCurrentSituation(); + position.Latitude = situation.latitude().value(); + position.Longitude = situation.longitude().value(); + position.Altitude = situation.getAltitude().value(CLengthUnit::ft()); + position.Pitch = situation.getPitch().value(); + position.Bank = situation.getBank().value(); + position.Heading = situation.getHeading().value(CAngleUnit::deg()); + position.Airspeed = situation.getGroundSpeed().value(CSpeedUnit::kts()); + position.OnGround = position.Airspeed < 30 ? 1 : 0; + + DataDefinitionRemoteAircraftSituation ddAircraftSituation; + ddAircraftSituation.position = position; DataDefinitionAircraftConfiguration configuration; configuration.gearCenter = 100.0; configuration.gearLeft = 100.0; @@ -368,7 +373,7 @@ namespace BlackSimPlugin if (simObj.m_objectId != 0) { - SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, simObj.m_objectId, SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(DataDefinitionAircraftPosition), &position); + SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDataDefinition::DataDefinitionRemoteAircraftSituation, simObj.m_objectId, SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(ddAircraftSituation), &ddAircraftSituation); // With the following SimConnect call all aircrafts loose their red tag. No idea why though. SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDataDefinition::DataAircraftConfiguration, simObj.m_objectId, SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(DataDefinitionAircraftConfiguration), &configuration);