From f80e093a0aafe629e859a326759c6f2c4c239b07 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 15 Sep 2019 14:51:12 +0200 Subject: [PATCH] Ref T717, function to send parts/situation for testing and in the model browser --- src/blackcore/context/contextsimulator.h | 3 ++ src/blackcore/context/contextsimulatorempty.h | 10 ++++ .../context/contextsimulatorimpl.cpp | 8 ++++ src/blackcore/context/contextsimulatorimpl.h | 1 + .../context/contextsimulatorproxy.cpp | 5 ++ src/blackcore/context/contextsimulatorproxy.h | 1 + src/blackcore/simulator.h | 3 ++ .../simulator/emulated/simulatoremulated.cpp | 8 ++++ .../simulator/emulated/simulatoremulated.h | 1 + .../flightgear/fgswiftbustrafficproxy.cpp | 14 +++--- .../flightgear/fgswiftbustrafficproxy.h | 47 +++++++++++++++++-- .../flightgear/simulatorflightgear.cpp | 26 ++++++++++ .../flightgear/simulatorflightgear.h | 1 + src/plugins/simulator/fs9/fs9client.cpp | 6 ++- src/plugins/simulator/fs9/fs9client.h | 4 +- src/plugins/simulator/fs9/simulatorfs9.cpp | 16 +++++++ src/plugins/simulator/fs9/simulatorfs9.h | 1 + .../fsxcommon/simulatorfsxcommon.cpp | 20 ++++++++ .../simulator/fsxcommon/simulatorfsxcommon.h | 1 + .../simulator/xplane/simulatorxplane.cpp | 25 ++++++++++ .../simulator/xplane/simulatorxplane.h | 1 + 21 files changed, 188 insertions(+), 14 deletions(-) diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 3f43ad577..3420be408 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -316,6 +316,9 @@ namespace BlackCore //! Test a remote aircraft virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) = 0; + //! Test update remote aircraft + virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) = 0; + //! Get matching setup virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 366918180..6eb8c4f50 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -419,6 +419,16 @@ namespace BlackCore return false; } + //! \copydoc IContextSimulator::testUpdateRemoteAircraft + virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override + { + Q_UNUSED(cs); + Q_UNUSED(situation); + Q_UNUSED(parts); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + //! \copydoc IContextSimulator::setMatchingSetup virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index d47fcc3f5..80be72ecc 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -1019,6 +1019,14 @@ namespace BlackCore return added; } + bool CContextSimulator::testUpdateRemoteAircraft(const CCallsign cs, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!m_simulatorPlugin.second || !m_simulatorPlugin.second->isConnected()) { return false; } + CAircraftSituation s = situation; // make sure to have correct callsign + s.setCallsign(cs); + return m_simulatorPlugin.second->testSendSituationAndParts(cs, s, parts); + } + bool CContextSimulator::parseCommandLine(const QString &commandLine, const CIdentifier &originator) { Q_UNUSED(originator); diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index 012cd4e44..68bd67d1c 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -128,6 +128,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override; virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override; + virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; // also in IAircraftModelSetProvider virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index c84ced9f5..63e243004 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -375,5 +375,10 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("testRemoteAircraft"), aircraft, add); } + bool CContextSimulatorProxy::testUpdateRemoteAircraft(const CCallsign cs, const CAircraftSituation &situation, const CAircraftParts &parts) + { + return m_dBusInterface->callDBusRet(QLatin1String("testUpdateRemoteAircraft"), cs, situation, parts); + } + } // namespace } // namespace diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index ad9d49d65..26929fa72 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -111,6 +111,7 @@ namespace BlackCore virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override; virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override; + virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; //! @} private: diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index f3bbea4e9..e72eb6262 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -215,6 +215,9 @@ namespace BlackCore //! Test mode? bool isTestMode() const { return m_test; } + //! Send situation/parts for testing + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) = 0; + //! Debug function to check state after all aircraft have been removed //! \remarks only in local developer builds virtual BlackMisc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const; diff --git a/src/plugins/simulator/emulated/simulatoremulated.cpp b/src/plugins/simulator/emulated/simulatoremulated.cpp index b368bbcbe..d965fee9b 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.cpp +++ b/src/plugins/simulator/emulated/simulatoremulated.cpp @@ -183,6 +183,14 @@ namespace BlackSimPlugin return m_interpolators[callsign]->getInterpolationMessages(setup.getInterpolatorMode()); } + bool CSimulatorEmulated::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!m_renderedAircraft.containsCallsign(callsign)) { return false; } + m_renderedAircraft.setAircraftSituation(callsign, situation); + m_renderedAircraft.setAircraftPartsSynchronized(callsign, parts); + return true; + } + void CSimulatorEmulated::highlightAircraft(const CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const CTime &displayTime) { if (canLog()) { m_monitorWidget->appendReceivingCall(Q_FUNC_INFO, aircraftToHighlight.toQString(), boolToTrueFalse(enableHighlight), displayTime.toQString()); } diff --git a/src/plugins/simulator/emulated/simulatoremulated.h b/src/plugins/simulator/emulated/simulatoremulated.h index 1e560a43c..61fcf82df 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.h +++ b/src/plugins/simulator/emulated/simulatoremulated.h @@ -69,6 +69,7 @@ namespace BlackSimPlugin virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Aviation::CCallsignSet physicallyRenderedAircraft() const override; virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; // ----- functions just logged ------- virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override; diff --git a/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.cpp b/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.cpp index e0cd537e6..0dc85eaf9 100644 --- a/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.cpp +++ b/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.cpp @@ -94,16 +94,16 @@ namespace BlackSimPlugin QDBusPendingReply, QList, QList, QList> reply = *watcher; if (!reply.isError()) { - const QStringList callsigns = reply.argumentAt<0>(); - const QList latitudesDeg = reply.argumentAt<1>(); - const QList longitudesDeg = reply.argumentAt<2>(); - const QList elevationsM = reply.argumentAt<3>(); + const QStringList callsigns = reply.argumentAt<0>(); + const QList latitudesDeg = reply.argumentAt<1>(); + const QList longitudesDeg = reply.argumentAt<2>(); + const QList elevationsM = reply.argumentAt<3>(); const QList verticalOffsets = reply.argumentAt<4>(); - setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets); + setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets); } watcher->deleteLater(); }; m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftData"), callback, callsigns); } - } -} + } // ns +} // ns diff --git a/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.h b/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.h index 30a999a2b..dc3076257 100644 --- a/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.h +++ b/src/plugins/simulator/flightgear/fgswiftbustrafficproxy.h @@ -12,6 +12,8 @@ #define BLACKSIMPLUGIN_FLIGHTGEAR_TRAFFIC_PROXY_H #include "blackmisc/genericdbusinterface.h" +#include "blackmisc/aviation/aircraftsituation.h" +#include "blackmisc/aviation/aircraftparts.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/geo/elevationplane.h" @@ -47,21 +49,34 @@ namespace BlackSimPlugin const int s = callsigns.size(); if (s != latitudesDeg.size()) { return false; } if (s != longitudesDeg.size()) { return false; } - if (s != altitudesFt.size()) { return false; } + if (s != altitudesFt.size()) { return false; } if (s != pitchesDeg.size()) { return false; } if (s != rollsDeg.size()) { return false; } if (s != headingsDeg.size()) { return false; } return true; } - QStringList callsigns; //!< List of callsigns + //! Push back the latest situation + void push_back(const BlackMisc::Aviation::CAircraftSituation &situation) + { + this->callsigns.push_back(situation.getCallsign().asString()); + this->latitudesDeg.push_back(situation.latitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->longitudesDeg.push_back(situation.longitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->altitudesFt.push_back(situation.getAltitude().value(BlackMisc::PhysicalQuantities::CLengthUnit::ft())); + this->pitchesDeg.push_back(situation.getPitch().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->rollsDeg.push_back(situation.getBank().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->headingsDeg.push_back(situation.getHeading().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->onGrounds.push_back(situation.getOnGround() == BlackMisc::Aviation::CAircraftSituation::OnGround); + } + + QStringList callsigns; //!< List of callsigns QList latitudesDeg; //!< List of latitudes QList longitudesDeg; //!< List of longitudes - QList altitudesFt; //!< List of altitudes + QList altitudesFt; //!< List of altitudes QList pitchesDeg; //!< List of pitches QList rollsDeg; //!< List of rolls QList headingsDeg; //!< List of headings - QList onGrounds; //!< List of onGrounds + QList onGrounds; //!< List of onGrounds }; //! Planes surfaces @@ -70,6 +85,29 @@ namespace BlackSimPlugin //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } + //! Push back the latest parts + void push_back(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) + { + this->callsigns.push_back(callsign.asString()); + this->gears.push_back(parts.isGearDown() ? 1 : 0); + this->flaps.push_back(parts.getFlapsPercent() / 100.0); + this->spoilers.push_back(parts.isSpoilersOut() ? 1 : 0); + this->speedBrakes.push_back(parts.isSpoilersOut() ? 1 : 0); + this->slats.push_back(parts.getFlapsPercent() / 100.0); + this->wingSweeps.push_back(0.0); + this->thrusts.push_back(parts.isAnyEngineOn() ? 0 : 0.75); + this->elevators.push_back(0.0); + this->rudders.push_back(0.0); + this->ailerons.push_back(0.0); + this->landLights.push_back(parts.getLights().isLandingOn()); + //! \todo KB 2019-09 Missing taxi lights in FG + // this->taxiLights.push_back(parts.getLights().isTaxiOn()); + this->beaconLights.push_back(parts.getLights().isBeaconOn()); + this->strobeLights.push_back(parts.getLights().isStrobeOn()); + this->navLights.push_back(parts.getLights().isNavOn()); + this->lightPatterns.push_back(0); + } + QStringList callsigns; //!< List of callsigns QList gears; //!< List of gears QList flaps; //!< List of flaps @@ -177,7 +215,6 @@ namespace BlackSimPlugin //! Get remote aircrafts data (lat, lon, elevation and CG) void getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const; - private: BlackMisc::CGenericDBusInterface *m_dbusInterface = nullptr; }; diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.cpp b/src/plugins/simulator/flightgear/simulatorflightgear.cpp index 54431efc7..21537d650 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.cpp +++ b/src/plugins/simulator/flightgear/simulatorflightgear.cpp @@ -149,6 +149,32 @@ namespace BlackSimPlugin return m_flightgearAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode()); } + bool CSimulatorFlightgear::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!this->isConnected()) { return false; } + if (!m_trafficProxy) { return false; } + if (!m_flightgearAircraftObjects.contains(callsign)) { return false; } + + int u = 0; + if (!situation.isNull()) + { + PlanesPositions planesPositions; + planesPositions.push_back(situation); + m_trafficProxy->setPlanesPositions(planesPositions); + u++; + } + + if (!parts.isNull()) + { + PlanesSurfaces surfaces; + surfaces.push_back(callsign, parts); + //! \todo KB 2091-09 FG parts sending missing + // m_trafficProxy->setPlanesSurfaces(surfaces); + u++; + } + return u > 0; + } + void CSimulatorFlightgear::clearAllRemoteAircraftData() { m_aircraftAddedFailed.clear(); diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.h b/src/plugins/simulator/flightgear/simulatorflightgear.h index ed4f3c388..2b72e5b2e 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.h +++ b/src/plugins/simulator/flightgear/simulatorflightgear.h @@ -135,6 +135,7 @@ namespace BlackSimPlugin virtual QString getStatisticsSimulatorSpecific() const override; virtual void resetAircraftStatistics() override; virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; //! @} //! Creates an appropriate dbus connection from the string describing it diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 295bfef00..dc1057860 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -348,8 +348,12 @@ namespace BlackSimPlugin // Test only for successful position. FS9 requires constant positions if (!result.getInterpolationStatus().hasValidSituation()) { return; } + this->sendMultiplayerPosition(result.getInterpolatedSituation()); + } - MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(result.getInterpolatedSituation()); + void CFs9Client::sendMultiplayerPosition(const CAircraftSituation &situation) + { + MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(situation); QByteArray positionMessage; MultiPlayerPacketParser::writeType(positionMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_SLEWMODE); diff --git a/src/plugins/simulator/fs9/fs9client.h b/src/plugins/simulator/fs9/fs9client.h index 297a84286..d460137f8 100644 --- a/src/plugins/simulator/fs9/fs9client.h +++ b/src/plugins/simulator/fs9/fs9client.h @@ -61,7 +61,9 @@ namespace BlackSimPlugin //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages BlackMisc::CStatusMessageList getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; - public slots: + //! Send a situtaion (position) + void sendMultiplayerPosition(const BlackMisc::Aviation::CAircraftSituation &situation); + //! Send new text message void sendTextMessage(const QString &textMessage); diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index dc9fbab46..a9adb474a 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -298,6 +298,22 @@ namespace BlackSimPlugin return client->getInterpolationMessages(setup.getInterpolatorMode()); } + bool CSimulatorFs9::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!m_hashFs9Clients.contains(callsign)) { return false; } + CFs9Client *client = m_hashFs9Clients[callsign].data(); + if (!client) { return false; } + + Q_UNUSED(parts); + int u = 0; + if (situation.isNull()) + { + u++; + client->sendMultiplayerPosition(situation); + } + return u > 0; + } + bool CSimulatorFs9::isPhysicallyRenderedAircraft(const CCallsign &callsign) const { return m_hashFs9Clients.contains(callsign); diff --git a/src/plugins/simulator/fs9/simulatorfs9.h b/src/plugins/simulator/fs9/simulatorfs9.h index 3743441af..e03ba727d 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.h +++ b/src/plugins/simulator/fs9/simulatorfs9.h @@ -64,6 +64,7 @@ namespace BlackSimPlugin virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override; virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override; virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; //! \@} protected: diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index e809dd620..34f485140 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -417,6 +417,26 @@ namespace BlackSimPlugin return (m_simConnectObjects[callsign]).getInterpolationMessages(setup.getInterpolatorMode()); } + bool CSimulatorFsxCommon::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!m_simConnectObjects.contains(callsign)) { return false; } + CSimConnectObject simObject = m_simConnectObjects.value(callsign); + int u = 0; + if (!parts.isNull()) { this->sendRemoteAircraftPartsToSimulator(simObject, parts); u++; } + if (!situation.isNull()) + { + SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToFsxPosition(situation, true); + const bool traceSendId = this->isTracingSendId(); + const HRESULT hr = this->logAndTraceSendId( + SimConnect_SetDataOnSimObject( + m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSetPosition, + static_cast(simObject.getObjectId()), 0, 0, sizeof(SIMCONNECT_DATA_INITPOSITION), &position), + traceSendId, simObject, "Failed to set position", Q_FUNC_INFO, "SimConnect_SetDataOnSimObject"); + if (hr == S_OK) { u++; } + } + return u > 0; + } + CSimConnectDefinitions::SimObjectRequest CSimulatorFsxCommon::requestToSimObjectRequest(DWORD requestId) { DWORD v = static_cast(CSimConnectDefinitions::SimObjectEndMarker); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index e3d362183..35136dcd0 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -155,6 +155,7 @@ namespace BlackSimPlugin virtual void resetAircraftStatistics() override; virtual void setFlightNetworkConnected(bool connected) override; virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; //! @} //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 6cdbd3ed7..2336486f0 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -152,6 +152,31 @@ namespace BlackSimPlugin return m_xplaneAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode()); } + bool CSimulatorXPlane::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts) + { + if (!this->isConnected()) { return false; } + if (!m_trafficProxy) { return false; } + if (!m_xplaneAircraftObjects.contains(callsign)) { return false; } + + int u = 0; + if (!situation.isNull()) + { + PlanesPositions planesPositions; + planesPositions.push_back(situation); + m_trafficProxy->setPlanesPositions(planesPositions); + u++; + } + + if (!parts.isNull()) + { + PlanesSurfaces surfaces; + surfaces.push_back(callsign, parts); + m_trafficProxy->setPlanesSurfaces(surfaces); + u++; + } + return u > 0; + } + void CSimulatorXPlane::clearAllRemoteAircraftData() { m_aircraftAddedFailed.clear(); diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index a017b953f..fadfb62ea 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -143,6 +143,7 @@ namespace BlackSimPlugin virtual QString getStatisticsSimulatorSpecific() const override; virtual void resetAircraftStatistics() override; virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override; //! @} //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation