refs #369, adjusted simulator drivers to changed interpolator and

removed addAircraftSituation
This commit is contained in:
Klaus Basan
2015-02-07 14:47:40 +01:00
parent 58b56ba2f3
commit 5146b7357d
11 changed files with 115 additions and 159 deletions

View File

@@ -82,9 +82,6 @@ namespace BlackCore
//! Add new remote aircraft to the simulator //! Add new remote aircraft to the simulator
virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) = 0; virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) = 0;
//! Add new aircraft situation
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation) = 0;
//! Remove remote aircraft from simulator //! Remove remote aircraft from simulator
virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0; virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0;
@@ -207,13 +204,13 @@ namespace BlackCore
protected: protected:
//! Constructor //! Constructor
CSimulatorCommon( CSimulatorCommon(
const BlackSim::CSimulatorInfo &simInfo, const BlackSim::CSimulatorInfo &simInfo,
BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider,
BlackMisc::Simulation::IRenderedAircraftProvider *renderedAircraftProvider, BlackMisc::Simulation::IRenderedAircraftProvider *renderedAircraftProvider,
QObject *parent = nullptr); QObject *parent = nullptr);
BlackSim::CSimulatorInfo m_simulatorInfo; //!< about the simulator BlackSim::CSimulatorInfo m_simulatorInfo; //!< about the simulator
int m_maxRenderedAircraft = 99; int m_maxRenderedAircraft = 99; //!< max. rendered aircraft
}; };
} // namespace } // namespace

View File

