Grindstone Game Engine
v0.2.0
An open source game engine and toolkit.
Toggle main menu visibility
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
16
namespace
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
24
class
EditorPluginManager
:
public
IPluginManager
{
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
}
Grindstone::Plugins::EditorPluginManager
Definition
EditorPluginManager.hpp:24
Grindstone::Plugins::IPluginManager
Definition
IPluginManager.hpp:9
Grindstone::Plugins::Interface
Definition
Interface.hpp:56
Grindstone::Plugins
Definition
EditorPluginInterface.hpp:17
Grindstone::Plugins::LoadItem
Definition
EditorPluginManager.hpp:19
Grindstone::Plugins::MetaData
Definition
PluginMetaData.hpp:8
sources
code
Editor
PluginSystem
EditorPluginManager.hpp
Generated by
1.18.0