From 6cb050a727b6dc7017c4dd2e1c8e50afaa1fb936 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 22 Mar 2018 01:28:45 +0100 Subject: [PATCH] Ref T259, Ref T243 guess gnd flag in airspace monitor if not available --- src/blackcore/airspacemonitor.cpp | 32 ++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 155da0947..fe5e78b6e 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -1243,9 +1243,35 @@ namespace BlackCore BLACK_VERIFY_X(!callsign.isEmpty(), Q_FUNC_INFO, "empty callsign"); if (callsign.isEmpty()) { return; } - CAircraftSituation correctedSituation = situation; - const CAircraftPartsList parts = this->remoteAircraftParts(callsign); - if (!parts.isEmpty()) { correctedSituation.adjustGroundFlag(parts); } + CAircraftSituation correctedSituation(situation); + if (!correctedSituation.hasGroundElevation() && !correctedSituation.canLikelySkipNearGroundInterpolation()) + { + const CElevationPlane ep = this->findClosestElevationWithinRange(correctedSituation, correctedSituation.getDistancePerTime(1000)); + correctedSituation.setGroundElevation(ep); + } + + // do we already have ground details? + if (situation.getOnGroundDetails() == CAircraftSituation::NotSet) + { + const CClient client = this->getClientOrDefaultForCallsign(callsign); + if (client.hasCapability(CClient::FsdWithGroundFlag)) + { + // we rely on situation gnd.flag + correctedSituation.setOnGroundDetails(CAircraftSituation::InFromNetwork); + } + else if (client.hasCapability(CClient::FsdWithAircraftConfig)) + { + const CAircraftPartsList parts = this->remoteAircraftParts(callsign); + if (!parts.isEmpty()) { correctedSituation.adjustGroundFlag(parts); } + } + } + + if (situation.getOnGroundDetails() != CAircraftSituation::NotSet) + { + const bool vtol = this->isVtolAircraft(callsign); + const CLength cg = this->getCG(callsign); + correctedSituation.guessOnGround(vtol, cg); + } // list from new to old QWriteLocker lock(&m_lockSituations);