refactor: Extend aircraft model classes for MSFS24

This commit is contained in:
tzobler
2026-01-31 12:22:41 +01:00
committed by Lars Toenning
parent 527327321c
commit 2519a87680
7 changed files with 107 additions and 10 deletions

View File

@@ -42,6 +42,10 @@ namespace swift::misc::simulation
: m_modelString(model.trimmed().toUpper()), m_modelType(type)
{}
CAircraftModel::CAircraftModel(const QString &model, const QString &livery, CAircraftModel::ModelType type)
: m_modelString(model.trimmed().toUpper()), m_modelLivery(livery.trimmed().toUpper()), m_modelType(type)
{}
CAircraftModel::CAircraftModel(const QString &model, CAircraftModel::ModelType type, const CAircraftIcaoCode &icao,
const CLivery &livery)
: m_aircraftIcao(icao), m_livery(livery), m_modelString(model.trimmed().toUpper()), m_modelType(type)
@@ -241,6 +245,12 @@ namespace swift::misc::simulation
return this->getAllModelStringsAndAliases() % " " % this->getDbKeyAsStringInParentheses();
}
QString CAircraftModel::getMsfs2024ModelString()
{
m_modelString = m_modelString.trimmed().toUpper() % u" " % m_modelLivery.trimmed().toUpper();
return m_modelString;
}
bool CAircraftModel::isVtol() const { return this->getAircraftIcaoCode().isVtol(); }
QVariant CAircraftModel::propertyByIndex(swift::misc::CPropertyIndexRef index) const
@@ -588,6 +598,23 @@ namespace swift::misc::simulation
return (sim.isFG()) ? this->getSwiftLiveryString(true, false, false) : this->getSwiftLiveryString();
}
QString CAircraftModel::getShortModelString() const
{
QString shortModelString = m_modelString;
if (m_modelString.contains(m_modelLivery))
{
int lastIndex = m_modelString.lastIndexOf(m_modelLivery);
if (lastIndex != -1)
{
const QString newModelString = m_modelString.left(lastIndex);
shortModelString = newModelString;
}
}
return shortModelString;
}
DBTripleIds CAircraftModel::parseNetworkLiveryString(const QString &liveryString)
{
// "swift_m22l33a11"
@@ -770,6 +797,13 @@ namespace swift::misc::simulation
return (p.contains(path, cs));
}
bool CAircraftModel::matchesModelStringAndLivery(const QString &modelString, const QString &modelLivery,
Qt::CaseSensitivity sensitivity) const
{
return (stringCompare(modelString, m_modelString, sensitivity) &&
stringCompare(modelLivery, m_modelLivery, sensitivity));
}
bool CAircraftModel::matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const
{
return stringCompare(modelString, m_modelString, sensitivity);
@@ -1003,6 +1037,7 @@ namespace swift::misc::simulation
const QString modelName(json.value(prefix % u"name").toString());
const QString modelMode(json.value(prefix % u"mode").toString());
const QString parts(json.value(prefix % u"parts").toString());
const QString modelLivery(json.value(prefix % u"modellivery").toString());
// check for undefined to rule out 0ft values
const QJsonValue cgjv = json.value(prefix % u"cgft");
@@ -1012,6 +1047,7 @@ namespace swift::misc::simulation
const CSimulatorInfo simInfo = CSimulatorInfo::fromDatabaseJson(json, prefix);
CAircraftModel model(modelString, CAircraftModel::TypeDatabaseEntry, simInfo, modelName, modelDescription);
model.setModelStringAlias(modelStringAlias);
model.setModelLivery(modelLivery); // msfs2024
model.setModelModeAsString(modelMode);
model.setSupportedParts(parts);
model.setCG(cg);

View File

@@ -83,7 +83,8 @@ namespace swift::misc
TypeManuallySet, //!< manually set, e.g. from GUI
TypeOwnSimulatorModel, //!< represents own simulator model (AI model, model on disk)
TypeVPilotRuleBased, //!< based on a vPilot rule
TypeTerrainProbe //!< peudo aircraft used for terrain probing (FSX)
TypeTerrainProbe, //!< peudo aircraft used for terrain probing (FSX)
TypeOwnSimulatorLivery //!< represents own simulator model livery (msfs2024)
};
//! Mode, decides if a model is supposed to be used in the model set for model matching
@@ -136,6 +137,9 @@ namespace swift::misc
//! Constructor.
CAircraftModel(const QString &model, ModelType type);
//! Constructor.
CAircraftModel(const QString &model, const QString &livery, ModelType type);
//! Constructor.
CAircraftModel(const QString &model, ModelType type, const aviation::CAircraftIcaoCode &icao,
const aviation::CLivery &livery);
@@ -181,12 +185,21 @@ namespace swift::misc
//! Model key, either queried or loaded from simulator model
const QString &getModelString() const { return m_modelString; }
//! Model Livery, part of model string in MSFS 2024
const QString &getModelLivery() const { return m_modelLivery; }
//! Model string and DB key (if available)
QString getModelStringAndDbKey() const;
//! Model string
void setModelString(const QString &modelString) { m_modelString = modelString.trimmed().toUpper(); }
//! Model livery msfs2024
void setModelLivery(const QString &modelLivery) { m_modelLivery = modelLivery.trimmed().toUpper(); }
//! Model livery whitout part for lifery msfs2024
QString getShortModelString() const;
//! Model key, either queried or loaded from simulator model
const QString &getModelStringAlias() const { return m_modelStringAlias; }
@@ -196,6 +209,9 @@ namespace swift::misc
//! Get model string and aliases
QString getAllModelStringsAliasesAndDbKey() const;
//! Get model string and Livery
QString getMsfs2024ModelString();
//! Model string alias
void setModelStringAlias(const QString &alias) { m_modelStringAlias = alias.trimmed().toUpper(); }
@@ -419,6 +435,10 @@ namespace swift::misc
//! Matches model string?
bool matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const;
//! Matches model string and livery?
bool matchesModelStringAndLivery(const QString &modelString, const QString &modelLivery,
Qt::CaseSensitivity sensitivity) const;
//! Matches model string or alias?
bool matchesModelStringOrAlias(const QString &modelString, Qt::CaseSensitivity sensitivity) const;
@@ -567,11 +587,13 @@ namespace swift::misc
CSimulatorInfo m_simulator; //!< model for given simulator
CDistributor m_distributor; //!< who designed or distributed the model
QString m_modelString; //!< Simulator model key, unique
QString m_modelLivery; //!< Simulator livery (msfs2024)
QString m_modelStringAlias; //!< Simulator model key alias, unique
QString m_name; //!< Model name
QString m_description; //!< descriptive text
QString m_fileName; //!< file name
QString m_supportedParts; //!< supported parts
QString m_shortModelString; //!< cached short model string
qint64 m_fileTimestamp = -1; //!< file timestamp of originating file (if applicable)
ModelType m_modelType = TypeUnknown; //!< model string is coming representing ...?
ModelMode m_modelMode = Include; //!< model mode (include / exclude)
@@ -591,6 +613,7 @@ namespace swift::misc
SWIFT_METAMEMBER(supportedParts),
SWIFT_METAMEMBER(modelString, 0, CaseInsensitiveComparison),
SWIFT_METAMEMBER(modelStringAlias, 0, CaseInsensitiveComparison),
SWIFT_METAMEMBER(modelLivery, 0, CaseInsensitiveComparison),
SWIFT_METAMEMBER(name),
SWIFT_METAMEMBER(description, 0, DisabledForComparison),
SWIFT_METAMEMBER(fileName, 0, DisabledForComparison),