@@ -19,23 +19,25 @@
#include <QScopedArrayPointer> #include <QScopedArrayPointer>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackCore;
using namespace BlackMisc::Aviation; using namespace BlackMisc::Aviation;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
namespace BlackSimPlugin namespace BlackSimPlugin
{ {
namespace Fs9 namespace Fs9
{ {
CFs9Client::CFs9Client(QObject *owner, const QString &callsign, const CTime &updateInterval) : CFs9Client::CFs9Client(
IRenderedAircraftProviderReadOnly *renderedAircraftProvider, QObject *owner, const QString &callsign, const CTime &updateInterval) :
CDirectPlayPeer(owner, callsign), CDirectPlayPeer(owner, callsign),
m_updateInterval(updateInterval) m_renderedAircraftProvider(renderedAircraftProvider), m_updateInterval(updateInterval)
{ { }
}
CFs9Client::~CFs9Client() CFs9Client::~CFs9Client()
{ {
if(m_hostAddress) m_hostAddress->Release(); if (m_hostAddress) m_hostAddress->Release();
m_hostAddress = nullptr; m_hostAddress = nullptr;
} }
void CFs9Client::sendTextMessage(const QString &textMessage) void CFs9Client::sendTextMessage(const QString &textMessage)
@@ -54,59 +56,55 @@ namespace BlackSimPlugin
HRESULT hr = S_OK; HRESULT hr = S_OK;
// Create our IDirectPlay8Address Host Address // Create our IDirectPlay8Address Host Address
if( FAILED( hr = CoCreateInstance(CLSID_DirectPlay8Address, nullptr, if (FAILED(hr = CoCreateInstance(CLSID_DirectPlay8Address, nullptr,
CLSCTX_INPROC_SERVER, CLSCTX_INPROC_SERVER,
IID_IDirectPlay8Address, IID_IDirectPlay8Address,
reinterpret_cast<void **>(&m_hostAddress) ) ) ) reinterpret_cast<void **>(&m_hostAddress))))
{ {
printDirectPlayError(hr); printDirectPlayError(hr);
return; return;
} }
if (FAILED (hr = m_hostAddress->BuildFromURLA(hostAddress.toLatin1().data()))) if (FAILED(hr = m_hostAddress->BuildFromURLA(hostAddress.toLatin1().data())))
{ {
printDirectPlayError(hr); printDirectPlayError(hr);
return; return;
} }
} }
void CFs9Client::addAircraftSituation(const CAircraftSituation &situation) void CFs9Client::timerEvent(QTimerEvent *event)
{ {
QMutexLocker locker(&m_mutexInterpolator); Q_UNUSED(event);
m_interpolator.addAircraftSituation(situation); if (m_clientStatus == Disconnected) { return; }
}
void CFs9Client::timerEvent(QTimerEvent * /*event*/)
{
if (m_clientStatus == Disconnected) return;
QMutexLocker locker(&m_mutexInterpolator); QMutexLocker locker(&m_mutexInterpolator);
CInterpolatorLinear interpolator(m_renderedAircraftProvider);
if (!interpolator.hasEnoughAircraftSituations(this->m_callsign)) { return; }
if (m_interpolator.hasEnoughAircraftSituations()) CAircraftSituation situation = interpolator.getCurrentInterpolatedSituation(m_callsign);
{ MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(situation);
CAircraftSituation situation = m_interpolator.getCurrentSituation();
MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(situation);
QByteArray positionMessage; QByteArray positionMessage;
MultiPlayerPacketParser::writeType(positionMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_SLEWMODE); MultiPlayerPacketParser::writeType(positionMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_SLEWMODE);
MultiPlayerPacketParser::writeSize(positionMessage, positionSlewMode.size()); MultiPlayerPacketParser::writeSize(positionMessage, positionSlewMode.size());
positionSlewMode.packet_index = m_packetIndex; positionSlewMode.packet_index = m_packetIndex;
++m_packetIndex; ++m_packetIndex;
positionMessage = MultiPlayerPacketParser::writeMessage(positionMessage, positionSlewMode); positionMessage = MultiPlayerPacketParser::writeMessage(positionMessage, positionSlewMode);
sendMessage(positionMessage); sendMessage(positionMessage);
QByteArray paramMessage; QByteArray paramMessage;
MPParam param; MPParam param;
MultiPlayerPacketParser::writeType(paramMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_PARAMS); MultiPlayerPacketParser::writeType(paramMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_PARAMS);
MultiPlayerPacketParser::writeSize(paramMessage, param.size()); MultiPlayerPacketParser::writeSize(paramMessage, param.size());
param.packet_index = m_packetIndex; param.packet_index = m_packetIndex;
++m_packetIndex; ++m_packetIndex;
paramMessage = MultiPlayerPacketParser::writeMessage(paramMessage, param); paramMessage = MultiPlayerPacketParser::writeMessage(paramMessage, param);
sendMessage(paramMessage); sendMessage(paramMessage);
m_lastAircraftSituation = situation;
m_lastAircraftSituation = situation;
}
} }
void CFs9Client::initialize() void CFs9Client::initialize()
@@ -126,7 +124,7 @@ namespace BlackSimPlugin
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
if( FAILED( hr = createHostAddress() ) ) if (FAILED(hr = createHostAddress()))
{ {
qWarning() << "Failed to create host address!"; qWarning() << "Failed to create host address!";
return hr; return hr;
@@ -139,16 +137,16 @@ namespace BlackSimPlugin
dpAppDesc.guidApplication = CFs9Sdk::guid(); dpAppDesc.guidApplication = CFs9Sdk::guid();
// We now have the host address so lets enum // We now have the host address so lets enum
if( FAILED( hr = m_directPlayPeer->EnumHosts(&dpAppDesc, // pApplicationDesc if (FAILED(hr = m_directPlayPeer->EnumHosts(&dpAppDesc, // pApplicationDesc
m_hostAddress, // pdpaddrHost m_hostAddress, // pdpaddrHost
m_deviceAddress, // pdpaddrDeviceInfo m_deviceAddress, // pdpaddrDeviceInfo
nullptr, 0, // pvUserEnumData, size nullptr, 0, // pvUserEnumData, size
0, // dwEnumCount 0, // dwEnumCount
0, // dwRetryInterval 0, // dwRetryInterval
0, // dwTimeOut 0, // dwTimeOut
nullptr, // pvUserContext nullptr, // pvUserContext
nullptr, // pAsyncHandle nullptr, // pAsyncHandle
DPNENUMHOSTS_SYNC ) ) ) // dwFlags DPNENUMHOSTS_SYNC))) // dwFlags
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
@@ -160,16 +158,16 @@ namespace BlackSimPlugin
HRESULT hr = S_OK; HRESULT hr = S_OK;
// Create our IDirectPlay8Address Host Address // Create our IDirectPlay8Address Host Address
if( FAILED( hr = CoCreateInstance(CLSID_DirectPlay8Address, nullptr, if (FAILED(hr = CoCreateInstance(CLSID_DirectPlay8Address, nullptr,
CLSCTX_INPROC_SERVER, CLSCTX_INPROC_SERVER,
IID_IDirectPlay8Address, IID_IDirectPlay8Address,
reinterpret_cast<void **>(&m_hostAddress) ) ) ) reinterpret_cast<void **>(&m_hostAddress))))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
// Set the SP for our Host Address // Set the SP for our Host Address
if( FAILED( hr = m_hostAddress->SetSP(&CLSID_DP8SP_TCPIP ) ) ) if (FAILED(hr = m_hostAddress->SetSP(&CLSID_DP8SP_TCPIP)))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
@@ -178,9 +176,9 @@ namespace BlackSimPlugin
const wchar_t hostname[] = L"localhost"; const wchar_t hostname[] = L"localhost";
// Set the hostname into the address // Set the hostname into the address
if( FAILED( hr = m_hostAddress->AddComponent(DPNA_KEY_HOSTNAME, hostname, if (FAILED(hr = m_hostAddress->AddComponent(DPNA_KEY_HOSTNAME, hostname,
2*(wcslen(hostname) + 1), /*bytes*/ 2 * (wcslen(hostname) + 1), /*bytes*/
DPNA_DATATYPE_STRING ) ) ) DPNA_DATATYPE_STRING)))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
@@ -192,7 +190,7 @@ namespace BlackSimPlugin
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
if(m_clientStatus == Connected) return hr; if (m_clientStatus == Connected) return hr;
QMutexLocker locker(&m_mutexHostList); QMutexLocker locker(&m_mutexHostList);
@@ -201,18 +199,18 @@ namespace BlackSimPlugin
callsign.toWCharArray(wszPlayername.data()); callsign.toWCharArray(wszPlayername.data());
wszPlayername[callsign.size()] = 0; wszPlayername[callsign.size()] = 0;
ZeroMemory(&m_playerInfo, sizeof (PLAYER_INFO_STRUCT) ); ZeroMemory(&m_playerInfo, sizeof(PLAYER_INFO_STRUCT));
strcpy (m_playerInfo.szAircraft, "Boeing 737-400 Paint1"); strcpy(m_playerInfo.szAircraft, "Boeing 737-400 Paint1");
m_playerInfo.dwFlags = 6; m_playerInfo.dwFlags = 6;
// Prepare and set the player information structure. // Prepare and set the player information structure.
ZeroMemory( &m_player, sizeof( DPN_PLAYER_INFO ) ); ZeroMemory(&m_player, sizeof(DPN_PLAYER_INFO));
m_player.dwSize = sizeof( DPN_PLAYER_INFO ); m_player.dwSize = sizeof(DPN_PLAYER_INFO);
m_player.pvData = &m_playerInfo; m_player.pvData = &m_playerInfo;
m_player.dwDataSize = sizeof( PLAYER_INFO_STRUCT ); m_player.dwDataSize = sizeof(PLAYER_INFO_STRUCT);
m_player.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA; m_player.dwInfoFlags = DPNINFO_NAME | DPNINFO_DATA;
m_player.pwszName = wszPlayername.data(); m_player.pwszName = wszPlayername.data();
if( FAILED( hr = m_directPlayPeer->SetPeerInfo( &m_player, nullptr, nullptr, DPNSETPEERINFO_SYNC ) ) ) if (FAILED(hr = m_directPlayPeer->SetPeerInfo(&m_player, nullptr, nullptr, DPNSETPEERINFO_SYNC)))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
@@ -224,16 +222,16 @@ namespace BlackSimPlugin
dpAppDesc.guidApplication = CFs9Sdk::guid(); dpAppDesc.guidApplication = CFs9Sdk::guid();
// We are now ready to host the app // We are now ready to host the app
if( FAILED( hr = m_directPlayPeer->Connect( &dpAppDesc, // AppDesc if (FAILED(hr = m_directPlayPeer->Connect(&dpAppDesc, // AppDesc
m_hostAddress, m_hostAddress,
m_deviceAddress, m_deviceAddress,
nullptr, nullptr,
nullptr, nullptr,
nullptr, 0, nullptr, 0,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
DPNCONNECT_SYNC ) ) ) DPNCONNECT_SYNC)))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }
@@ -263,7 +261,7 @@ namespace BlackSimPlugin
if (m_clientStatus == Disconnected) return hr; if (m_clientStatus == Disconnected) return hr;
BlackMisc::CLogMessage(this).debug() << "Closing DirectPlay connection for " << m_callsign; BlackMisc::CLogMessage(this).debug() << "Closing DirectPlay connection for " << m_callsign;
if( FAILED( hr = m_directPlayPeer->Close(0) )) if (FAILED(hr = m_directPlayPeer->Close(0)))
{ {
return printDirectPlayError(hr); return printDirectPlayError(hr);
} }

