diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 61b86e790..9dce9bbf0 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -24,11 +24,13 @@ namespace BlackSimPlugin CSimConnectObject::CSimConnectObject(const CSimulatedAircraft &aircraft, DWORD requestId, - ISimulationEnvironmentProvider *p1, IInterpolationSetupProvider *p2, IRemoteAircraftProvider *p3, + ISimulationEnvironmentProvider *simEnvProvider, IInterpolationSetupProvider *setupProvider, IRemoteAircraftProvider *remoteAircraftProvider, CInterpolationLogger *logger) : m_aircraft(aircraft), m_requestId(requestId), m_validRequestId(true), - m_interpolator(QSharedPointer::create(aircraft.getCallsign(), p1, p2, p3, logger)) - { } + m_interpolator(QSharedPointer::create(aircraft.getCallsign(), simEnvProvider, setupProvider, remoteAircraftProvider, logger)) + { + m_interpolator->initCorrespondingModel(aircraft.getModel()); + } void CSimConnectObject::invalidatePartsAsSent() { @@ -146,6 +148,15 @@ namespace BlackSimPlugin return m_interpolator->getInterpolatedParts(currentTimeSinceEpoc, setup, partsStatus, log); } + CAircraftParts CSimConnectObject::getInterpolatedOrGuessedParts( + qint64 currentTimeSinceEpoc, + const CInterpolationAndRenderingSetupPerCallsign &setup, + CPartsStatus &partsStatus, bool log) const + { + Q_ASSERT(m_interpolator); + return m_interpolator->getInterpolatedOrGuessedParts(currentTimeSinceEpoc, setup, partsStatus, log); + } + const CAircraftSituation &CSimConnectObject::getLastInterpolatedSituation() const { if (!m_interpolator) { return CAircraftSituation::null(); } diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index f5f225515..3f201eaf5 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -32,7 +32,8 @@ namespace BlackSimPlugin //! Constructor providing initial situation/parts CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, DWORD requestId, - BlackMisc::Simulation::ISimulationEnvironmentProvider *p1, BlackMisc::Simulation::IInterpolationSetupProvider *p2, BlackMisc::Simulation::IRemoteAircraftProvider *p3, + BlackMisc::Simulation::ISimulationEnvironmentProvider *simEnvProvider, BlackMisc::Simulation::IInterpolationSetupProvider *setupProvider, + BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider, BlackMisc::Simulation::CInterpolationLogger *logger); //! Destructor @@ -134,6 +135,9 @@ namespace BlackSimPlugin //! VTOL? bool isVtol() const { return m_aircraft.isVtol(); } + //! Engine count + int getEngineCount() const { return m_aircraft.getEnginesCount(); } + //! Was the object really added to simulator bool hasValidRequestAndObjectId() const; @@ -161,6 +165,12 @@ namespace BlackSimPlugin const BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign &setup, BlackMisc::Simulation::CPartsStatus &partsStatus, bool log) const; + //! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolatedOrGuessedParts + BlackMisc::Aviation::CAircraftParts getInterpolatedOrGuessedParts( + qint64 currentTimeSinceEpoc, + const BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign &setup, + BlackMisc::Simulation::CPartsStatus &partsStatus, bool log) const; + //! Last interpolated situation const BlackMisc::Aviation::CAircraftSituation &getLastInterpolatedSituation() const; diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 96e3872a6..15317f063 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -686,23 +686,25 @@ namespace BlackSimPlugin const qint64 currentTimestamp = QDateTime::currentMSecsSinceEpoch(); // interpolation for all remote aircraft - const QList xplaneAircrafts(m_xplaneAircraftObjects.values()); - for (const CXPlaneMPAircraft &xplaneAircraft : xplaneAircrafts) + const QList xplaneAircraftList(m_xplaneAircraftObjects.values()); + for (const CXPlaneMPAircraft &xplaneAircraft : xplaneAircraftList) { const CCallsign callsign(xplaneAircraft.getCallsign()); Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "missing callsign"); - // fetch parts, as they are needed for ground interpolation + // setup const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(callsign); const bool useAircraftParts = aircraftWithParts.contains(callsign) && setup.isAircraftPartsEnabled(); const bool logInterpolationAndParts = setup.logInterpolation(); CPartsStatus partsStatus(useAircraftParts); - const CAircraftParts parts = useAircraftParts ? xplaneAircraft.getInterpolatedParts(currentTimestamp, setup, partsStatus, logInterpolationAndParts) : CAircraftParts(); - // get interpolated situation + // interpolated situation CInterpolationStatus interpolatorStatus; const CAircraftSituation interpolatedSituation = xplaneAircraft.getInterpolatedSituation(currentTimestamp, setup, interpolatorStatus); + // perts + const CAircraftParts parts = useAircraftParts ? xplaneAircraft.getInterpolatedParts(currentTimestamp, setup, partsStatus, logInterpolationAndParts) : CAircraftParts::guessedParts(interpolatedSituation, xplaneAircraft.isVtol(), xplaneAircraft.getEngineCount()); + if (interpolatorStatus.hasValidSituation()) { // update situation @@ -729,14 +731,6 @@ namespace BlackSimPlugin { this->updateRemoteAircraftParts(xplaneAircraft, parts, partsStatus); } - else - { - // guess on position, but not every frame - if (m_interpolationRequest % GuessRemoteAircraftPartsCycle == 0) - { - this->guessAndUpdateRemoteAircraftParts(xplaneAircraft, interpolatedSituation, interpolatorStatus); - } - } } // all callsigns const qint64 dt = QDateTime::currentMSecsSinceEpoch() - currentTimestamp; @@ -751,14 +745,6 @@ namespace BlackSimPlugin return this->sendRemoteAircraftPartsToSimulator(xplaneAircraft, parts); } - bool CSimulatorXPlane::guessAndUpdateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft, const CAircraftSituation &interpolatedSituation, const CInterpolationStatus &interpolationStatus) - { - if (!interpolationStatus.isInterpolated()) { return false; } - - const CAircraftParts parts = CAircraftParts::guessedParts(interpolatedSituation, xplaneAircraft.isVtol()); - return this->sendRemoteAircraftPartsToSimulator(xplaneAircraft, parts); - } - bool CSimulatorXPlane::sendRemoteAircraftPartsToSimulator(const CXPlaneMPAircraft &xplaneAircraft, const CAircraftParts &parts) { // same as in simulator or same as already send to simulator? diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index 6a2e570ca..190f42e42 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -181,10 +181,6 @@ namespace BlackSimPlugin bool updateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft, const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Simulation::CPartsStatus &partsStatus); - //! Update remote aircraft parts by guessing (send to XSwiftBus) - bool guessAndUpdateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft, - const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, const BlackMisc::Simulation::CInterpolationStatus &interpolationStatus); - //! Send parts to simulator bool sendRemoteAircraftPartsToSimulator(const CXPlaneMPAircraft &xplaneAircraft, const BlackMisc::Aviation::CAircraftParts &parts); diff --git a/src/plugins/simulator/xplane/xplanempaircraft.cpp b/src/plugins/simulator/xplane/xplanempaircraft.cpp index aed397c4a..15c888887 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.cpp +++ b/src/plugins/simulator/xplane/xplanempaircraft.cpp @@ -28,6 +28,7 @@ namespace BlackSimPlugin m_interpolator(QSharedPointer::create(aircraft.getCallsign(), simulator, simulator, simulator->getRemoteAircraftProvider(), logger)) { m_interpolator->attachLogger(logger); + m_interpolator->initCorrespondingModel(aircraft.getModel()); } bool CXPlaneMPAircraft::isSameAsSent(const CAircraftSituation &position) const diff --git a/src/plugins/simulator/xplane/xplanempaircraft.h b/src/plugins/simulator/xplane/xplanempaircraft.h index 86caf35c7..0efc48007 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.h +++ b/src/plugins/simulator/xplane/xplanempaircraft.h @@ -67,6 +67,9 @@ namespace BlackSimPlugin //! VTOL? bool isVtol() const { return m_aircraft.isVtol(); } + //! Engine count + int getEngineCount() const { return m_aircraft.getEnginesCount(); } + //! \copydoc BlackMisc::Simulation::CInterpolatorMulti::toggleMode void toggleInterpolatorMode();