diff --git a/src/blackcore/context_simulator_impl.cpp b/src/blackcore/context_simulator_impl.cpp index 77fddb567..d8adf7c2e 100644 --- a/src/blackcore/context_simulator_impl.cpp +++ b/src/blackcore/context_simulator_impl.cpp @@ -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); 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) diff --git a/src/blackcore/context_simulator_impl.h b/src/blackcore/context_simulator_impl.h index 7a5bd34dc..ff7104ed0 100644 --- a/src/blackcore/context_simulator_impl.h +++ b/src/blackcore/context_simulator_impl.h @@ -102,8 +102,14 @@ namespace BlackCore //! Update own aircraft, because simulator has changed something void ps_updateOwnAircraft(); + //! \copydoc ISimulator::addRemoteAircraft + void ps_addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation); + //! \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) //! \remarks set by runtime, only to be used locally (not via DBus) diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 896499756..18ad920a7 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -61,10 +61,11 @@ namespace BlackCore virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0; //! 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 - 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 virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0; diff --git a/src/plugins/simulator/fs9/simulator_fs9.cpp b/src/plugins/simulator/fs9/simulator_fs9.cpp index f330458e8..94ab57991 100644 --- a/src/plugins/simulator/fs9/simulator_fs9.cpp +++ b/src/plugins/simulator/fs9/simulator_fs9.cpp @@ -99,8 +99,16 @@ namespace BlackSimPlugin 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 QThread *clientThread = new QThread(this); CFs9Client *client = new CFs9Client(callsign.toQString(), CTime(25, CTimeUnit::ms())); @@ -112,22 +120,21 @@ namespace BlackSimPlugin m_fs9ClientThreads.insert(client, clientThread); m_hashFs9Clients.insert(callsign, client); clientThread->start(); + + addAircraftSituation(callsign, initialSituation); } 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)) { // 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. - - if (m_hashFs9Clients.size() < 20) - addRemoteAircraft(callsign, "Boeing 737-400 Paint1", situation); + return; } - // otherwise just add the new position CFs9Client *client = m_hashFs9Clients.value(callsign); if (!client) return; diff --git a/src/plugins/simulator/fs9/simulator_fs9.h b/src/plugins/simulator/fs9/simulator_fs9.h index 382288038..96345c2e9 100644 --- a/src/plugins/simulator/fs9/simulator_fs9.h +++ b/src/plugins/simulator/fs9/simulator_fs9.h @@ -76,7 +76,7 @@ namespace BlackSimPlugin virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; } //! \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() virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override; diff --git a/src/plugins/simulator/fsx/simulator_fsx.cpp b/src/plugins/simulator/fsx/simulator_fsx.cpp index 36c7a8694..0553bc198 100644 --- a/src/plugins/simulator/fsx/simulator_fsx.cpp +++ b/src/plugins/simulator/fsx/simulator_fsx.cpp @@ -145,10 +145,8 @@ namespace BlackSimPlugin 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; initialPosition.Latitude = initialSituation.latitude().value(); initialPosition.Longitude = initialSituation.longitude().value(); @@ -163,21 +161,18 @@ namespace BlackSimPlugin simObj.setCallsign(callsign); simObj.setRequestId(m_nextObjID); simObj.setObjectId(0); - simObj.getInterpolator()->addAircraftSituation(initialSituation); m_simConnectObjects.insert(callsign, simObj); ++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); + + addAircraftSituation(callsign, initialSituation); } void CSimulatorFsx::addAircraftSituation(const CCallsign &callsign, const CAircraftSituation &situation) { - if (!m_simConnectObjects.contains(callsign)) - { - addRemoteAircraft(callsign, "Boeing 737-800 Paint1", situation); - return; - } + Q_ASSERT(m_simConnectObjects.contains(callsign)); CSimConnectObject simObj = m_simConnectObjects.value(callsign); simObj.getInterpolator()->addAircraftSituation(situation); diff --git a/src/plugins/simulator/fsx/simulator_fsx.h b/src/plugins/simulator/fsx/simulator_fsx.h index 72aa1f8d5..20f568ce0 100644 --- a/src/plugins/simulator/fsx/simulator_fsx.h +++ b/src/plugins/simulator/fsx/simulator_fsx.h @@ -110,7 +110,7 @@ namespace BlackSimPlugin virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override { return m_ownAircraft; } //! \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() virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) override; diff --git a/src/plugins/simulator/xplane/simulator_xplane.cpp b/src/plugins/simulator/xplane/simulator_xplane.cpp index 613644f2d..e7dd2b3fb 100644 --- a/src/plugins/simulator/xplane/simulator_xplane.cpp +++ b/src/plugins/simulator/xplane/simulator_xplane.cpp @@ -281,21 +281,17 @@ namespace BlackSimPlugin return false; } - void CSimulatorXPlane::addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const QString &type, - const BlackMisc::Aviation::CAircraftSituation &initialSituation) + void CSimulatorXPlane::addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situ) { - Q_UNUSED(initialSituation); // fixed gcc warning if (! isConnected()) { return; } - m_traffic->addPlane(callsign.asString(), type, "YYY", "YYY"); // TODO livery - //addAircraftSituation(callsign, initialSituation); - m_planes.insert(callsign.asString()); // FIXME should not be needed here IMHO + m_traffic->addPlane(callsign.asString(), "A320", "YYY", "YYY"); + addAircraftSituation(callsign, situ); } void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situ) { if (! isConnected()) { return; } - if (! m_planes.contains(callsign.asString())) { addRemoteAircraft(callsign, "A320", situ); } // FIXME should not be needed here IMHO using namespace BlackMisc::PhysicalQuantities; m_traffic->setPlanePosition(callsign.asString(), situ.latitude().value(CAngleUnit::deg()), diff --git a/src/plugins/simulator/xplane/simulator_xplane.h b/src/plugins/simulator/xplane/simulator_xplane.h index c0f72ff43..69773cf8a 100644 --- a/src/plugins/simulator/xplane/simulator_xplane.h +++ b/src/plugins/simulator/xplane/simulator_xplane.h @@ -52,12 +52,12 @@ namespace BlackSimPlugin virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override; //! \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; //! \copydoc BlackCore::ISimulator::addAircraftSituation virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, - const BlackMisc::Aviation::CAircraftSituation &initialSituation) override; + const BlackMisc::Aviation::CAircraftSituation &situation) override; //! \copydoc BlackCore::ISimulator::removeRemoteAircraft virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override; @@ -109,7 +109,6 @@ namespace BlackSimPlugin QTimer *m_slowTimer { nullptr }; BlackMisc::Aviation::CAirportList m_airports; - QSet m_planes; // FIXME should not be needed here IMHO struct // data is written by DBus async method callbacks {