Ref T632, use rendered and callsign as tie breaker if distance is equal in snapshot

This commit is contained in:
Klaus Basan
2019-04-23 17:48:12 +02:00
parent 303e8b0f88
commit 8fe23b780f
4 changed files with 22 additions and 9 deletions

View File

@@ -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();

View File

@@ -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); }

View File

@@ -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

View File

@@ -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