Use SIMCONNECT_DATA_INITPOSITION struct to reposition remote traffic

Advantage is this struct has a on ground flag.

refs #222
This commit is contained in:
Roland Winklmeier
2014-04-27 18:41:10 +02:00
parent 95fa5e84df
commit fbf9dbc8cf
3 changed files with 21 additions and 26 deletions

View File

@@ -19,7 +19,7 @@ namespace BlackSimPlugin
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
hr = initOwnAircraft(hSimConnect); hr = initOwnAircraft(hSimConnect);
hr = initAircraftPosition(hSimConnect); hr = initRemoteAircraftSituation(hSimConnect);
hr = initAircraftConfiguration(hSimConnect); hr = initAircraftConfiguration(hSimConnect);
return hr; return hr;
} }
@@ -44,15 +44,10 @@ namespace BlackSimPlugin
return hr; return hr;
} }
HRESULT CSimConnectDataDefinition::initAircraftPosition(const HANDLE hSimConnect) HRESULT CSimConnectDataDefinition::initRemoteAircraftSituation(const HANDLE hSimConnect)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataAircraftPosition, "Plane Latitude", "Degrees"); hr = SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDataDefinition::DataDefinitionRemoteAircraftSituation, "Initial Position", "", SIMCONNECT_DATATYPE_INITPOSITION);
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");
return hr; return hr;
} }

View File

@@ -34,14 +34,9 @@ namespace BlackSimPlugin
}; };
//! \brief Data struct of aircraft position //! \brief Data struct of aircraft position
struct DataDefinitionAircraftPosition struct DataDefinitionRemoteAircraftSituation
{ {
double latitude; //!< Latitude SIMCONNECT_DATA_INITPOSITION position; //!< Position struct
double longitude; //!< Longitude
double altitude; //!< Altitude
double trueHeading; //!< True heading
double pitch; //!< Pitch
double bank; //!< Bank
}; };
//! \brief Data struct of aircraft position //! \brief Data struct of aircraft position
@@ -62,7 +57,7 @@ namespace BlackSimPlugin
//! \brief SimConnect definiton ID's //! \brief SimConnect definiton ID's
enum DataDefiniton { enum DataDefiniton {
DataOwnAircraft, DataOwnAircraft,
DataAircraftPosition, DataDefinitionRemoteAircraftSituation,
DataAircraftConfiguration DataAircraftConfiguration
}; };
@@ -93,7 +88,7 @@ namespace BlackSimPlugin
* \param hSimConnect * \param hSimConnect
* \return * \return
*/ */
static HRESULT initAircraftPosition(const HANDLE hSimConnect); static HRESULT initRemoteAircraftSituation(const HANDLE hSimConnect);
/*! /*!
* \brief Initialize data definition for remote aircraft configuration * \brief Initialize data definition for remote aircraft configuration

View File

@@ -350,15 +350,20 @@ namespace BlackSimPlugin
{ {
if (simObj.m_interpolator.hasEnoughAircraftSituations()) 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; DataDefinitionAircraftConfiguration configuration;
configuration.gearCenter = 100.0; configuration.gearCenter = 100.0;
configuration.gearLeft = 100.0; configuration.gearLeft = 100.0;
@@ -368,7 +373,7 @@ namespace BlackSimPlugin
if (simObj.m_objectId != 0) 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. // 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); SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDataDefinition::DataAircraftConfiguration, simObj.m_objectId, SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(DataDefinitionAircraftConfiguration), &configuration);