#pragma once #include #include #include "../system/System.h" #include "../Exception.h" #include "LoopManager.h" namespace crepe { template T & LoopManager::get_system() { using namespace std; static_assert(is_base_of::value, "get_system must recieve a derivative class of System"); const type_info & type = typeid(T); if (!this->systems.contains(type)) throw Exception("LoopManager: %s is not initialized", type.name()); System * system = this->systems.at(type).get(); T * concrete_system = dynamic_cast(system); assert(concrete_system != nullptr); return *concrete_system; } template void LoopManager::load_system() { using namespace std; static_assert(is_base_of::value, "load_system must recieve a derivative class of System"); System * system = new T(this->component_manager); this->systems[typeid(T)] = unique_ptr(system); } } // namespace crepe