Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
EditorPluginManager.hpp
1#pragma once
2
3#include <map>
4#include <set>
5#include <span>
6#include <string>
7#include <unordered_map>
8#include <variant>
9#include <vector>
10
11#include <Common/Utilities/ModuleLoading.hpp>
12#include <Editor/PluginSystem/PluginManifestData.hpp>
13#include <Editor/PluginSystem/PluginMetaData.hpp>
14#include <EngineCore/PluginSystem/IPluginManager.hpp>
15
16namespace Grindstone::Plugins {
17 class Interface;
18
19 struct LoadItem {
20 const Grindstone::Plugins::MetaData* plugin = nullptr;
21 std::variant<const MetaData::Binary*, const MetaData::AssetDirectory*> loadable;
22 };
23
25 public:
26 virtual ~EditorPluginManager();
27
28 virtual bool PreprocessPlugins() override;
29 virtual void LoadPluginsByStage(std::string_view stageName) override;
30 virtual void UnloadPluginsByStage(std::string_view stageName) override;
31 virtual std::filesystem::path GetLibraryPath(std::string_view pluginName, std::string_view libraryName) override;
32
33 const std::vector<std::filesystem::path>& GetPluginsFolders();
34 virtual void AddPluginsFolder(const std::filesystem::path& path);
35 virtual void QueueInstall(const std::filesystem::path& path);
36 virtual void QueueUninstall(const std::filesystem::path& path);
37 virtual void ProcessQueuedPluginInstallsAndUninstalls();
38
39 using Iterator = std::vector<Grindstone::Plugins::MetaData>::iterator;
40 using ConstIterator = std::vector<Grindstone::Plugins::MetaData>::const_iterator;
41
42 Iterator begin() noexcept;
43 ConstIterator begin() const noexcept;
44
45 Iterator end() noexcept;
46 ConstIterator end() const noexcept;
47
48 protected:
49 bool LoadModule(const std::filesystem::path& path);
50 void UnloadModule(const std::filesystem::path& path);
51
52 void ResolvePlugins(std::vector<Grindstone::Plugins::ManifestData>& manifestResults);
53 bool BuildLoadOrder(std::span<const std::string_view> stageOrder);
54
55 std::map<std::filesystem::path, Utilities::Modules::Handle> pluginModules;
56 std::set<std::filesystem::path> queuedInstalls{};
57 std::set<std::filesystem::path> queuedUninstalls{};
58 std::vector<Grindstone::Plugins::MetaData> resolvedPluginManifest{};
59 std::unordered_map<std::string, std::vector<LoadItem>> orderedItemsByStage;
60 std::vector<std::filesystem::path> pluginsFolders{};
61 };
62}
Definition EditorPluginManager.hpp:24
Definition IPluginManager.hpp:9
Definition Interface.hpp:56
Definition EditorPluginInterface.hpp:17
Definition EditorPluginManager.hpp:19
Definition PluginMetaData.hpp:8