Files
UwU-Engine/ModuleLib/ModuleInstance.h
T

56 lines
1.2 KiB
C++

#pragma once
#include "Delegate/Delegate.h"
#ifdef _WIN32
#define EXPORT __declspec(dllexport)
#elif __linux__
#define EXPORT
#else
#error message("Unknow platform")
#endif
/*
* This macro protects
* module callbacks from GB
*/
#define PROTECTION_FROM_GB(Class) \
extern "C" {\
EXPORT void* protect_init() {return reinterpret_cast<void*>(&InitModule);} \
EXPORT void* protect_start() {return reinterpret_cast<void*>(&StartModule);} \
EXPORT void* protect_stop() {return reinterpret_cast<void*>(&StopModule);} \
EXPORT void* protect_quit() {return reinterpret_cast<void*>(&QuitModule);} \
}\
ModuleInstance* Factory(CoreInstance& core) { return static_cast<ModuleInstance*>(new Class(core)); }
class CoreInstance;
class ModuleInstance {
CoreInstance& core_;
public:
Delegate<void> onStop;
ModuleInstance(CoreInstance& core);
virtual ~ModuleInstance() = default;
CoreInstance& getCore() const { return core_; }
virtual void start();
void stop();
};
extern "C" {
// Create module instance
EXPORT void InitModule(CoreInstance& core);
// Start module instance
EXPORT void StartModule();
// Destroy module instance when core unloads there
EXPORT void StopModule();
// Stop module when core calls this
EXPORT void QuitModule();
}