Polyphase Game Engine
Loading...
Searching...
No Matches
RuntimePluginManager.h
Go to the documentation of this file.
1#pragma once
2
12#include "PolyphasePluginAPI.h"
13#include "PolyphaseEngineAPI.h"
14
15#include <vector>
16#include <string>
17
22{
23 std::string mPluginId;
25 bool mLoaded = false;
26};
27
35{
36public:
37 static void Create();
38 static void Destroy();
39 static RuntimePluginManager* Get();
40
46 void Initialize();
47
53 void Shutdown();
54
63 void RegisterPlugin(const PolyphasePluginDesc& desc, const std::string& pluginId);
64
72 void TickAllPlugins(float deltaTime);
73
77 PolyphaseEngineAPI* GetEngineAPI() { return &mEngineAPI; }
78
82 bool IsRegistered(const std::string& pluginId) const;
83
87 size_t GetPluginCount() const { return mPlugins.size(); }
88
89private:
90 static RuntimePluginManager* sInstance;
93
94 void InitializeEngineAPI();
95
96 std::vector<RuntimePluginState> mPlugins;
97 PolyphaseEngineAPI mEngineAPI;
98 bool mInitialized = false;
99};
100
110void QueuePluginRegistration(int (*getDescFunc)(PolyphasePluginDesc*), const char* pluginId);
111
120#define POLYPHASE_REGISTER_PLUGIN(pluginId, getDescFunc) \
121 namespace { \
122 struct PluginRegistrar_##pluginId { \
123 PluginRegistrar_##pluginId() { \
124 QueuePluginRegistration(getDescFunc, #pluginId); \
125 } \
126 }; \
127 static PluginRegistrar_##pluginId sRegistrar_##pluginId; \
128 }
Engine API exposed to native addon plugins.
Stable C ABI header for native addon plugins.
void QueuePluginRegistration(int(*getDescFunc)(PolyphasePluginDesc *), const char *pluginId)
Queue a plugin descriptor for registration.
Definition RuntimePluginManager.cpp:31
Singleton manager for runtime plugins.
Definition RuntimePluginManager.h:35
bool IsRegistered(const std::string &pluginId) const
Check if a plugin is registered.
Definition RuntimePluginManager.cpp:721
PolyphaseEngineAPI * GetEngineAPI()
Get the engine API struct for plugins.
Definition RuntimePluginManager.h:77
static void Destroy()
Definition RuntimePluginManager.cpp:486
static RuntimePluginManager * Get()
Definition RuntimePluginManager.cpp:495
void TickAllPlugins(float deltaTime)
Tick all loaded plugins.
Definition RuntimePluginManager.cpp:710
void RegisterPlugin(const PolyphasePluginDesc &desc, const std::string &pluginId)
Register a plugin descriptor.
Definition RuntimePluginManager.cpp:688
static void Create()
Definition RuntimePluginManager.cpp:460
size_t GetPluginCount() const
Get number of registered plugins.
Definition RuntimePluginManager.h:87
void Initialize()
Initialize the engine API and call OnLoad for all registered plugins.
Definition RuntimePluginManager.cpp:627
void Shutdown()
Shutdown all plugins (calls OnUnload).
Definition RuntimePluginManager.cpp:665
Engine API provided to plugins during OnLoad.
Definition PolyphaseEngineAPI.h:32
Plugin descriptor returned by PolyphasePlugin_GetDesc.
Definition PolyphasePluginAPI.h:46
Runtime state for a registered plugin.
Definition RuntimePluginManager.h:22
bool mLoaded
Definition RuntimePluginManager.h:25
PolyphasePluginDesc mDesc
Definition RuntimePluginManager.h:24
std::string mPluginId
Definition RuntimePluginManager.h:23