From 386a0ccd5d84b3e292f0b009ece4995eadadd9a4 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 26 Nov 2019 22:49:11 +0100 Subject: [PATCH] [XPlane] Model set must not contain ACF models Discussion: see https://discordapp.com/channels/539048679160676382/539064750055751690/648974956306366499 --- src/blackmisc/simulation/aircraftmodellist.cpp | 5 +++++ src/blackmisc/simulation/aircraftmodellist.h | 3 +++ src/blackmisc/simulation/data/modelcaches.cpp | 9 +++++++++ .../simulation/xplane/aircraftmodelloaderxplane.cpp | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 9304138fb..1cbf597c2 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -947,6 +947,11 @@ namespace BlackMisc return diff; } + int CAircraftModelList::removeXPlaneFlyablePlanes() + { + return this->removeIfExcluded(); + } + int CAircraftModelList::removeByDistributor(const CDistributor &distributor) { return this->removeIf(&CAircraftModel::getDistributor, distributor); diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 2f5554177..db8a83790 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -340,6 +340,9 @@ namespace BlackMisc //! \return number of elements removed int removeIfExcluded(); + //! Remove the XPlane flyable planes + int removeXPlaneFlyablePlanes(); + //! Remove by distributor //! \return number of elements removed int removeByDistributor(const CDistributor &distributor); diff --git a/src/blackmisc/simulation/data/modelcaches.cpp b/src/blackmisc/simulation/data/modelcaches.cpp index 43d603f23..6bfc8268d 100644 --- a/src/blackmisc/simulation/data/modelcaches.cpp +++ b/src/blackmisc/simulation/data/modelcaches.cpp @@ -438,6 +438,15 @@ namespace BlackMisc Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); CAircraftModelList orderedModels(models); orderedModels.setModelType(CAircraftModel::TypeOwnSimulatorModel); // unify type + + if (simulator.isXPlane()) + { + // see https://discordapp.com/channels/539048679160676382/539064750055751690/648974956306366499 + // this solves the issue that ACF models are loaded in CSimulatorXPlane::loadCslPackages + const int removed = orderedModels.removeXPlaneFlyablePlanes(); + if (removed > 0) { CLogMessage(this).info(u"Removed %1 flyable models from XPlane model set!"); } + } + if (orderedModels.needsOrder()) { orderedModels.resetOrder(); diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index 83c04acfd..581fa64f9 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -187,7 +187,7 @@ namespace BlackMisc CAircraftModelList CAircraftModelLoaderXPlane::parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories) { - Q_UNUSED(excludeDirectories); + Q_UNUSED(excludeDirectories) if (rootDirectory.isEmpty()) { return {}; } QDir searchPath(rootDirectory, fileFilterFlyable());