View File

@@ -901,6 +901,18 @@ namespace swift::misc::simulation
return ms;
}
QStringList CAircraftModelList::getModelStringAndLiveryList(bool sort) const
{
QStringList ms;
for (const CAircraftModel &model : *this)
{
if (!model.hasModelString()) { continue; }
ms.append(model.getModelString() + "{" + model.getModelLivery() + "}");
}
if (sort) { ms.sort(Qt::CaseInsensitive); }
return ms;
}
QSet<QString> CAircraftModelList::getModelStringSet() const
{
CSetBuilder<QString> ms;

View File

@@ -393,6 +393,9 @@ namespace swift::misc
//! Model strings
QStringList getModelStringList(bool sort = true) const;
//! Model strings and Livery codes
QStringList getModelStringAndLiveryList(bool sort = true) const;
//! Model strings as set
QSet<QString> getModelStringSet() const;

View File

@@ -406,6 +406,12 @@ namespace swift::misc
//! Get model string
const QString &getModelString() const { return m_models[CurrentModel].getModelString(); }
//! Get model Livery MSFS2024
const QString &getLiveryString() const { return m_models[CurrentModel].getModelLivery(); }
//! Get short model string (without livery msfs2024)
const QString getShortModelString() const { return m_models[CurrentModel].getShortModelString(); }
//! Set model string
void setModelString(const QString &modelString);
@@ -483,6 +489,9 @@ namespace swift::misc
//! \copydoc swift::misc::mixin::Icon::toIcon()
CIcons::IconIndex toIcon() const { return m_callsign.toIcon(); }
//! Get model type
int getModelType() const { return m_models[CurrentModel].getModelType(); }
private:
static constexpr int CurrentModel = 0; //!< m_models
static constexpr int NetworkModel = 1; //!< m_models