mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-23 13:55:36 +08:00
Working model loader for AI aircrafts
This commit is contained in:
committed by
Mat Sutcliffe
parent
fd9712caea
commit
5e65420739
@@ -11,8 +11,12 @@ namespace BlackMisc{
|
|||||||
}
|
}
|
||||||
|
|
||||||
AircraftModelLoaderFlightgear::AircraftModelLoaderFlightgear(QObject *parent) : Simulation::IAircraftModelLoader (Simulation::CSimulatorInfo::fg(), parent)
|
AircraftModelLoaderFlightgear::AircraftModelLoaderFlightgear(QObject *parent) : Simulation::IAircraftModelLoader (Simulation::CSimulatorInfo::fg(), parent)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
AircraftModelLoaderFlightgear::~AircraftModelLoaderFlightgear()
|
||||||
{
|
{
|
||||||
std::cout << "Test";
|
// that should be safe as long as the worker uses deleteLater (which it does)
|
||||||
|
if (m_parserWorker) { m_parserWorker->waitForFinished(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
void AircraftModelLoaderFlightgear::updateInstalledModels(const CAircraftModelList &models)
|
void AircraftModelLoaderFlightgear::updateInstalledModels(const CAircraftModelList &models)
|
||||||
@@ -32,22 +36,25 @@ namespace BlackMisc{
|
|||||||
QDir searchPath(rootDirectory, fileFilterFlyable());
|
QDir searchPath(rootDirectory, fileFilterFlyable());
|
||||||
QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
|
QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
while (aircraftIt.hasNext()) {
|
while (aircraftIt.hasNext()) {
|
||||||
aircraftIt.next();
|
aircraftIt.next();
|
||||||
if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; }
|
if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; }
|
||||||
|
i++;
|
||||||
Simulation::CAircraftModel model;
|
Simulation::CAircraftModel model;
|
||||||
model.setAircraftIcaoCode(QString::fromStdString("A320"));
|
model.setAircraftIcaoCode(QString::fromStdString("A320"));
|
||||||
model.setDescription(QString::fromStdString("Flyable"));
|
model.setDescription(QString::fromStdString("Flyable"));
|
||||||
model.setName(QString::fromStdString("ModelName"));
|
model.setName(aircraftIt.fileName());
|
||||||
|
model.setModelString(QString::fromStdString(std::to_string(i)));
|
||||||
|
//model.setModelString(aircraftIt.filePath() + aircraftIt.fileName());
|
||||||
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
||||||
model.setSimulator(CSimulatorInfo::fg());
|
model.setSimulator(CSimulatorInfo::fg());
|
||||||
|
//model.setCG(PhysicalQuantities::CLength());
|
||||||
model.setFileDetailsAndTimestamp(aircraftIt.fileInfo());
|
model.setFileDetailsAndTimestamp(aircraftIt.fileInfo());
|
||||||
model.setModelMode(CAircraftModel::Include);
|
model.setModelMode(CAircraftModel::Include);
|
||||||
|
|
||||||
addUniqueModel(model,installedModels);
|
addUniqueModel(model,installedModels);
|
||||||
|
//TODO Add livery adding
|
||||||
}
|
}
|
||||||
|
|
||||||
return installedModels;
|
return installedModels;
|
||||||
@@ -74,6 +81,9 @@ namespace BlackMisc{
|
|||||||
model.setAircraftIcaoCode(QString::fromStdString("A320"));
|
model.setAircraftIcaoCode(QString::fromStdString("A320"));
|
||||||
model.setDescription(QString::fromStdString("AI"));
|
model.setDescription(QString::fromStdString("AI"));
|
||||||
model.setName(QString::fromStdString("ModelName"));
|
model.setName(QString::fromStdString("ModelName"));
|
||||||
|
std::string modelString = aircraftIt.filePath().toStdString();
|
||||||
|
modelString = modelString.substr(modelString.find("Aircraft"));
|
||||||
|
model.setModelString(QString::fromStdString(modelString));
|
||||||
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
|
||||||
model.setSimulator(CSimulatorInfo::fg());
|
model.setSimulator(CSimulatorInfo::fg());
|
||||||
model.setFileDetailsAndTimestamp(aircraftIt.fileInfo());
|
model.setFileDetailsAndTimestamp(aircraftIt.fileInfo());
|
||||||
@@ -112,7 +122,7 @@ namespace BlackMisc{
|
|||||||
{
|
{
|
||||||
//TODO Make paths variable
|
//TODO Make paths variable
|
||||||
allModels.push_back(parseAIAirplanes("X:/Flightsim/Flightgear/2018.3/data/AI/Aircraft", excludeDirectories));
|
allModels.push_back(parseAIAirplanes("X:/Flightsim/Flightgear/2018.3/data/AI/Aircraft", excludeDirectories));
|
||||||
allModels.push_back(parseFlyableAirplanes("X:/Flightsim/Flightgear/2018.3/data/Aircraft", excludeDirectories));
|
//allModels.push_back(parseFlyableAirplanes("X:/Flightsim/Flightgear/2018.3/data/Aircraft", excludeDirectories));
|
||||||
}
|
}
|
||||||
|
|
||||||
return allModels;
|
return allModels;
|
||||||
@@ -124,6 +134,8 @@ namespace BlackMisc{
|
|||||||
const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);
|
const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);
|
||||||
const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy
|
const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy
|
||||||
|
|
||||||
|
|
||||||
|
if(mode.testFlag(LoadInBackground)){
|
||||||
if (m_parserWorker && !m_parserWorker->isFinished()){ return; }
|
if (m_parserWorker && !m_parserWorker->isFinished()){ return; }
|
||||||
emit this->diskLoadingStarted(simulator, mode);
|
emit this->diskLoadingStarted(simulator, mode);
|
||||||
|
|
||||||
@@ -140,6 +152,12 @@ namespace BlackMisc{
|
|||||||
m_loadingMessages.freezeOrder();
|
m_loadingMessages.freezeOrder();
|
||||||
emit this->loadingFinished(m_loadingMessages, simulator, ParsedData);
|
emit this->loadingFinished(m_loadingMessages, simulator, ParsedData);
|
||||||
});
|
});
|
||||||
|
} else if (mode.testFlag(LoadDirectly)){
|
||||||
|
emit this->diskLoadingStarted(simulator, mode);
|
||||||
|
CAircraftModelList models(this->performParsing(modelDirs, excludedDirectoryPatterns));
|
||||||
|
this->updateInstalledModels(models);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,25 @@ namespace BlackMisc{
|
|||||||
namespace Simulation {
|
namespace Simulation {
|
||||||
namespace Flightgear {
|
namespace Flightgear {
|
||||||
class AircraftModelLoaderFlightgear : public Simulation::IAircraftModelLoader{
|
class AircraftModelLoaderFlightgear : public Simulation::IAircraftModelLoader{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
// IAircraftModelLoader interface
|
// IAircraftModelLoader interface
|
||||||
public:
|
public:
|
||||||
bool isLoadingFinished() const;
|
|
||||||
|
|
||||||
|
//Constructor
|
||||||
AircraftModelLoaderFlightgear(QObject *parent = nullptr);
|
AircraftModelLoaderFlightgear(QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Parsed or injected models
|
virtual ~AircraftModelLoaderFlightgear() override;
|
||||||
|
|
||||||
|
// Interface functions
|
||||||
|
// Parsed or injected models
|
||||||
void updateInstalledModels(const CAircraftModelList &models);
|
void updateInstalledModels(const CAircraftModelList &models);
|
||||||
|
bool isLoadingFinished() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Interface functions
|
||||||
|
void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories);
|
Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories);
|
||||||
@@ -24,8 +34,7 @@ namespace BlackMisc{
|
|||||||
QPointer<CWorker> m_parserWorker;
|
QPointer<CWorker> m_parserWorker;
|
||||||
CAircraftModelList performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories);
|
CAircraftModelList performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories);
|
||||||
|
|
||||||
protected:
|
|
||||||
void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user