mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
Ref T632, use rendered and callsign as tie breaker if distance is equal in snapshot
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user