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;
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;
}

View File

@@ -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

View File

@@ -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);