mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-13 07:35:41 +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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user