View File

@@ -38,7 +38,7 @@ namespace BlackSimPlugin
}; };
//! Constructor //! Constructor
CFs9Client(QObject *owner, const QString &callsign, const BlackMisc::PhysicalQuantities::CTime &updateInterval); CFs9Client(BlackMisc::Simulation::IRenderedAircraftProviderReadOnly *renderedAircraftProvider, QObject *owner, const QString &callsign, const BlackMisc::PhysicalQuantities::CTime &updateInterval);
//! Destructor //! Destructor
virtual ~CFs9Client(); virtual ~CFs9Client();
@@ -85,10 +85,10 @@ namespace BlackSimPlugin
BlackMisc::Aviation::CAircraftSituation m_lastAircraftSituation; BlackMisc::Aviation::CAircraftSituation m_lastAircraftSituation;
BlackMisc::PhysicalQuantities::CTime m_updateInterval; BlackMisc::PhysicalQuantities::CTime m_updateInterval;
BlackCore::CInterpolatorLinear m_interpolator;
int m_timerId = 0; int m_timerId = 0;
QMutex m_mutexInterpolator; QMutex m_mutexInterpolator;
BlackMisc::Simulation::IRenderedAircraftProviderReadOnly *m_renderedAircraftProvider = nullptr;
IDirectPlay8Address *m_hostAddress = nullptr; IDirectPlay8Address *m_hostAddress = nullptr;
ClientStatus m_clientStatus = Disconnected; ClientStatus m_clientStatus = Disconnected;

