#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(&InitModule);} \ EXPORT void* protect_start() {return reinterpret_cast(&StartModule);} \ EXPORT void* protect_quit() {return reinterpret_cast(&QuitModule);} \ }\ ModuleInstance* Factory() { return static_cast(new Class()); } struct CoreCallBacks; class ModuleInstance { public: Delegate onStop; virtual ~ModuleInstance() = default; virtual void start(); void stop(); void QuitGame(); }; extern "C" { // Create module instance EXPORT void InitModule(CoreCallBacks* callbacks); // Start module instance EXPORT void StartModule(); // Stop module when core calls this EXPORT void QuitModule(); }