mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-23 23:45:35 +08:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user