View File

@@ -113,29 +113,17 @@ namespace BlackSimPlugin
this->removeRenderedAircraft(callsign); this->removeRenderedAircraft(callsign);
} }
CFs9Client *client = new CFs9Client(this, callsign.toQString(), CTime(25, CTimeUnit::ms())); CFs9Client *client = new CFs9Client(this->m_renderedAircraftProvider, this, callsign.toQString(), CTime(25, CTimeUnit::ms()));
client->setHostAddress(m_fs9Host->getHostAddress()); client->setHostAddress(m_fs9Host->getHostAddress());
client->setPlayerUserId(m_fs9Host->getPlayerUserId()); client->setPlayerUserId(m_fs9Host->getPlayerUserId());
client->start(); client->start();
m_hashFs9Clients.insert(callsign, client); m_hashFs9Clients.insert(callsign, client);
addAircraftSituation(callsign, remoteAircraft.getSituation());
renderedAircraft().applyIfCallsign(callsign, CPropertyIndexVariantMap(CSimulatedAircraft::IndexRendered, CVariant::fromValue(true))); renderedAircraft().applyIfCallsign(callsign, CPropertyIndexVariantMap(CSimulatedAircraft::IndexRendered, CVariant::fromValue(true)));
CLogMessage(this).info("FS9: Added aircraft %1") << callsign.toQString(); CLogMessage(this).info("FS9: Added aircraft %1") << callsign.toQString();
return true; return true;
} }
void CSimulatorFs9::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
{
Q_ASSERT(m_hashFs9Clients.contains(callsign));
CFs9Client *client = m_hashFs9Clients.value(callsign);
if (!client)
return;
client->addAircraftSituation(situation);
}
bool CSimulatorFs9::removeRenderedAircraft(const CCallsign &callsign) bool CSimulatorFs9::removeRenderedAircraft(const CCallsign &callsign)
{ {
if (!m_hashFs9Clients.contains(callsign)) { return false; } if (!m_hashFs9Clients.contains(callsign)) { return false; }

View File

@@ -88,9 +88,6 @@ namespace BlackSimPlugin
//! \copydoc ISimulator::addRemoteAircraft() //! \copydoc ISimulator::addRemoteAircraft()
virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override; virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
//! \copydoc ISimulator::addAircraftSituation()
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
//! \copydoc ISimulator::removeRemoteAircraft() //! \copydoc ISimulator::removeRemoteAircraft()
virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;

View File

@@ -16,8 +16,6 @@ namespace BlackSimPlugin
{ {
namespace Fsx namespace Fsx
{ {
CSimConnectObject::CSimConnectObject() : CSimConnectObject::CSimConnectObject() { }
m_interpolator(new CInterpolatorLinear())
{ }
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -49,13 +49,9 @@ namespace BlackSimPlugin
//! Set Simconnect object id //! Set Simconnect object id
int getObjectId() const { return m_objectId; } int getObjectId() const { return m_objectId; }
//! Get interpolator
QSharedPointer<BlackCore::IInterpolator> getInterpolator() const { return m_interpolator; }
private: private:
BlackMisc::Aviation::CCallsign m_callsign; BlackMisc::Aviation::CCallsign m_callsign;
QSharedPointer<BlackCore::IInterpolator> m_interpolator;
int m_requestId = -1; int m_requestId = -1;
int m_objectId = -1; int m_objectId = -1;
}; };

View File

@@ -18,6 +18,7 @@
#include "blackmisc/avairportlist.h" #include "blackmisc/avairportlist.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackmisc/nwaircraftmappinglist.h" #include "blackmisc/nwaircraftmappinglist.h"
#include "blackcore/interpolator_linear.h"
#include <QTimer> #include <QTimer>
#include <QtConcurrent> #include <QtConcurrent>
@@ -156,8 +157,6 @@ namespace BlackSimPlugin
simObj.setObjectId(0); simObj.setObjectId(0);
++m_nextObjID; ++m_nextObjID;
addAircraftSituation(callsign, remoteAircraft.getSituation());
// matched models // matched models
CAircraftModel aircraftModel = modelMatching(remoteAircraft); CAircraftModel aircraftModel = modelMatching(remoteAircraft);
Q_ASSERT(remoteAircraft.getCallsign() == aircraftModel.getCallsign()); Q_ASSERT(remoteAircraft.getCallsign() == aircraftModel.getCallsign());
@@ -185,16 +184,6 @@ namespace BlackSimPlugin
} }
} }
void CSimulatorFsx::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &initialSituation)
{
// Q_ASSERT(m_simConnectObjects.contains(callsign));
if (!m_simConnectObjects.contains(callsign)) { return; }
CSimConnectObject simObj = m_simConnectObjects.value(callsign);
simObj.getInterpolator()->addAircraftSituation(initialSituation);
m_simConnectObjects.insert(callsign, simObj);
}
bool CSimulatorFsx::removeRenderedAircraft(const CCallsign &callsign) bool CSimulatorFsx::removeRenderedAircraft(const CCallsign &callsign)
{ {
// only remove from sim // only remove from sim
@@ -580,24 +569,24 @@ namespace BlackSimPlugin
void CSimulatorFsx::updateOtherAircraft() void CSimulatorFsx::updateOtherAircraft()
{ {
BlackCore::CInterpolatorLinear interpolator(this->m_renderedAircraftProvider);
for (const CSimConnectObject &simObj : m_simConnectObjects) for (const CSimConnectObject &simObj : m_simConnectObjects)
{ {
if (simObj.getInterpolator()->hasEnoughAircraftSituations()) if (!interpolator.hasEnoughAircraftSituations(simObj.getCallsign())) { continue; }
SIMCONNECT_DATA_INITPOSITION position = aircraftSituationToFsxInitPosition(interpolator.getCurrentInterpolatedSituation(simObj.getCallsign()));
DataDefinitionRemoteAircraftSituation ddAircraftSituation;
ddAircraftSituation.position = position;
DataDefinitionGearHandlePosition gearHandle;
gearHandle.gearHandlePosition = position.Altitude < 1000 ? 1 : 0;
if (simObj.getObjectId() != 0)
{ {
SIMCONNECT_DATA_INITPOSITION position = aircraftSituationToFsxInitPosition(simObj.getInterpolator()->getCurrentSituation()); SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSituation, simObj.getObjectId(), SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(ddAircraftSituation), &ddAircraftSituation);
DataDefinitionRemoteAircraftSituation ddAircraftSituation;
ddAircraftSituation.position = position;
DataDefinitionGearHandlePosition gearHandle; // With the following SimConnect call all aircrafts loose their red tag. No idea why though.
gearHandle.gearHandlePosition = position.Altitude < 1000 ? 1 : 0; SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataGearHandlePosition, simObj.getObjectId(), SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(DataDefinitionGearHandlePosition), &gearHandle);
if (simObj.getObjectId() != 0)
{
SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSituation, simObj.getObjectId(), 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, CSimConnectDefinitions::DataGearHandlePosition, simObj.getObjectId(), SIMCONNECT_DATA_SET_FLAG_DEFAULT, 0, sizeof(DataDefinitionGearHandlePosition), &gearHandle);
}
} }
} }
} }

