From 93bcbc075589a441084e5447698214496d384642 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 31 Oct 2018 15:30:15 +0100 Subject: [PATCH] Ref T421, function to get interpolation messages from the simulator drivers --- src/blackcore/simulator.h | 3 +++ src/plugins/simulator/emulated/simulatoremulated.cpp | 8 ++++++++ src/plugins/simulator/emulated/simulatoremulated.h | 1 + src/plugins/simulator/fs9/fs9client.cpp | 6 ++++++ src/plugins/simulator/fs9/fs9client.h | 9 +++++++-- src/plugins/simulator/fs9/simulatorfs9.cpp | 10 +++++++++- src/plugins/simulator/fs9/simulatorfs9.h | 1 + src/plugins/simulator/fsxcommon/simconnectobject.cpp | 7 +++++++ src/plugins/simulator/fsxcommon/simconnectobject.h | 3 +++ src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp | 7 +++++++ src/plugins/simulator/fsxcommon/simulatorfsxcommon.h | 1 + src/plugins/simulator/xplane/simulatorxplane.cpp | 7 +++++++ src/plugins/simulator/xplane/simulatorxplane.h | 1 + src/plugins/simulator/xplane/xplanempaircraft.cpp | 6 ++++++ src/plugins/simulator/xplane/xplanempaircraft.h | 3 +++ 15 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index c9fbe9d36..b460db7eb 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -271,6 +271,9 @@ namespace BlackCore //! \copydoc BlackMisc::Simulation::IInterpolationSetupProvider::setInterpolationSetupGlobal virtual bool setInterpolationSetupGlobal(const BlackMisc::Simulation::CInterpolationAndRenderingSetupGlobal &setup) override; + //! Interpolation messages for callsign + virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const = 0; + //! Counter added aircraft int getStatisticsPhysicallyAddedAircraft() const { return m_statsPhysicallyAddedAircraft; } diff --git a/src/plugins/simulator/emulated/simulatoremulated.cpp b/src/plugins/simulator/emulated/simulatoremulated.cpp index e0fdec9ab..ada03acbb 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.cpp +++ b/src/plugins/simulator/emulated/simulatoremulated.cpp @@ -173,6 +173,14 @@ namespace BlackSimPlugin return m_renderedAircraft.getCallsigns(); } + CStatusMessageList CSimulatorEmulated::getInterpolationMessages(const CCallsign &callsign) const + { + if (canLog()) { m_monitorWidget->appendReceivingCall(Q_FUNC_INFO); } + if (!m_interpolators.contains(callsign)) { return CStatusMessageList(); } + const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(callsign); // threadsafe copy + return m_interpolators[callsign]->getInterpolationMessages(setup.getInterpolatorMode()); + } + 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 2e14fa2d3..64ae9dd84 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.h +++ b/src/plugins/simulator/emulated/simulatoremulated.h @@ -68,6 +68,7 @@ namespace BlackSimPlugin virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; 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; // ----- 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/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index f4868b872..a1ba84e2c 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -168,6 +168,12 @@ namespace BlackSimPlugin } } + CStatusMessageList CFs9Client::getInterpolationMessages(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const + { + if (!this->getInterpolator()) { return CStatusMessageList(); } + return this->getInterpolator()->getInterpolationMessages(mode); + } + void CFs9Client::timerEvent(QTimerEvent *event) { Q_UNUSED(event); diff --git a/src/plugins/simulator/fs9/fs9client.h b/src/plugins/simulator/fs9/fs9client.h index 0a904e0ec..485f0768b 100644 --- a/src/plugins/simulator/fs9/fs9client.h +++ b/src/plugins/simulator/fs9/fs9client.h @@ -47,13 +47,18 @@ namespace BlackSimPlugin BlackCore::ISimulator *simulator); //! Destructor - virtual ~CFs9Client(); + virtual ~CFs9Client() override; //! Set DirectPlay host address void setHostAddress(const QString &hostAddress); - //! Get interpolator + //! Get interpolator @{ BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() { return &m_interpolator; } + const BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return &m_interpolator; } + //! @} + + //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages + BlackMisc::CStatusMessageList getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; public slots: //! Send new text message diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index 2bb29a7c3..6fba97019 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -14,7 +14,6 @@ #include "multiplayerpackets.h" #include "multiplayerpacketparser.h" #include "registermetadata.h" -#include "blackmisc/simulation/interpolatorlinear.h" #include "blackmisc/network/textmessage.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/logmessage.h" @@ -281,6 +280,15 @@ namespace BlackSimPlugin this->displayStatusMessage(message.asStatusMessage(true, true)); } + CStatusMessageList CSimulatorFs9::getInterpolationMessages(const CCallsign &callsign) const + { + if (!m_hashFs9Clients.contains(callsign)) { return CStatusMessageList(); } + const CFs9Client *client = m_hashFs9Clients[callsign].data(); + if (!client) { return CStatusMessageList(); } + const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(callsign); + return client->getInterpolationMessages(setup.getInterpolatorMode()); + } + 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 1f28b20da..53e66ff9e 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.h +++ b/src/plugins/simulator/fs9/simulatorfs9.h @@ -64,6 +64,7 @@ namespace BlackSimPlugin virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override; 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; //! \@} protected: diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 90acd3ec1..b0155859c 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -224,6 +224,13 @@ namespace BlackSimPlugin return m_interpolator->getLastInterpolatedSituation(mode); } + const CStatusMessageList &CSimConnectObject::getInterpolationMessages(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const + { + static const CStatusMessageList empty; + if (!m_interpolator) { return empty; } + return m_interpolator->getInterpolationMessages(mode); + } + QString CSimConnectObject::toQString() const { static const QString s("CS: '%1' obj: %2 req: %3 conf.added: %4 pend.rem.: %5 rwa: %6 awr: %7 aEx: %8 aRem: %9"); diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index 02b3afca0..fe41fdecc 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -254,6 +254,9 @@ namespace BlackSimPlugin //! \copydoc BlackMisc::Simulation::CInterpolator::getLastInterpolatedSituation const BlackMisc::Aviation::CAircraftSituation &getLastInterpolatedSituation(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; + //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages + const BlackMisc::CStatusMessageList &getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; + //! Interpolator BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); } diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 9b0ff729e..724dcee5e 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -355,6 +355,13 @@ namespace BlackSimPlugin ISimulator::setFlightNetworkConnected(connected); } + CStatusMessageList CSimulatorFsxCommon::getInterpolationMessages(const CCallsign &callsign) const + { + if (!m_simConnectObjects.contains(callsign)) { return CStatusMessageList(); } + const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupConsolidated(callsign); + return (m_simConnectObjects[callsign]).getInterpolationMessages(setup.getInterpolatorMode()); + } + 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 bb98e09c5..1f294e800 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -151,6 +151,7 @@ namespace BlackSimPlugin virtual QString getStatisticsSimulatorSpecific() const override; virtual void resetAircraftStatistics() override; virtual void setFlightNetworkConnected(bool connected) override; + virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; //! @} //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index f21242888..8c354336c 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -145,6 +145,13 @@ namespace BlackSimPlugin m_statsAddCurrentTimeMs = -1; } + CStatusMessageList CSimulatorXPlane::getInterpolationMessages(const CCallsign &callsign) const + { + if (!m_xplaneAircraftObjects.contains(callsign)) { return CStatusMessageList(); } + const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupConsolidated(callsign); + return m_xplaneAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode()); + } + void CSimulatorXPlane::clearAllRemoteAircraftData() { m_aircraftAddedFailed.clear(); diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index b287fbc18..a0ecd6fe9 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -138,6 +138,7 @@ namespace BlackSimPlugin virtual void unload() override; virtual QString getStatisticsSimulatorSpecific() const override; virtual void resetAircraftStatistics() override; + virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override; //! @} //! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation diff --git a/src/plugins/simulator/xplane/xplanempaircraft.cpp b/src/plugins/simulator/xplane/xplanempaircraft.cpp index c5cb0f08d..aff61320b 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.cpp +++ b/src/plugins/simulator/xplane/xplanempaircraft.cpp @@ -12,6 +12,7 @@ #include "blackmisc/simulation/interpolatormulti.h" using namespace BlackCore; +using namespace BlackMisc; using namespace BlackMisc::Aviation; using namespace BlackMisc::Simulation; @@ -49,6 +50,11 @@ namespace BlackSimPlugin return m_interpolator->getInterpolation(currentTimeSinceEpoc, setup, aircraftNumber); } + CStatusMessageList CXPlaneMPAircraft::getInterpolationMessages(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const + { + return this->getInterpolator() ? this->getInterpolator()->getInterpolationMessages(mode) : CStatusMessageList(); + } + CCallsignSet CXPlaneMPAircraftObjects::getAllCallsigns() const { return CCallsignSet(this->keys()); diff --git a/src/plugins/simulator/xplane/xplanempaircraft.h b/src/plugins/simulator/xplane/xplanempaircraft.h index f2d407c73..b87e38745 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.h +++ b/src/plugins/simulator/xplane/xplanempaircraft.h @@ -55,6 +55,9 @@ namespace BlackSimPlugin //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolation BlackMisc::Simulation::CInterpolationResult getInterpolation(qint64 currentTimeSinceEpoc, const BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign &setup, int aircraftNumber) const; + //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages + BlackMisc::CStatusMessageList getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const; + //! Interpolator BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); }