diff --git a/src/blackmisc/simulation/airspaceaircraftsnapshot.cpp b/src/blackmisc/simulation/airspaceaircraftsnapshot.cpp index 2870e0b6b..0393337b0 100644 --- a/src/blackmisc/simulation/airspaceaircraftsnapshot.cpp +++ b/src/blackmisc/simulation/airspaceaircraftsnapshot.cpp @@ -35,11 +35,11 @@ namespace BlackMisc if (allAircraft.isEmpty()) { return; } CSimulatedAircraftList aircraft(allAircraft); - aircraft.sortByDistanceToReferencePosition(); - int numberAll = aircraft.size(); + aircraft.sortByDistanceToReferencePositionRenderedCallsign(); + const int numberAll = aircraft.size(); Q_ASSERT_X(numberAll == allAircraft.size(), Q_FUNC_INFO, "aircraft got lost"); - CSimulatedAircraftList vtolAircraft(aircraft.findByVtol(true)); - int numberVtol = vtolAircraft.size(); + const CSimulatedAircraftList vtolAircraft(aircraft.findByVtol(true)); + const int numberVtol = vtolAircraft.size(); m_aircraftCallsignsByDistance = aircraft.getCallsigns(); Q_ASSERT_X(m_aircraftCallsignsByDistance.size() == allAircraft.size(), Q_FUNC_INFO, "redundant or missing callsigns"); m_vtolAircraftCallsignsByDistance = vtolAircraft.getCallsigns(); diff --git a/src/blackmisc/simulation/airspaceaircraftsnapshot.h b/src/blackmisc/simulation/airspaceaircraftsnapshot.h index dc44b4068..90be9a1e3 100644 --- a/src/blackmisc/simulation/airspaceaircraftsnapshot.h +++ b/src/blackmisc/simulation/airspaceaircraftsnapshot.h @@ -38,11 +38,11 @@ namespace BlackMisc CAirspaceAircraftSnapshot(); //! Constructor - CAirspaceAircraftSnapshot(const BlackMisc::Simulation::CSimulatedAircraftList &allAircraft, - bool restricted = false, - bool renderingEnabled = true, - int maxAircraft = 100, - const BlackMisc::PhysicalQuantities::CLength &maxRenderedDistance = { 0, nullptr }); + CAirspaceAircraftSnapshot(const CSimulatedAircraftList &allAircraft, + bool restricted = false, + bool renderingEnabled = true, + int maxAircraft = 100, + const BlackMisc::PhysicalQuantities::CLength &maxRenderedDistance = { 0, nullptr }); //! Time when snapshot was taken const QDateTime getTimestamp() const { return QDateTime::fromMSecsSinceEpoch(m_timestampMsSinceEpoch); } diff --git a/src/blackmisc/simulation/simulatedaircraftlist.cpp b/src/blackmisc/simulation/simulatedaircraftlist.cpp index 6643b57ec..927314985 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.cpp +++ b/src/blackmisc/simulation/simulatedaircraftlist.cpp @@ -266,5 +266,15 @@ namespace BlackMisc } return c; } + + void CSimulatedAircraftList::sortByDistanceToReferencePositionRenderedCallsign() + { + this->sort([ & ](const CSimulatedAircraft & a, const CSimulatedAircraft & b) + { + if (a.getRelativeDistance() != b.getRelativeDistance()) { return a.getRelativeDistance() < b.getRelativeDistance(); } + if (a.isRendered() != b.isRendered()) { return a.isRendered(); } // get the rendered first + return a.getCallsignAsString() < b.getCallsignAsString(); + }); + } } // namespace } // namespace diff --git a/src/blackmisc/simulation/simulatedaircraftlist.h b/src/blackmisc/simulation/simulatedaircraftlist.h index 867f2e1dd..3b55b8b89 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.h +++ b/src/blackmisc/simulation/simulatedaircraftlist.h @@ -119,6 +119,9 @@ namespace BlackMisc //! Number of aircraft with parts int countAircraftPartsSynchronized() const; + + //! Same as sortByDistanceToReferencePosition, but consider callsign and rendered as secondary criteria + void sortByDistanceToReferencePositionRenderedCallsign(); }; //! Aircraft per callsign