#ifndef UMBRA_MODULEMANAGER_H #define UMBRA_MODULEMANAGER_H #include #include #include "Module.h" namespace ShadowEngine { class ModuleRef{ std::unique_ptr module; std::string domain; }; class ModuleManager { public: static ModuleManager *instance; std::list modules; ModuleManager(); ~ModuleManager(); void PushModule(Module *module); Module &GetModule(std::string name); template T *GetModuleByType() { for (auto &module: modules) { if (module->GetTypeId() == T::TypeId()) return dynamic_cast(module.get()); } //SH_CORE_ERROR("Can't find the module {0}", T::Type()); return nullptr; } void Init(); void Update(); void LateRender(); void Render(); void AfterFrameEnd(); }; } #endif //UMBRA_MODULEMANAGER_H