View File

@@ -106,9 +106,6 @@ namespace BlackSimPlugin
//! \copydoc ISimulator::addRemoteAircraft() //! \copydoc ISimulator::addRemoteAircraft()
virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override; virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
//! \copydoc ISimulator::addAircraftSituation()
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
//! \copydoc ISimulator::removeRenderedAircraft() //! \copydoc ISimulator::removeRenderedAircraft()
virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;

View File

@@ -312,27 +312,27 @@ namespace BlackSimPlugin
// Is there any model matching required ???? // Is there any model matching required ????
CAircraftIcao icao = remoteAircraft.getIcaoInfo(); CAircraftIcao icao = remoteAircraft.getIcaoInfo();
m_traffic->addPlane(remoteAircraft.getCallsign().asString(), icao.getAircraftDesignator(), icao.getAirlineDesignator(), icao.getLivery()); m_traffic->addPlane(remoteAircraft.getCallsign().asString(), icao.getAircraftDesignator(), icao.getAirlineDesignator(), icao.getLivery());
addAircraftSituation(remoteAircraft.getCallsign(), remoteAircraft.getSituation());
renderedAircraft().applyIfCallsign(remoteAircraft.getCallsign(), CPropertyIndexVariantMap(CSimulatedAircraft::IndexRendered, CVariant::fromValue(true))); renderedAircraft().applyIfCallsign(remoteAircraft.getCallsign(), CPropertyIndexVariantMap(CSimulatedAircraft::IndexRendered, CVariant::fromValue(true)));
CLogMessage(this).info("XP: Added aircraft %1") << remoteAircraft.getCallsign().toQString(); CLogMessage(this).info("XP: Added aircraft %1") << remoteAircraft.getCallsign().toQString();
return true; return true;
} }
void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, //! \todo XPlane driver, where would this go?
const BlackMisc::Aviation::CAircraftSituation &situ) // void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
{ // const BlackMisc::Aviation::CAircraftSituation &situ)
if (! isConnected()) { return; } // {
using namespace BlackMisc::PhysicalQuantities; // if (! isConnected()) { return; }
m_traffic->setPlanePosition(callsign.asString(), // using namespace BlackMisc::PhysicalQuantities;
situ.latitude().value(CAngleUnit::deg()), // m_traffic->setPlanePosition(callsign.asString(),
situ.longitude().value(CAngleUnit::deg()), // situ.latitude().value(CAngleUnit::deg()),
situ.getAltitude().value(CLengthUnit::ft()), // situ.longitude().value(CAngleUnit::deg()),
situ.getPitch().value(CAngleUnit::deg()), // situ.getAltitude().value(CLengthUnit::ft()),
situ.getBank().value(CAngleUnit::deg()), // situ.getPitch().value(CAngleUnit::deg()),
situ.getHeading().value(CAngleUnit::deg())); // situ.getBank().value(CAngleUnit::deg()),
m_traffic->setPlaneSurfaces(callsign.asString(), true, 0, 0, 0, 0, 0, 0, 0, 0, 0, true, true, true, true, 0); // TODO landing gear, lights, control surfaces // situ.getHeading().value(CAngleUnit::deg()));
m_traffic->setPlaneTransponder(callsign.asString(), 2000, true, false); // TODO transponder // m_traffic->setPlaneSurfaces(callsign.asString(), true, 0, 0, 0, 0, 0, 0, 0, 0, 0, true, true, true, true, 0); // TODO landing gear, lights, control surfaces
} // m_traffic->setPlaneTransponder(callsign.asString(), 2000, true, false); // TODO transponder
// }
bool CSimulatorXPlane::removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) bool CSimulatorXPlane::removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign)
{ {

View File

@@ -71,10 +71,6 @@ namespace BlackSimPlugin
//! \copydoc ISimulator::addRemoteAircraft() //! \copydoc ISimulator::addRemoteAircraft()
virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override; virtual bool addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
//! \copydoc BlackCore::ISimulator::addAircraftSituation
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
const BlackMisc::Aviation::CAircraftSituation &situation) override;
//! \copydoc BlackCore::ISimulator::removeRemoteAircraft //! \copydoc BlackCore::ISimulator::removeRemoteAircraft
virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; virtual bool removeRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;