Ref T261, parts guessing: only use "onGround [bool]" if the gnd. value is set (and not just the default value)

This commit is contained in:
Klaus Basan
2018-05-08 06:00:14 +02:00
committed by Roland Winklmeier
parent f1bb44060e
commit ed78eb5f0b

View File

@@ -77,27 +77,27 @@ namespace BlackMisc
CAircraftParts CAircraftParts::guessedParts(const CAircraftSituation &situation, const CAircraftSituationChange &change, const CAircraftModel &model) CAircraftParts CAircraftParts::guessedParts(const CAircraftSituation &situation, const CAircraftSituationChange &change, const CAircraftModel &model)
{ {
CAircraftParts parts; CAircraftParts parts;
CAircraftEngineList engines; parts.setPartsDetails(GuessedParts);
parts.setLights(CAircraftLights::guessedLights(situation)); parts.setLights(CAircraftLights::guessedLights(situation));
QString *details = CBuildConfig::isLocalDeveloperDebugBuild() ? &parts.m_guessingDetails : nullptr; QString *details = CBuildConfig::isLocalDeveloperDebugBuild() ? &parts.m_guessingDetails : nullptr;
CAircraftEngineList engines;
const bool vtol = model.isVtol(); const bool vtol = model.isVtol();
const int engineCount = model.getEngineCount();
CSpeed guessedVRotate = CSpeed::null(); CSpeed guessedVRotate = CSpeed::null();
CLength guessedCG = model.getCG(); CLength guessedCG = model.getCG();
model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedVRotate); model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedVRotate);
// set some reasonable values if (situation.getOnGroundDetails() != CAircraftSituation::NotSetGroundDetails)
const bool isOnGround = situation.isOnGround();
const int engineCount = model.getEngineCount();
engines.initEngines(engineCount, !isOnGround || situation.isMoving());
parts.setGearDown(isOnGround);
parts.setSpoilersOut(false);
parts.setEngines(engines);
parts.setPartsDetails(GuessedParts);
if (isOnGround)
{ {
// set some reasonable values
const bool isOnGround = situation.isOnGround();
engines.initEngines(engineCount, !isOnGround || situation.isMoving());
parts.setGearDown(isOnGround);
parts.setSpoilersOut(false);
parts.setEngines(engines);
if (!change.isNull()) if (!change.isNull())
{ {
if (change.isConstDecelarating()) if (change.isConstDecelarating())
@@ -122,6 +122,16 @@ namespace BlackMisc
return parts; return parts;
} }
} }
else
{
if (details) { *details = QStringLiteral("no ground info"); }
// no idea if on ground or not
engines.initEngines(engineCount, true);
parts.setEngines(engines);
parts.setGearDown(true);
parts.setSpoilersOut(false);
}
const double pitchDeg = situation.getPitch().value(CAngleUnit::deg()); const double pitchDeg = situation.getPitch().value(CAngleUnit::deg());
const bool isLikelyTakeOffOrClimbing = change.isNull() ? pitchDeg > 20 : (change.isRotatingUp() || change.isConstAscending()); const bool isLikelyTakeOffOrClimbing = change.isNull() ? pitchDeg > 20 : (change.isRotatingUp() || change.isConstAscending());
@@ -159,7 +169,7 @@ namespace BlackMisc
{ {
if (situation.getOnGroundDetails() != CAircraftSituation::NotSetGroundDetails) if (situation.getOnGroundDetails() != CAircraftSituation::NotSetGroundDetails)
{ {
// the ground flag is not reliable and we have no ground elevation // we have no ground elevation but a ground info
if (situation.getOnGroundDetails() == CAircraftSituation::OnGroundByGuessing) if (situation.getOnGroundDetails() == CAircraftSituation::OnGroundByGuessing)
{ {
// should be OK // should be OK