diff --git a/src/blackcore/simulator.h b/src/blackcore/simulator.h index 0efdcacef..1ae427088 100644 --- a/src/blackcore/simulator.h +++ b/src/blackcore/simulator.h @@ -164,6 +164,7 @@ namespace BlackCore virtual bool isShuttingDown() const = 0; //! Set interpolation mode, empty callsign applies to all know callsigns + //! \return Returns true if the mode changed, otherwise false. Note that some implementations always return true. virtual bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode, const BlackMisc::Aviation::CCallsign &callsign) = 0; //! \addtogroup swiftdotcommands diff --git a/src/plugins/simulator/fs9/fs9client.h b/src/plugins/simulator/fs9/fs9client.h index 569dd9745..7389acaf6 100644 --- a/src/plugins/simulator/fs9/fs9client.h +++ b/src/plugins/simulator/fs9/fs9client.h @@ -11,7 +11,7 @@ #define DIRECTPLAY_CLIENT_H #include "directplaypeer.h" -#include "blackmisc/simulation/interpolatorlinear.h" +#include "blackmisc/simulation/interpolatormulti.h" #include "blackmisc/aviation/aircraftsituation.h" #include "blackmisc/pq/time.h" #include "blackmisc/aviation/callsign.h" @@ -51,7 +51,7 @@ namespace BlackSimPlugin void setHostAddress(const QString &hostAddress); //! Get interpolator - BlackMisc::Simulation::CInterpolatorLinear *getInterpolator() { return &m_interpolator; } + BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() { return &m_interpolator; } //! Set interpolation setup //! \threadsafe @@ -94,7 +94,7 @@ namespace BlackSimPlugin BlackMisc::Simulation::CInterpolationAndRenderingSetup getInterpolationSetup() const; BlackMisc::PhysicalQuantities::CTime m_updateInterval; - BlackMisc::Simulation::CInterpolatorLinear m_interpolator; + BlackMisc::Simulation::CInterpolatorMulti m_interpolator; BlackMisc::Simulation::CInterpolationAndRenderingSetup m_interpolationSetup; mutable QReadWriteLock m_interpolationSetupMutex; QString m_modelName; diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index ea251cec7..f8bb5585c 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -305,10 +305,12 @@ namespace BlackSimPlugin bool CSimulatorFs9::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign) { - //! \todo (added by KWB 3/17) interpolator mode for FS9 needs implementation - Q_UNUSED(mode); - Q_UNUSED(callsign); - return false; + const auto it = m_hashFs9Clients.find(callsign); + if (it == m_hashFs9Clients.end()) { return false; } + QTimer::singleShot(0, it->data(), [client = *it, mode] { client->getInterpolator()->setMode(mode); }); + // Always return true if we were setting the mode, since we cannot easily access the return value from + // CInterpolatorMulti::setMode in a thread safe manner. + return true; } bool CSimulatorFs9::isPhysicallyRenderedAircraft(const CCallsign &callsign) const