mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 01:35:45 +08:00
refs #283 Rationalized ISimulator slots for managing remote aircraft
This commit is contained in:
@@ -247,11 +247,25 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CContextSimulator::ps_addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &initialSituation)
|
void CContextSimulator::ps_addRemoteAircraft(const CCallsign &callsign, const CAircraftSituation &initialSituation)
|
||||||
{
|
{
|
||||||
Q_ASSERT(this->m_simulator);
|
Q_ASSERT(this->m_simulator);
|
||||||
if (!this->m_simulator) return;
|
if (!this->m_simulator) return;
|
||||||
this->m_simulator->addAircraftSituation(callsign, initialSituation);
|
this->m_simulator->addRemoteAircraft(callsign, initialSituation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CContextSimulator::ps_addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
|
||||||
|
{
|
||||||
|
Q_ASSERT(this->m_simulator);
|
||||||
|
if (!this->m_simulator) return;
|
||||||
|
this->m_simulator->addAircraftSituation(callsign, situation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CContextSimulator::ps_removeRemoteAircraft(const CCallsign &callsign)
|
||||||
|
{
|
||||||
|
Q_ASSERT(this->m_simulator);
|
||||||
|
if (!this->m_simulator) return;
|
||||||
|
this->m_simulator->removeRemoteAircraft(callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CContextSimulator::ps_updateCockpitFromContext(const CAircraft &ownAircraft, const QString &originator)
|
void CContextSimulator::ps_updateCockpitFromContext(const CAircraft &ownAircraft, const QString &originator)
|
||||||
|
|||||||
@@ -102,8 +102,14 @@ namespace BlackCore
|
|||||||
//! Update own aircraft, because simulator has changed something
|
//! Update own aircraft, because simulator has changed something
|
||||||
void ps_updateOwnAircraft();
|
void ps_updateOwnAircraft();
|
||||||
|
|
||||||
|
//! \copydoc ISimulator::addRemoteAircraft
|
||||||
|
void ps_addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation);
|
||||||
|
|
||||||
//! \copydoc ISimulator::addAircraftSituation
|
//! \copydoc ISimulator::addAircraftSituation
|
||||||
void ps_addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation);
|
void ps_addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||||
|
|
||||||
|
//! \copydoc ISimulator::removeRemoteAircraft
|
||||||
|
void ps_removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
|
|
||||||
//! Update cockpit from context, because someone else has changed cockpit (e.g. GUI, 3rd party)
|
//! Update cockpit from context, because someone else has changed cockpit (e.g. GUI, 3rd party)
|
||||||
//! \remarks set by runtime, only to be used locally (not via DBus)
|
//! \remarks set by runtime, only to be used locally (not via DBus)
|
||||||
|
|||||||
@@ -61,10 +61,11 @@ namespace BlackCore
|
|||||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0;
|
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0;
|
||||||
|
|
||||||
//! Add new remote aircraft to the simulator
|
//! Add new remote aircraft to the simulator
|
||||||
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type, const BlackMisc::Aviation::CAircraftSituation &initialSituation) = 0;
|
//! \todo Add parameter: aircraft model
|
||||||
|
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) = 0;
|
||||||
|
|
||||||
//! Add new aircraft situation
|
//! Add new aircraft situation
|
||||||
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) = 0;
|
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 void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0;
|
||||||
|
|||||||
@@ -99,8 +99,16 @@ namespace BlackSimPlugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFs9::addRemoteAircraft(const CCallsign &callsign, const QString & /* type */, const CAircraftSituation & /*initialSituation*/ )
|
void CSimulatorFs9::addRemoteAircraft(const CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation)
|
||||||
{
|
{
|
||||||
|
if (m_hashFs9Clients.size() >= 20)
|
||||||
|
{
|
||||||
|
// Only add a maximum number of 20 clients.
|
||||||
|
// FIXME: We need a smart method to get the 20 nearest aircrafts. If someone logs in
|
||||||
|
// nearby we need to kick out the one with max distance.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new client thread, set update frequency to 25 ms and start it
|
// Create a new client thread, set update frequency to 25 ms and start it
|
||||||
QThread *clientThread = new QThread(this);
|
QThread *clientThread = new QThread(this);
|
||||||
CFs9Client *client = new CFs9Client(callsign.toQString(), CTime(25, CTimeUnit::ms()));
|
CFs9Client *client = new CFs9Client(callsign.toQString(), CTime(25, CTimeUnit::ms()));
|
||||||
@@ -112,22 +120,21 @@ namespace BlackSimPlugin
|
|||||||
m_fs9ClientThreads.insert(client, clientThread);
|
m_fs9ClientThreads.insert(client, clientThread);
|
||||||
m_hashFs9Clients.insert(callsign, client);
|
m_hashFs9Clients.insert(callsign, client);
|
||||||
clientThread->start();
|
clientThread->start();
|
||||||
|
|
||||||
|
addAircraftSituation(callsign, initialSituation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFs9::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
|
void CSimulatorFs9::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
|
||||||
{
|
{
|
||||||
// If this is a new guy, add him to the session
|
// FIXME: should be a Q_ASSERT
|
||||||
if (!m_hashFs9Clients.contains(callsign))
|
if (!m_hashFs9Clients.contains(callsign))
|
||||||
{
|
{
|
||||||
// Only add a maximum number of 20 clients.
|
// Only add a maximum number of 20 clients.
|
||||||
// FIXME: We need a smart method to get the 20 nearest aircrafts. If someone logs in
|
// FIXME: We need a smart method to get the 20 nearest aircrafts. If someone logs in
|
||||||
// nearby we need to kick out the one with max distance.
|
// nearby we need to kick out the one with max distance.
|
||||||
|
return;
|
||||||
if (m_hashFs9Clients.size() < 20)
|
|
||||||
addRemoteAircraft(callsign, "Boeing 737-400 Paint1", situation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise just add the new position
|
|
||||||
CFs9Client *client = m_hashFs9Clients.value(callsign);
|
CFs9Client *client = m_hashFs9Clients.value(callsign);
|
||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ namespace BlackSimPlugin
|
|||||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; }
|
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; }
|
||||||
|
|
||||||
//! \copydoc ISimulator::addRemoteAircraft()
|
//! \copydoc ISimulator::addRemoteAircraft()
|
||||||
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
||||||
|
|
||||||
//! \copydoc ISimulator::addAircraftSituation()
|
//! \copydoc ISimulator::addAircraftSituation()
|
||||||
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
||||||
|
|||||||
@@ -145,10 +145,8 @@ namespace BlackSimPlugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFsx::addRemoteAircraft(const CCallsign &callsign, const QString &type, const CAircraftSituation &initialSituation)
|
void CSimulatorFsx::addRemoteAircraft(const CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation)
|
||||||
{
|
{
|
||||||
Q_UNUSED(type);
|
|
||||||
|
|
||||||
SIMCONNECT_DATA_INITPOSITION initialPosition;
|
SIMCONNECT_DATA_INITPOSITION initialPosition;
|
||||||
initialPosition.Latitude = initialSituation.latitude().value();
|
initialPosition.Latitude = initialSituation.latitude().value();
|
||||||
initialPosition.Longitude = initialSituation.longitude().value();
|
initialPosition.Longitude = initialSituation.longitude().value();
|
||||||
@@ -163,21 +161,18 @@ namespace BlackSimPlugin
|
|||||||
simObj.setCallsign(callsign);
|
simObj.setCallsign(callsign);
|
||||||
simObj.setRequestId(m_nextObjID);
|
simObj.setRequestId(m_nextObjID);
|
||||||
simObj.setObjectId(0);
|
simObj.setObjectId(0);
|
||||||
simObj.getInterpolator()->addAircraftSituation(initialSituation);
|
|
||||||
m_simConnectObjects.insert(callsign, simObj);
|
m_simConnectObjects.insert(callsign, simObj);
|
||||||
++m_nextObjID;
|
++m_nextObjID;
|
||||||
|
|
||||||
HRESULT hr = SimConnect_AICreateNonATCAircraft(m_hSimConnect, "Boeing 737-800 Paint1", callsign.toQString().left(12).toLatin1().constData(), initialPosition, simObj.getRequestId());
|
HRESULT hr = SimConnect_AICreateNonATCAircraft(m_hSimConnect, "Boeing 737-800 Paint1", qPrintable(callsign.toQString().left(12)), initialPosition, simObj.getRequestId());
|
||||||
Q_UNUSED(hr);
|
Q_UNUSED(hr);
|
||||||
|
|
||||||
|
addAircraftSituation(callsign, initialSituation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorFsx::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
|
void CSimulatorFsx::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation)
|
||||||
{
|
{
|
||||||
if (!m_simConnectObjects.contains(callsign))
|
Q_ASSERT(m_simConnectObjects.contains(callsign));
|
||||||
{
|
|
||||||
addRemoteAircraft(callsign, "Boeing 737-800 Paint1", situation);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
CSimConnectObject simObj = m_simConnectObjects.value(callsign);
|
CSimConnectObject simObj = m_simConnectObjects.value(callsign);
|
||||||
simObj.getInterpolator()->addAircraftSituation(situation);
|
simObj.getInterpolator()->addAircraftSituation(situation);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ namespace BlackSimPlugin
|
|||||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; }
|
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; }
|
||||||
|
|
||||||
//! \copydoc ISimulator::addRemoteAircraft()
|
//! \copydoc ISimulator::addRemoteAircraft()
|
||||||
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
||||||
|
|
||||||
//! \copydoc ISimulator::addAircraftSituation()
|
//! \copydoc ISimulator::addAircraftSituation()
|
||||||
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
||||||
|
|||||||
@@ -281,21 +281,17 @@ namespace BlackSimPlugin
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorXPlane::addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type,
|
void CSimulatorXPlane::addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situ)
|
||||||
const BlackMisc::Aviation::CAircraftSituation &initialSituation)
|
|
||||||
{
|
{
|
||||||
Q_UNUSED(initialSituation); // fixed gcc warning
|
|
||||||
if (! isConnected()) { return; }
|
if (! isConnected()) { return; }
|
||||||
m_traffic->addPlane(callsign.asString(), type, "YYY", "YYY"); // TODO livery
|
m_traffic->addPlane(callsign.asString(), "A320", "YYY", "YYY");
|
||||||
//addAircraftSituation(callsign, initialSituation);
|
addAircraftSituation(callsign, situ);
|
||||||
m_planes.insert(callsign.asString()); // FIXME should not be needed here IMHO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
|
void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
|
||||||
const BlackMisc::Aviation::CAircraftSituation &situ)
|
const BlackMisc::Aviation::CAircraftSituation &situ)
|
||||||
{
|
{
|
||||||
if (! isConnected()) { return; }
|
if (! isConnected()) { return; }
|
||||||
if (! m_planes.contains(callsign.asString())) { addRemoteAircraft(callsign, "A320", situ); } // FIXME should not be needed here IMHO
|
|
||||||
using namespace BlackMisc::PhysicalQuantities;
|
using namespace BlackMisc::PhysicalQuantities;
|
||||||
m_traffic->setPlanePosition(callsign.asString(),
|
m_traffic->setPlanePosition(callsign.asString(),
|
||||||
situ.latitude().value(CAngleUnit::deg()),
|
situ.latitude().value(CAngleUnit::deg()),
|
||||||
|
|||||||
@@ -52,12 +52,12 @@ namespace BlackSimPlugin
|
|||||||
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
|
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::ISimulator::addRemoteAircraft
|
//! \copydoc BlackCore::ISimulator::addRemoteAircraft
|
||||||
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type,
|
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign,
|
||||||
const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::ISimulator::addAircraftSituation
|
//! \copydoc BlackCore::ISimulator::addAircraftSituation
|
||||||
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
|
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
|
||||||
const BlackMisc::Aviation::CAircraftSituation &initialSituation) override;
|
const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::ISimulator::removeRemoteAircraft
|
//! \copydoc BlackCore::ISimulator::removeRemoteAircraft
|
||||||
virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||||
@@ -109,7 +109,6 @@ namespace BlackSimPlugin
|
|||||||
QTimer *m_slowTimer { nullptr };
|
QTimer *m_slowTimer { nullptr };
|
||||||
|
|
||||||
BlackMisc::Aviation::CAirportList m_airports;
|
BlackMisc::Aviation::CAirportList m_airports;
|
||||||
QSet<QString> m_planes; // FIXME should not be needed here IMHO
|
|
||||||
|
|
||||||
struct // data is written by DBus async method callbacks
|
struct // data is written by DBus async method callbacks
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user