From 03b87391588b793fd0a5b52f7f65a6a7911b5e28 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 4 Mar 2017 23:46:45 +0100 Subject: [PATCH] refs #895, add initial parts when aircraft is added in FSX plus some utility functions --- src/blackmisc/simulation/interpolator.h | 6 ++++++ src/plugins/simulator/fsxcommon/simconnectobject.cpp | 10 ++++++++++ src/plugins/simulator/fsxcommon/simconnectobject.h | 8 +++++++- src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp | 9 +++++---- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index c57723cf9..72f8d8397 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -54,9 +54,15 @@ namespace BlackMisc //! Add a new aircraft situation void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); + //! Any aircraft situations? + bool hasAircraftSituations() const { return !m_aircraftSituations.isEmpty(); } + //! Add a new aircraft parts void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts); + //! Any aircraft parts? + bool hasAircraftParts() const { return !m_aircraftParts.isEmpty(); } + //! Takes input between 0 and 1 and returns output between 0 and 1 smoothed with an S-shaped curve. //! //! Useful for making interpolation seem smoother, efficiently as it just uses simple arithmetic. diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 3dacbed6c..0ac04b464 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -30,6 +30,16 @@ namespace BlackSimPlugin m_interpolator->attachLogger(logger); } + void CSimConnectObject::addAircraftParts(const CAircraftParts &parts) + { + m_interpolator->addAircraftParts(parts); + } + + void CSimConnectObject::addAircraftSituation(const CAircraftSituation &situation) + { + m_interpolator->addAircraftSituation(situation); + } + void CSimConnectObject::invalidatePartsAsSent() { DataDefinitionRemoteAircraftPartsWithoutLights dd; diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index 471429be7..9b7261a7b 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -36,7 +36,7 @@ namespace BlackSimPlugin //! Constructor CSimConnectObject(); - //! Constructor + //! Constructor, providing initial situation/parts CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, DWORD requestId, BlackMisc::Simulation::CInterpolationLogger *logger); @@ -56,6 +56,12 @@ namespace BlackSimPlugin //! Interpolator BlackMisc::Simulation::CInterpolatorSpline *getInterpolator() const { return m_interpolator.data(); } + //! Add parts for interpolator + void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts); + + //! Add situation for interpolator + void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); + //! Get current lights (requested from simulator) const BlackMisc::Aviation::CAircraftLights &getCurrentLightsInSimulator() const { return m_currentLightsInSim; } diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 6feda9a47..fcf77ec23 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -175,7 +175,8 @@ namespace BlackSimPlugin // we will request a new aircraft by request ID, later we will receive its object id // so far this object id is -1 addedAircraft.setRendered(false); - const CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger); + CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger); + if (addedAircraft.isPartsSynchronized()) { simObject.addAircraftParts(addedAircraft.getParts()); } m_simConnectObjects.insert(callsign, simObject); adding = true; } @@ -906,7 +907,7 @@ namespace BlackSimPlugin // get interpolated situation CInterpolationStatus interpolatorStatus; - CInterpolationHints hints(m_hints[simObj.getCallsign()]); + CInterpolationHints hints(m_hints[callsign]); hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts); hints.setLoggingInterpolation(logInterpolationAndParts); const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus); @@ -1274,13 +1275,13 @@ namespace BlackSimPlugin void CSimulatorFsxCommon::ps_remoteProviderAddAircraftSituation(const CAircraftSituation &situation) { if (!m_simConnectObjects.contains(situation.getCallsign())) { return; } - m_simConnectObjects[situation.getCallsign()].getInterpolator()->addAircraftSituation(situation); + m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation); } void CSimulatorFsxCommon::ps_remoteProviderAddAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts) { if (!m_simConnectObjects.contains(callsign)) { return; } - m_simConnectObjects[callsign].getInterpolator()->addAircraftParts(parts); + m_simConnectObjects[callsign].addAircraftParts(parts); } QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)