mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-04 16:56:53 +08:00
refs #825, utility functions
* allow to prefer color liveries (idea: when no airline is found, a neutral livery looks better) * pick randomly among equal scores
This commit is contained in:
@@ -629,10 +629,10 @@ namespace BlackMisc
|
||||
this->m_modelString.startsWith(modelString, sensitivity);
|
||||
}
|
||||
|
||||
int CAircraftModel::calculateScore(const CAircraftModel &compareModel) const
|
||||
int CAircraftModel::calculateScore(const CAircraftModel &compareModel, bool preferColorLiveries) const
|
||||
{
|
||||
int score = this->getAircraftIcaoCode().calculateScore(compareModel.getAircraftIcaoCode());
|
||||
score += this->getLivery().calculateScore(compareModel.getLivery());
|
||||
score += this->getLivery().calculateScore(compareModel.getLivery(), preferColorLiveries);
|
||||
return 0.5 * score;
|
||||
}
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ namespace BlackMisc
|
||||
bool matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const;
|
||||
|
||||
//! Calculate score
|
||||
int calculateScore(const CAircraftModel &compareModel) const;
|
||||
int calculateScore(const CAircraftModel &compareModel, bool preferColorLiveries) const;
|
||||
|
||||
//! Validate
|
||||
BlackMisc::CStatusMessageList validate(bool withNestedObjects) const;
|
||||
|
||||
@@ -58,6 +58,16 @@ namespace BlackMisc
|
||||
return this->contains(&CAircraftModel::getCallsign, callsign);
|
||||
}
|
||||
|
||||
bool CAircraftModelList::containsCombinedType(const QString &combinedType) const
|
||||
{
|
||||
if (combinedType.isEmpty()) { return false; }
|
||||
const QString ct(combinedType.toUpper().trimmed());
|
||||
return this->containsBy([ & ](const CAircraftModel & model)
|
||||
{
|
||||
return model.getAircraftIcaoCode().getCombinedType() == ct;
|
||||
});
|
||||
}
|
||||
|
||||
bool CAircraftModelList::containsModelsWithAircraftAndAirlineDesignator(const QString &aircraftDesignator, const QString &airlineDesignator) const
|
||||
{
|
||||
return this->contains(&CAircraftModel::getAircraftIcaoCodeDesignator, aircraftDesignator, &CAircraftModel::getAirlineIcaoCodeDesignator, airlineDesignator);
|
||||
@@ -531,9 +541,12 @@ namespace BlackMisc
|
||||
ScoredModels CAircraftModelList::scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores) const
|
||||
{
|
||||
ScoredModels scoreMap;
|
||||
// prefer colors if there is no airline
|
||||
const bool hasAirlineDesignator = remoteModel.hasAirlineDesignator() && this->contains(&CAircraftModel::getAirlineIcaoCodeDesignator, remoteModel.getAirlineIcaoCodeDesignator());
|
||||
const bool preferColorLiveries = !hasAirlineDesignator;
|
||||
for (const CAircraftModel &model : *this)
|
||||
{
|
||||
const int score = model.calculateScore(remoteModel);
|
||||
const int score = model.calculateScore(remoteModel, preferColorLiveries);
|
||||
if (ignoreZeroScores && score < 1) { continue; }
|
||||
scoreMap.insertMulti(score, model);
|
||||
}
|
||||
|
||||
@@ -71,6 +71,9 @@ namespace BlackMisc
|
||||
//! Contains model for callsign
|
||||
bool containsCallsign(const BlackMisc::Aviation::CCallsign &callsign) const;
|
||||
|
||||
//! Contains given combined type
|
||||
bool containsCombinedType(const QString &combinedType) const;
|
||||
|
||||
//! Contains any model with aircraft and airline designator
|
||||
bool containsModelsWithAircraftAndAirlineDesignator(const QString &aircraftDesignator, const QString &airlineDesignator) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user