2024-02-25 23:47:17 -08:00
|
|
|
#include "plugin.hpp"
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
|
|
#include <qvector.h> // NOLINT (what??)
|
|
|
|
|
|
2024-04-06 02:19:40 -07:00
|
|
|
#include "generation.hpp"
|
|
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
static QVector<QsEnginePlugin*> plugins; // NOLINT
|
2024-02-25 23:47:17 -08:00
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
void QsEnginePlugin::registerPlugin(QsEnginePlugin& plugin) { plugins.push_back(&plugin); }
|
2024-02-25 23:47:17 -08:00
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
void QsEnginePlugin::initPlugins() {
|
2025-01-07 03:11:19 -08:00
|
|
|
plugins.removeIf([](QsEnginePlugin* plugin) { return !plugin->applies(); });
|
|
|
|
|
|
|
|
|
|
std::ranges::sort(plugins, [](QsEnginePlugin* a, QsEnginePlugin* b) {
|
2024-10-31 01:28:06 -07:00
|
|
|
return b->dependencies().contains(a->name());
|
|
|
|
|
});
|
|
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
for (QsEnginePlugin* plugin: plugins) {
|
2024-02-25 23:47:17 -08:00
|
|
|
plugin->init();
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
for (QsEnginePlugin* plugin: plugins) {
|
2024-02-25 23:47:17 -08:00
|
|
|
plugin->registerTypes();
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-03 23:17:15 -08:00
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
void QsEnginePlugin::runConstructGeneration(EngineGeneration& generation) {
|
|
|
|
|
for (QsEnginePlugin* plugin: plugins) {
|
2024-04-06 02:19:40 -07:00
|
|
|
plugin->constructGeneration(generation);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-22 18:59:15 -08:00
|
|
|
void QsEnginePlugin::runOnReload() {
|
|
|
|
|
for (QsEnginePlugin* plugin: plugins) {
|
2024-03-03 23:17:15 -08:00
|
|
|
plugin->onReload();
|
|
|
|
|
}
|
|
|
|
|
}
|