From 9abc57bb3d0c4c598dbd90703b88681cc94fb00b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 24 Mar 2018 17:27:16 +0100 Subject: [PATCH] Ref T259, Ref T243 remove aircraft parts and situations from interpolator * no longer using the add parts/situations signals * will use the remote aircraft provider parts directly Result: all parts/situations are stored only once in memory and in one single place --- src/blackcore/context/contextnetworkimpl.cpp | 6 ++ src/blackcore/context/contextnetworkimpl.h | 1 + src/blackcore/simulatorcommon.cpp | 31 +------- src/blackcore/simulatorcommon.h | 16 ---- src/blackmisc/geo/coordinategeodetic.cpp | 4 +- src/blackmisc/geo/coordinategeodetic.h | 10 ++- .../simulation/remoteaircraftprovider.cpp | 6 ++ .../simulation/remoteaircraftprovider.h | 17 +++-- .../remoteaircraftproviderdummy.cpp | 72 ++++++++++++++---- .../simulation/remoteaircraftproviderdummy.h | 22 +++--- .../simulator/emulated/simulatoremulated.cpp | 17 ----- .../simulator/emulated/simulatoremulated.h | 6 -- .../simulatoremulatedmonitordialog.cpp | 4 +- src/plugins/simulator/fs9/simulatorfs9.cpp | 14 ---- src/plugins/simulator/fs9/simulatorfs9.h | 6 -- .../simulator/fsxcommon/simconnectobject.cpp | 32 -------- .../simulator/fsxcommon/simconnectobject.h | 12 --- .../fsxcommon/simulatorfsxcommon.cpp | 40 ---------- .../simulator/fsxcommon/simulatorfsxcommon.h | 6 -- .../simulator/xplane/simulatorxplane.cpp | 76 ------------------- .../simulator/xplane/simulatorxplane.h | 6 -- .../simulator/xplane/xplanempaircraft.cpp | 28 +------ .../simulator/xplane/xplanempaircraft.h | 6 -- src/xswiftbus/traffic.cpp | 12 +-- tests/blackmisc/testinterpolatorlinear.cpp | 14 ++-- tests/blackmisc/testinterpolatorparts.cpp | 23 +++--- tests/blackmisc/testinterpolatorparts.h | 4 +- 27 files changed, 140 insertions(+), 351 deletions(-) diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index 1fd8f4693..5a1ba99d7 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -114,6 +114,12 @@ namespace BlackCore return m_airspace->remoteAircraftParts(callsign, cutoffTimeBefore); } + int CContextNetwork::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const + { + Q_ASSERT(m_airspace); + return m_airspace->remoteAircraftPartsCount(callsign, cutoffTimeBefore); + } + int CContextNetwork::remoteAircraftSituationsCount(const CCallsign &callsign) const { Q_ASSERT(m_airspace); diff --git a/src/blackcore/context/contextnetworkimpl.h b/src/blackcore/context/contextnetworkimpl.h index c53fa9755..cba26475c 100644 --- a/src/blackcore/context/contextnetworkimpl.h +++ b/src/blackcore/context/contextnetworkimpl.h @@ -91,6 +91,7 @@ namespace BlackCore virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override; + virtual int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override; virtual bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override; virtual QList connectRemoteAircraftProviderSignals( diff --git a/src/blackcore/simulatorcommon.cpp b/src/blackcore/simulatorcommon.cpp index f7f6d2669..d7c65523c 100644 --- a/src/blackcore/simulatorcommon.cpp +++ b/src/blackcore/simulatorcommon.cpp @@ -60,8 +60,8 @@ namespace BlackCore m_remoteAircraftProviderConnections.append( CRemoteAircraftAware::provider()->connectRemoteAircraftProviderSignals( this, // receiver must match object in bind - std::bind(&CSimulatorCommon::rapOnRemoteProviderAddedAircraftSituation, this, std::placeholders::_1), - std::bind(&CSimulatorCommon::rapOnRemoteProviderAddedAircraftParts, this, std::placeholders::_1, std::placeholders::_2), + nullptr, + nullptr, std::bind(&CSimulatorCommon::rapOnRemoteProviderRemovedAircraft, this, std::placeholders::_1), std::bind(&CSimulatorCommon::rapOnRecalculatedRenderedAircraft, this, std::placeholders::_1)) ); @@ -561,8 +561,6 @@ namespace BlackCore m_statsUpdateAircraftTimeTotalMs = 0; m_statsPhysicallyAddedAircraft = 0; m_statsPhysicallyRemovedAircraft = 0; - m_statsPartsAdded = 0; - m_statsSituationAdded = 0; } CStatusMessageList CSimulatorCommon::debugVerifyStateAfterAllAircraftRemoved() const @@ -635,17 +633,6 @@ namespace BlackCore } } - void CSimulatorCommon::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - Q_UNUSED(situation); - } - - void CSimulatorCommon::onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts) - { - Q_UNUSED(callsign); - Q_UNUSED(parts); - } - void CSimulatorCommon::reset() { this->clearAllRemoteAircraftData(); @@ -700,20 +687,6 @@ namespace BlackCore this->onRecalculatedRenderedAircraft(snapshot); } - void CSimulatorCommon::rapOnRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - if (!this->isConnected()) return; - m_statsSituationAdded++; - this->onRemoteProviderAddedAircraftSituation(situation); - } - - void CSimulatorCommon::rapOnRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) - { - if (!this->isConnected()) return; - m_statsPartsAdded++; - this->onRemoteProviderAddedAircraftParts(callsign, parts); - } - void CSimulatorCommon::rapOnRemoteProviderRemovedAircraft(const CCallsign &callsign) { Q_UNUSED(callsign); diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index 43b41e8f0..59e25f74e 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -112,12 +112,6 @@ namespace BlackCore //! Counter removed aircraft int getStatisticsPhysicallyRemovedAircraft() const { return m_statsPhysicallyRemovedAircraft; } - //! Counter situation added - int getStatisticsSituationAdded() const { return m_statsSituationAdded; } - - //! Counter added parts - int getStatisticsPartsAdded() const { return m_statsPartsAdded; } - protected: //! Constructor CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info, @@ -143,12 +137,6 @@ namespace BlackCore //! @{ //! Recalculate the rendered aircraft, this happens when restrictions are applied (max. aircraft, range) virtual void onRecalculatedRenderedAircraft(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &snapshot); - - //! Provider added situation - virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - - //! Provider added parts - virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts); //! @} //! Max.airports in range @@ -232,8 +220,6 @@ namespace BlackCore private: // remote aircraft provider ("rap") bound void rapOnRecalculatedRenderedAircraft(const BlackMisc::Simulation::CAirspaceAircraftSnapshot &snapshot); - void rapOnRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - void rapOnRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts); void rapOnRemoteProviderRemovedAircraft(const BlackMisc::Aviation::CCallsign &callsign); // call with counters updated @@ -255,8 +241,6 @@ namespace BlackCore // those are the added counters, overflow will not be an issue here (discussed in T171 review) int m_statsPhysicallyAddedAircraft = 0; //!< statistics, how many aircraft added int m_statsPhysicallyRemovedAircraft = 0; //!< statistics, how many aircraft removed - int m_statsPartsAdded = 0; //!< statistics, how many aircraft parts added - int m_statsSituationAdded = 0; //!< statistics, how many situations added }; } // namespace diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index 23f087c58..62a553068 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -192,10 +192,10 @@ namespace BlackMisc {} CCoordinateGeodetic::CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees) : - CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { 0, nullptr }) {} + CCoordinateGeodetic({ latitudeDegrees, PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, PhysicalQuantities::CAngleUnit::deg() }, { 0, nullptr }) {} CCoordinateGeodetic::CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightFeet) : - CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { heightFeet, BlackMisc::PhysicalQuantities::CLengthUnit::ft() }) {} + CCoordinateGeodetic({ latitudeDegrees, PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, PhysicalQuantities::CAngleUnit::deg() }, { heightFeet, PhysicalQuantities::CLengthUnit::ft() }) {} CCoordinateGeodetic::CCoordinateGeodetic(const ICoordinateGeodetic &coordinate) : m_x(coordinate.normalVectorDouble()[0]), diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index 2e43ac9ec..14755ba64 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -196,8 +196,8 @@ namespace BlackMisc class BLACKMISC_EXPORT CCoordinateGeodetic : public CValueObject, public ICoordinateGeodetic { public: - //! Default constructor - CCoordinateGeodetic() : CCoordinateGeodetic(0, 0, 0) {} + //! Default constructor (null coordinate) + CCoordinateGeodetic() {} //! Constructor by normal vector CCoordinateGeodetic(const QVector3D &normal) : m_x(normal.x()), m_y(normal.y()), m_z(normal.z()) {} @@ -260,7 +260,11 @@ namespace BlackMisc void setNormalVector(double x, double y, double z) { m_x = x; m_y = y; m_z = z; } //! Set to null - void setNull() { this->setNormalVector(0, 0, 0); } + void setNull() + { + this->setNormalVector(0, 0, 0); + m_geodeticHeight.setNull(); + } //! Is null? virtual bool isNull() const override { return m_x == 0 && m_y == 0 && m_z == 0; } diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index ac5a8d19f..c14f228ff 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -76,6 +76,12 @@ namespace BlackMisc return this->provider()->remoteAircraftParts(callsign, cutoffTimeBefore); } + int CRemoteAircraftAware::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const + { + Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); + return this->provider()->remoteAircraftPartsCount(callsign, cutoffTimeBefore); + } + CCallsignSet CRemoteAircraftAware::remoteAircraftSupportingParts() const { Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available"); diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index c86be216c..b3980d2b7 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -101,7 +101,11 @@ namespace BlackMisc //! All parts (per callsign, time history) //! \threadsafe - virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const = 0; + virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const = 0; + + //! All parts (per callsign, time history) + //! \threadsafe + virtual int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const = 0; //! Is remote aircraft supporting parts? //! \threadsafe @@ -220,15 +224,18 @@ namespace BlackMisc //! \copydoc IRemoteAircraftProvider::remoteAircraftSituations BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const; + //! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount + int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const; + //! \copydoc IRemoteAircraftProvider::remoteAircraftParts - BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const; + BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const; + + //! \copydoc IRemoteAircraftProvider::remoteAircraftPartsCount + int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const; //! \copydoc IRemoteAircraftProvider::remoteAircraftSupportingParts BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const; - //! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount - int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const; - //! \copydoc IRemoteAircraftProvider::isRemoteAircraftSupportingParts bool isRemoteAircraftSupportingParts(const BlackMisc::Aviation::CCallsign &callsign) const; diff --git a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp index fae711609..2d907d5b0 100644 --- a/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/remoteaircraftproviderdummy.cpp @@ -15,7 +15,7 @@ #include "blackmisc/dictionary.h" #include "blackmisc/propertyindexvariantmap.h" #include "blackmisc/variant.h" - +#include #include using namespace BlackMisc::Aviation; @@ -53,6 +53,16 @@ namespace BlackMisc return getAircraftInRangeForCallsign(callsign).getModel(); } + bool CRemoteAircraftProviderDummy::isAircraftInRange(const CCallsign &callsign) const + { + return m_aircraft.containsCallsign(callsign); + } + + bool CRemoteAircraftProviderDummy::isVtolAircraft(const CCallsign &callsign) const + { + return m_aircraft.findFirstByCallsign(callsign).isVtol(); + } + CAirspaceAircraftSnapshot CRemoteAircraftProviderDummy::getLatestAirspaceAircraftSnapshot() const { return CAirspaceAircraftSnapshot(m_aircraft); @@ -64,6 +74,11 @@ namespace BlackMisc return m_parts.value(callsign).findBefore(cutoffTimeBefore); } + int CRemoteAircraftProviderDummy::remoteAircraftPartsCount(const CCallsign &callsign, qint64 cutoffTimeBefore) const + { + return this->remoteAircraftParts(callsign, cutoffTimeBefore).size(); + } + CAircraftSituationList CRemoteAircraftProviderDummy::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const { return m_situations.findByCallsign(callsign); @@ -74,6 +89,11 @@ namespace BlackMisc return remoteAircraftSituations(callsign).size(); } + int CRemoteAircraftProviderDummy::getRemoteAircraftSupportingPartsCount() const + { + return m_parts.keys().size(); + } + CCallsignSet CRemoteAircraftProviderDummy::remoteAircraftSupportingParts() const { return CCollection(m_parts.keys()); @@ -95,9 +115,9 @@ namespace BlackMisc Q_ASSERT_X(receiver, Q_FUNC_INFO, "Missing receiver"); QList c( { - connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, receiver, situationSlot) , - connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, receiver, partsSlot) , - connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, receiver, removedAircraftSlot) , + connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftSituation, receiver, situationSlot), + connect(this, &CRemoteAircraftProviderDummy::addedRemoteAircraftParts, receiver, partsSlot), + connect(this, &CRemoteAircraftProviderDummy::removedRemoteAircraft, receiver, removedAircraftSlot), connect(this, &CRemoteAircraftProviderDummy::airspaceAircraftSnapshot, receiver, aircraftSnapshotSlot) }); return c; @@ -106,7 +126,7 @@ namespace BlackMisc bool CRemoteAircraftProviderDummy::updateAircraftEnabled(const CCallsign &callsign, bool enabledForRendering) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexEnabled, CVariant::fromValue(enabledForRendering)); - const int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } @@ -114,7 +134,7 @@ namespace BlackMisc { Q_UNUSED(originator); CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexModel, CVariant::from(model)); - const int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } @@ -122,34 +142,34 @@ namespace BlackMisc { Q_UNUSED(originator); CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexNetworkModel, CVariant::from(model)); - const int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } bool CRemoteAircraftProviderDummy::updateFastPositionEnabled(const CCallsign &callsign, bool enableFastPositionUpdates) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexFastPositionUpdates, CVariant::fromValue(enableFastPositionUpdates)); - const int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } bool CRemoteAircraftProviderDummy::updateAircraftRendered(const CCallsign &callsign, bool rendered) { CPropertyIndexVariantMap vm(CSimulatedAircraft::IndexRendered, CVariant::fromValue(rendered)); - const int n = this->m_aircraft.applyIfCallsign(callsign, vm); + const int n = m_aircraft.applyIfCallsign(callsign, vm); return n > 0; } bool CRemoteAircraftProviderDummy::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation) { CPropertyIndexVariantMap vm({ CSimulatedAircraft::IndexSituation, CAircraftSituation::IndexGroundElevationPlane }, CVariant::fromValue(elevation)); - const int c = this->m_aircraft.applyIfCallsign(callsign, vm); + const int c = m_aircraft.applyIfCallsign(callsign, vm); return c > 0; } void CRemoteAircraftProviderDummy::updateMarkAllAsNotRendered() { - this->m_aircraft.markAllAsNotRendered(); + m_aircraft.markAllAsNotRendered(); } CStatusMessageList CRemoteAircraftProviderDummy::getReverseLookupMessages(const CCallsign &callsign) const @@ -186,22 +206,46 @@ namespace BlackMisc void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation) { - this->m_situations.push_front(situation); + m_situations.push_frontKeepLatestAdjustedFirst(situation); emit addedRemoteAircraftSituation(situation); } + void CRemoteAircraftProviderDummy::insertNewSituations(const CAircraftSituationList &situations) + { + for (const CAircraftSituation &situation : situations) + { + m_situations.push_frontKeepLatestAdjustedFirst(situation); + QTimer::singleShot(0, this, [ = ] + { + emit this->addedRemoteAircraftSituation(situation); + }); + } + } + void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) { - this->m_parts[callsign].push_front(parts); + m_parts[callsign].push_frontKeepLatestAdjustedFirst(parts); emit addedRemoteAircraftParts(callsign, parts); } + void CRemoteAircraftProviderDummy::insertNewAircraftParts(const CCallsign &callsign, const CAircraftPartsList &partsList) + { + CAircraftPartsList &pl = m_parts[callsign]; + for (const CAircraftParts &parts : partsList) + { + pl.push_frontKeepLatestAdjustedFirst(parts); + QTimer::singleShot(0, this, [ = ] + { + emit this->addedRemoteAircraftParts(callsign, parts); + }); + } + } + void CRemoteAircraftProviderDummy::clear() { m_situations.clear(); m_parts.clear(); m_aircraft.clear(); } - } // namespace } // namespace diff --git a/src/blackmisc/simulation/remoteaircraftproviderdummy.h b/src/blackmisc/simulation/remoteaircraftproviderdummy.h index 276c04536..9585d4831 100644 --- a/src/blackmisc/simulation/remoteaircraftproviderdummy.h +++ b/src/blackmisc/simulation/remoteaircraftproviderdummy.h @@ -32,13 +32,6 @@ namespace BlackMisc { - namespace Aviation - { - class CAircraftParts; - class CAircraftSituation; - class CCallsign; - } - namespace Simulation { //! Dummy implementation for testing purpose, not thread safe @@ -56,9 +49,15 @@ namespace BlackMisc //! For testing, add new situation and fire signals void insertNewSituation(const BlackMisc::Aviation::CAircraftSituation &situation); + //! For testing, add new situation and fire signals + void insertNewSituations(const BlackMisc::Aviation::CAircraftSituationList &situations); + //! For testing, add new parts and fire signals void insertNewAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts); + //! For testing, add new parts and fire signals + void insertNewAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftPartsList &partsList); + //! Clear all data void clear(); @@ -68,17 +67,21 @@ namespace BlackMisc virtual Aviation::CCallsignSet getAircraftInRangeCallsigns() const override; virtual BlackMisc::Simulation::CSimulatedAircraft getAircraftInRangeForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual BlackMisc::Simulation::CAircraftModel getAircraftInRangeModelForCallsign(const BlackMisc::Aviation::CCallsign &callsign) const override; + virtual bool isAircraftInRange(const Aviation::CCallsign &callsign) const override; + virtual bool isVtolAircraft(const Aviation::CCallsign &callsign) const override; virtual BlackMisc::Simulation::CAirspaceAircraftSnapshot getLatestAirspaceAircraftSnapshot() const override; virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const Aviation::CCallsign &callsign, qint64 cutoffTimeBefore = -1) const override; + virtual int remoteAircraftPartsCount(const Aviation::CCallsign &callsign, qint64 cutoffTimeBefore) const override; virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const Aviation::CCallsign &callsign) const override; virtual int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const override; + virtual int getRemoteAircraftSupportingPartsCount() const override; virtual BlackMisc::Aviation::CCallsignSet remoteAircraftSupportingParts() const override; virtual bool isRemoteAircraftSupportingParts(const Aviation::CCallsign &callsign) const override; virtual QList connectRemoteAircraftProviderSignals( QObject *receiver, - std::function addedSituationSlot, + std::function addedSituationSlot, std::function addedPartsSlot, - std::function removedAircraftSlot, + std::function removedAircraftSlot, std::function aircraftSnapshotSlot ) override; virtual bool updateAircraftEnabled(const BlackMisc::Aviation::CCallsign &callsign, bool enabledForRendering) override; @@ -113,7 +116,6 @@ namespace BlackMisc BlackMisc::Aviation::CAircraftSituationList m_situations; CPartsPerCallsign m_parts; }; - } // namespace } // namespace diff --git a/src/plugins/simulator/emulated/simulatoremulated.cpp b/src/plugins/simulator/emulated/simulatoremulated.cpp index 680887614..2d32e1874 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.cpp +++ b/src/plugins/simulator/emulated/simulatoremulated.cpp @@ -314,23 +314,6 @@ namespace BlackSimPlugin return CSimulatorCommon::physicallyRemoveAllRemoteAircraft(); } - void CSimulatorEmulated::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - const CCallsign cs = situation.getCallsign(); - if (!m_interpolators.contains(cs)) { return; } - CInterpolatorMulti *im = m_interpolators[cs]; - Q_ASSERT_X(im, Q_FUNC_INFO, "no interpolator"); - im->addAircraftSituation(situation); - } - - void BlackSimPlugin::Emulated::CSimulatorEmulated::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) - { - if (!m_interpolators.contains(callsign)) { return; } - CInterpolatorMulti *im = m_interpolators[callsign]; - Q_ASSERT_X(im, Q_FUNC_INFO, "no interpolator"); - im->addAircraftParts(parts); - } - bool CSimulatorEmulated::parseDetails(const CSimpleCommandParser &parser) { if (m_monitorWidget && parser.isKnownCommand()) diff --git a/src/plugins/simulator/emulated/simulatoremulated.h b/src/plugins/simulator/emulated/simulatoremulated.h index 95633d767..6c3bf2ecb 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.h +++ b/src/plugins/simulator/emulated/simulatoremulated.h @@ -124,12 +124,6 @@ namespace BlackSimPlugin // just logged virtual int physicallyRemoveAllRemoteAircraft() override; - //! \name Remote aircraft provider overrides - //! @{ - virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; - virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override; - //! @} - //! \copydoc BlackCore::CSimulatorCommon::parseDetails virtual bool parseDetails(const BlackMisc::CSimpleCommandParser &parser) override; diff --git a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp index b117f4e9b..c3ceda257 100644 --- a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp +++ b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp @@ -205,8 +205,8 @@ namespace BlackSimPlugin if (!m_simulator) { return; } ui->le_PhysicallyAddedAircraft->setText(QString::number(m_simulator->getStatisticsPhysicallyAddedAircraft())); ui->le_PhysicallyRemovedAircraft->setText(QString::number(m_simulator->getStatisticsPhysicallyRemovedAircraft())); - ui->le_SituationAdded->setText(QString::number(m_simulator->getStatisticsSituationAdded())); - ui->le_PartsAdded->setText(QString::number(m_simulator->getStatisticsPartsAdded())); + // ui->le_SituationAdded->setText(QString::number(m_simulator->getStatisticsSituationAdded())); + // ui->le_PartsAdded->setText(QString::number(m_simulator->getStatisticsPartsAdded())); ui->le_AircraftRendered->setText(QString::number(m_simulator->m_renderedAircraft.size())); ui->le_PartsEnabledAircraft->setText(QString::number(m_simulator->getRemoteAircraftSupportingPartsCount())); } diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index d3fa00ed8..434e7d85a 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -415,20 +415,6 @@ namespace BlackSimPlugin m_fsuipc->write(weatherGrid); } - void CSimulatorFs9::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - const auto it = m_hashFs9Clients.find(situation.getCallsign()); - if (it == m_hashFs9Clients.end()) { return; } - QTimer::singleShot(0, it->data(), [client = *it, situation] { client->getInterpolator()->addAircraftSituation(situation); }); - } - - void CSimulatorFs9::onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts) - { - const auto it = m_hashFs9Clients.find(callsign); - if (it == m_hashFs9Clients.end()) { return; } - QTimer::singleShot(0, it->data(), [client = *it, parts] { client->getInterpolator()->addAircraftParts(parts); }); - } - CSimulatorFs9Listener::CSimulatorFs9Listener(const CSimulatorPluginInfo &info, const QSharedPointer &fs9Host, const QSharedPointer &lobbyClient) : diff --git a/src/plugins/simulator/fs9/simulatorfs9.h b/src/plugins/simulator/fs9/simulatorfs9.h index 7a5fa81fc..81e695fc4 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.h +++ b/src/plugins/simulator/fs9/simulatorfs9.h @@ -80,12 +80,6 @@ namespace BlackSimPlugin virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override; //! @} - //! \name Remote aircraft provider overrides - //! @{ - virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; - virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override; - //! @} - private: //! Dispatch FSUIPC reading //! \remark very frequently called diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 5f5a6d46e..df69518c3 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -28,38 +28,6 @@ namespace BlackSimPlugin m_interpolator(QSharedPointer::create(aircraft.getCallsign())) { m_interpolator->attachLogger(logger); - - // if available set situation and parts - if (aircraft.isPartsSynchronized()) { this->addAircraftParts(aircraft.getParts()); } - if (aircraft.getSituation().hasValidTimestamp()) { this->addAircraftSituation(aircraft.getSituation()); } - } - - CSimConnectObject::CSimConnectObject(const CAircraftSituation &situation) : - m_interpolator(QSharedPointer::create(situation.getCallsign())) - { - if (situation.hasValidTimestamp()) { this->addAircraftSituation(situation); } - } - - CSimConnectObject::CSimConnectObject(const CAircraftParts &parts, const CCallsign &callsign) : - m_interpolator(QSharedPointer::create(callsign)) - { - if (parts.hasValidTimestamp()) { this->addAircraftParts(parts); } - } - - void CSimConnectObject::addAircraftParts(const CAircraftParts &parts) - { - Q_ASSERT(m_interpolator); - Q_ASSERT(parts.hasValidTimestamp()); - m_interpolator->addAircraftParts(parts); - m_aircraft.setParts(parts); - } - - void CSimConnectObject::addAircraftSituation(const CAircraftSituation &situation) - { - Q_ASSERT(m_interpolator); - Q_ASSERT(situation.hasValidTimestamp()); - m_interpolator->addAircraftSituation(situation); - m_aircraft.setSituation(situation); // update with last situation } void CSimConnectObject::invalidatePartsAsSent() diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index a8215dcbf..5732f97ad 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -34,12 +34,6 @@ namespace BlackSimPlugin DWORD requestId, BlackMisc::Simulation::CInterpolationLogger *logger); - //! Constructor providing initial situation - CSimConnectObject(const BlackMisc::Aviation::CAircraftSituation &situation); - - //! Constructor providing initial parts - CSimConnectObject(const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Aviation::CCallsign &callsign); - //! Destructor ~CSimConnectObject() {} @@ -55,12 +49,6 @@ namespace BlackSimPlugin //! Set the aircraft void setAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) { m_aircraft = aircraft; } - //! 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 5b0070e75..caa43999c 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -1465,46 +1465,6 @@ namespace BlackSimPlugin CSimulatorFsCommon::clearAllRemoteAircraftData(); } - void CSimulatorFsxCommon::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - if (m_simConnectObjects.contains(situation.getCallsign())) - { - m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation); - } - else - { - // trace for future usage - if (m_simConnectObjectsPositionAndPartsTraces.contains(situation.getCallsign())) - { - m_simConnectObjectsPositionAndPartsTraces[situation.getCallsign()].addAircraftSituation(situation); - } - else - { - m_simConnectObjectsPositionAndPartsTraces.insert(situation.getCallsign(), CSimConnectObject(situation)); - } - } - } - - void CSimulatorFsxCommon::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) - { - if (m_simConnectObjects.contains(callsign)) - { - m_simConnectObjects[callsign].addAircraftParts(parts); - } - else - { - // trace for future usage - if (m_simConnectObjectsPositionAndPartsTraces.contains(callsign)) - { - m_simConnectObjectsPositionAndPartsTraces[callsign].addAircraftParts(parts); - } - else - { - m_simConnectObjectsPositionAndPartsTraces.insert(callsign, CSimConnectObject(parts, callsign)); - } - } - } - QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position) { static const QString positionStr("Lat: %1deg lng: %2deg alt: %3ft pitch: %4deg bank: %5deg hdg: %6deg airspeed: %7kts onGround: %8"); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index b7f0497aa..73b0725bc 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -148,12 +148,6 @@ namespace BlackSimPlugin virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override; //! @} - //! \name Remote aircraft provider overrides - //! @{ - virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; - virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override; - //! @} - //! Timer event (our SimConnect event loop), runs dispatch //! \sa m_timerId //! \sa CSimulatorFsxCommon::dispatch diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index b30e34c0b..676dbc063 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -546,82 +546,6 @@ namespace BlackSimPlugin return true; } - void CSimulatorXPlane::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation) - { - Q_ASSERT(isConnected()); - if (c_driverInterpolation) - { - if (m_xplaneAircraftObjects.contains(situation.getCallsign())) - { - m_xplaneAircraftObjects[situation.getCallsign()].addAircraftSituation(situation); - } - } - else - { - using namespace PhysicalQuantities; - m_trafficProxy->addPlanePosition(situation.getCallsign().asString(), - situation.latitude().value(CAngleUnit::deg()), - situation.longitude().value(CAngleUnit::deg()), - situation.getAltitude().value(CLengthUnit::ft()), - situation.getPitch().value(CAngleUnit::deg()), - situation.getBank().value(CAngleUnit::deg()), - situation.getHeading().value(CAngleUnit::deg()), - situation.getMSecsSinceEpoch() - QDateTime::currentMSecsSinceEpoch(), - situation.getTimeOffsetMs()); - - if (! isRemoteAircraftSupportingParts(situation.getCallsign())) - { - // if aircraft not supporting parts then guess the basics (onGround, gear, lights) - //! \todo not working for VTOL - CAircraftParts parts; - parts.setMSecsSinceEpoch(situation.getMSecsSinceEpoch()); - parts.setTimeOffsetMs(situation.getTimeOffsetMs()); - if (situation.getGroundSpeed() < CSpeed(50, CSpeedUnit::kts())) - { - const auto nearestAirport = std::min_element(m_airportsInRange.cbegin(), m_airportsInRange.cend(), [&situation](auto &&a, auto &&b) - { - return calculateEuclideanDistanceSquared(situation, a) < calculateEuclideanDistanceSquared(situation, b); - }); - if (nearestAirport != m_airportsInRange.cend() && situation.getAltitude() - nearestAirport->getElevation() < CLength(50, CLengthUnit::ft())) - { - parts.setOnGround(true); - parts.setGearDown(true); - } - } - if (situation.getAltitude() < CAltitude(10000, CLengthUnit::ft())) - { - parts.setLights({ true, true, true, true, true, true, true, true }); - } - else - { - parts.setLights({ true, false, false, true, true, true, true, true }); - } - onRemoteProviderAddedAircraftParts(situation.getCallsign(), parts); - } - } - } - - void CSimulatorXPlane::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts) - { - Q_ASSERT(this->isConnected()); - if (c_driverInterpolation) - { - if (m_xplaneAircraftObjects.contains(callsign)) - { - m_xplaneAircraftObjects[callsign].addAircraftParts(parts); - } - } - else - { - m_trafficProxy->addPlaneSurfaces(callsign.asString(), parts.isGearDown() ? 1 : 0, - parts.getFlapsPercent() / 100.0, parts.isSpoilersOut() ? 1 : 0, parts.isSpoilersOut() ? 1 : 0, parts.getFlapsPercent() / 100.0, - 0, parts.isAnyEngineOn() ? 0 : 0.75, 0, 0, 0, - parts.getLights().isLandingOn(), parts.getLights().isBeaconOn(), parts.getLights().isStrobeOn(), parts.getLights().isNavOn(), - 0, parts.isOnGround(), parts.getMSecsSinceEpoch() - QDateTime::currentMSecsSinceEpoch(), parts.getTimeOffsetMs()); - m_trafficProxy->setPlaneTransponder(callsign.asString(), 2000, true, false); - } - } - bool CSimulatorXPlane::physicallyRemoveRemoteAircraft(const CCallsign &callsign) { Q_ASSERT(isConnected()); diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index 0a3c59cd4..e13ebed00 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -108,12 +108,6 @@ namespace BlackSimPlugin static QDBusConnection connectionFromString(const QString &str); protected: - //! \name Remote aircraft provider overrides - //! @{ - virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override; - virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override; - //! @} - //! \copydoc BlackCore::ISimulator::isConnected virtual bool isConnected() const override; diff --git a/src/plugins/simulator/xplane/xplanempaircraft.cpp b/src/plugins/simulator/xplane/xplanempaircraft.cpp index d27d1a7b3..f9a245cbd 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.cpp +++ b/src/plugins/simulator/xplane/xplanempaircraft.cpp @@ -26,39 +26,15 @@ namespace BlackSimPlugin m_interpolator(QSharedPointer::create(aircraft.getCallsign())) { m_interpolator->attachLogger(logger); - - // if available set situation and parts - if (aircraft.isPartsSynchronized()) { this->addAircraftParts(aircraft.getParts()); } - if (aircraft.getSituation().hasValidTimestamp()) { this->addAircraftSituation(aircraft.getSituation()); } } CXPlaneMPAircraft::CXPlaneMPAircraft(const CAircraftSituation &situation) : m_interpolator(QSharedPointer::create(situation.getCallsign())) - { - if (situation.hasValidTimestamp()) { this->addAircraftSituation(situation); } - } + { } CXPlaneMPAircraft::CXPlaneMPAircraft(const CAircraftParts &parts, const CCallsign &callsign) : m_interpolator(QSharedPointer::create(callsign)) - { - if (parts.hasValidTimestamp()) { this->addAircraftParts(parts); } - } - - void CXPlaneMPAircraft::addAircraftParts(const CAircraftParts &parts) - { - Q_ASSERT(m_interpolator); - Q_ASSERT(parts.hasValidTimestamp()); - m_interpolator->addAircraftParts(parts); - m_aircraft.setParts(parts); - } - - void CXPlaneMPAircraft::addAircraftSituation(const CAircraftSituation &situation) - { - Q_ASSERT(m_interpolator); - Q_ASSERT(situation.hasValidTimestamp()); - m_interpolator->addAircraftSituation(situation); - m_aircraft.setSituation(situation); // update with last situation - } + { } bool CXPlaneMPAircraft::isSameAsSent(const CAircraftSituation &position) const { diff --git a/src/plugins/simulator/xplane/xplanempaircraft.h b/src/plugins/simulator/xplane/xplanempaircraft.h index 105fefd26..7cc29c64e 100644 --- a/src/plugins/simulator/xplane/xplanempaircraft.h +++ b/src/plugins/simulator/xplane/xplanempaircraft.h @@ -53,12 +53,6 @@ namespace BlackSimPlugin //! Set the aircraft void setAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) { m_aircraft = aircraft; } - //! Add parts for interpolator - void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts); - - //! Add situation for interpolator - void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation); - //! Parts as sent to simulator const BlackMisc::Aviation::CAircraftParts &getPartsAsSent() const { return m_partsAsSent; } diff --git a/src/xswiftbus/traffic.cpp b/src/xswiftbus/traffic.cpp index b8595a3f5..8676588d3 100644 --- a/src/xswiftbus/traffic.cpp +++ b/src/xswiftbus/traffic.cpp @@ -246,7 +246,7 @@ namespace XSwiftBus ); situation.setMSecsSinceEpoch(relativeTime + QDateTime::currentMSecsSinceEpoch()); situation.setTimeOffsetMs(timeOffset); - plane->interpolator.addAircraftSituation(situation); + // plane->interpolator.addAircraftSituation(situation); } void CTraffic::setPlanePosition(const QString &callsign, double latitude, double longitude, double altitude, double pitch, double roll, double heading) @@ -289,11 +289,11 @@ namespace XSwiftBus if (plane->hasSurfaces) { plane->pendingSurfaces.push_back(surfaces); } else { surfaces.second(plane); } - BlackMisc::Aviation::CAircraftParts parts; - parts.setOnGround(onGround); - parts.setMSecsSinceEpoch(relativeTime + QDateTime::currentMSecsSinceEpoch()); - parts.setTimeOffsetMs(timeOffset); - plane->interpolator.addAircraftParts(parts); +// BlackMisc::Aviation::CAircraftParts parts; +// parts.setOnGround(onGround); +// parts.setMSecsSinceEpoch(relativeTime + QDateTime::currentMSecsSinceEpoch()); +// parts.setTimeOffsetMs(timeOffset); +// plane->interpolator.addAircraftParts(parts); } void CTraffic::setPlaneSurfaces(const QString &callsign, double gear, double flap, double spoiler, double speedBrake, double slat, double wingSweep, double thrust, diff --git a/tests/blackmisc/testinterpolatorlinear.cpp b/tests/blackmisc/testinterpolatorlinear.cpp index d8d86a8fc..268f73abc 100644 --- a/tests/blackmisc/testinterpolatorlinear.cpp +++ b/tests/blackmisc/testinterpolatorlinear.cpp @@ -15,6 +15,9 @@ */ #include "testinterpolatorlinear.h" +#include "blackmisc/simulation/interpolator.h" +#include "blackmisc/simulation/interpolatorlinear.h" +#include "blackmisc/simulation/remoteaircraftproviderdummy.h" #include "blackmisc/aviation/aircraftengine.h" #include "blackmisc/aviation/aircraftenginelist.h" #include "blackmisc/aviation/aircraftlights.h" @@ -23,18 +26,15 @@ #include "blackmisc/aviation/altitude.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/heading.h" -#include "blackmisc/compare.h" #include "blackmisc/geo/coordinategeodetic.h" #include "blackmisc/geo/latitude.h" #include "blackmisc/geo/longitude.h" -#include "blackmisc/simulation/interpolator.h" -#include "blackmisc/simulation/interpolatorlinear.h" #include "blackmisc/pq/angle.h" #include "blackmisc/pq/length.h" #include "blackmisc/pq/physicalquantity.h" #include "blackmisc/pq/speed.h" #include "blackmisc/pq/units.h" -#include "blackmisc/simulation/remoteaircraftprovider.h" +#include "blackmisc/compare.h" #include #include @@ -55,7 +55,9 @@ namespace BlackMiscTest void CTestInterpolatorLinear::basicInterpolatorTests() { CCallsign cs("SWIFT"); + CRemoteAircraftProviderDummy provider; CInterpolatorLinear interpolator(cs); + interpolator.setRemoteAircraftProvider(&provider); // fixed time so everything can be debugged const qint64 ts = 1425000000000; // QDateTime::currentMSecsSinceEpoch(); @@ -68,14 +70,14 @@ namespace BlackMiscTest // check height above ground CLength hag = (s.getAltitude() - s.getGroundElevation()); QVERIFY2(s.getHeightAboveGround() == hag, "Wrong elevation"); - interpolator.addAircraftSituation(s); + provider.insertNewSituation(s); } constexpr int partsCount = 10; for (int i = partsCount - 1; i >= 0; i--) { CAircraftParts p(getTestParts(i, ts, deltaT)); - interpolator.addAircraftParts(p); + provider.insertNewAircraftParts(cs, p); } // make sure signals are processed, if the interpolator depends on those signals diff --git a/tests/blackmisc/testinterpolatorparts.cpp b/tests/blackmisc/testinterpolatorparts.cpp index 64c8e8595..9c406b8fa 100644 --- a/tests/blackmisc/testinterpolatorparts.cpp +++ b/tests/blackmisc/testinterpolatorparts.cpp @@ -16,6 +16,7 @@ #include "testinterpolatorparts.h" #include "blackmisc/simulation/interpolatorspline.h" +#include "blackmisc/simulation/remoteaircraftproviderdummy.h" #include #include @@ -30,12 +31,14 @@ namespace BlackMiscTest void CTestInterpolatorParts::groundFlagInterpolation() { CCallsign cs("SWIFT"); + CRemoteAircraftProviderDummy provider; CInterpolatorSpline interpolator(cs); + interpolator.setRemoteAircraftProvider(&provider); // fixed time so everything can be debugged const qint64 ts = 1425000000000; // QDateTime::currentMSecsSinceEpoch() const qint64 deltaT = 5000; // ms - const int number = interpolator.maxParts(); + const int number = CRemoteAircraftProviderDummy::MaxPartsPerCallsign; // const int numberHalf = number / 2; const qint64 farFuture = ts + 3 * number * deltaT; const qint64 farPast = ts - 4 * number * deltaT; @@ -43,7 +46,7 @@ namespace BlackMiscTest CAircraftPartsList parts; for (int i = 0; i < number; i++) { - const CAircraftParts p = getTestParts(i, ts, deltaT, true); + const CAircraftParts p = createTestParts(i, ts, deltaT, true); parts.push_back(p); } @@ -54,7 +57,7 @@ namespace BlackMiscTest // Testing for a time >> last time // all on ground flags true - interpolator.addAircraftParts(parts, false); // we work with 0 offsets here + provider.insertNewAircraftParts(cs, parts); // we work with 0 offsets here CAircraftParts p = interpolator.getInterpolatedParts(farFuture, setup, status); qint64 pTs = p.getAdjustedMSecsSinceEpoch(); QVERIFY2(status.isSupportingParts(), "Should support parts"); @@ -69,8 +72,10 @@ namespace BlackMiscTest // Testing for a time >> last time // all on ground flags true interpolator.clear(); + provider.clear(); + parts.setOnGround(false); - interpolator.addAircraftParts(parts, false); // we work with 0 offsets here + provider.insertNewAircraftParts(cs, parts); // we work with 0 offsets here p = interpolator.getInterpolatedParts(farFuture, setup, status); pTs = p.getAdjustedMSecsSinceEpoch(); QVERIFY2(status.isSupportingParts(), "Should support parts"); @@ -90,21 +95,21 @@ namespace BlackMiscTest CAircraftPartsList partsOnGround; for (int i = 0; i < number; i++) { - const CAircraftParts p = getTestParts(i, ts, deltaT, true); + const CAircraftParts p = createTestParts(i, ts, deltaT, true); partsOnGround.push_back(p); } CAircraftPartsList partsNotOnGround; for (int i = 0; i < number; i++) { - const CAircraftParts p = getTestParts(i, ts, deltaT, false); + const CAircraftParts p = createTestParts(i, ts, deltaT, false); partsNotOnGround.push_back(p); } CAircraftSituationList situations; for (int i = 0; i < number; i++) { - CAircraftSituation s = getTestSituation(cs, i, ts, deltaT, 0); + CAircraftSituation s = createTestSituation(cs, i, ts, deltaT, 0); s.setOnGround(CAircraftSituation::OnGroundSituationUnknown, CAircraftSituation::NotSet); situations.push_back(s); } @@ -128,7 +133,7 @@ namespace BlackMiscTest QVERIFY2(s1.getOnGroundDetails() == CAircraftSituation::InFromParts, "Wrong details"); } - CAircraftParts CTestInterpolatorParts::getTestParts(int number, qint64 ts, qint64 deltaT, bool onGround) + CAircraftParts CTestInterpolatorParts::createTestParts(int number, qint64 ts, qint64 deltaT, bool onGround) { CAircraftLights l(true, false, true, false, true, false); CAircraftEngineList e({ CAircraftEngine(1, true), CAircraftEngine(2, false), CAircraftEngine(3, true) }); @@ -139,7 +144,7 @@ namespace BlackMiscTest return p; } - CAircraftSituation CTestInterpolatorParts::getTestSituation(const CCallsign &callsign, int number, qint64 ts, qint64 deltaT, qint64 offset) + CAircraftSituation CTestInterpolatorParts::createTestSituation(const CCallsign &callsign, int number, qint64 ts, qint64 deltaT, qint64 offset) { const CAltitude alt(number, CAltitude::MeanSeaLevel, CLengthUnit::m()); const CLatitude lat(number, CAngleUnit::deg()); diff --git a/tests/blackmisc/testinterpolatorparts.h b/tests/blackmisc/testinterpolatorparts.h index 0b41e660f..a869126d3 100644 --- a/tests/blackmisc/testinterpolatorparts.h +++ b/tests/blackmisc/testinterpolatorparts.h @@ -45,10 +45,10 @@ namespace BlackMiscTest private: //! Test parts - static BlackMisc::Aviation::CAircraftParts getTestParts(int number, qint64 ts, qint64 deltaT, bool onGround); + static BlackMisc::Aviation::CAircraftParts createTestParts(int number, qint64 ts, qint64 deltaT, bool onGround); //! Test situation for testing - static BlackMisc::Aviation::CAircraftSituation getTestSituation(const BlackMisc::Aviation::CCallsign &callsign, int number, qint64 ts, qint64 deltaT, qint64 offset); + static BlackMisc::Aviation::CAircraftSituation createTestSituation(const BlackMisc::Aviation::CCallsign &callsign, int number, qint64 ts, qint64 deltaT, qint64 offset); }; } // namespace