From ec3601fbc17a38a44608a04f53d4e36c1bff8c96 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 13 Nov 2024 12:12:26 +0100 Subject: re-enable loop manager + remove more singletons --- src/crepe/api/LoopManager.hpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/crepe/api/LoopManager.hpp (limited to 'src/crepe/api/LoopManager.hpp') diff --git a/src/crepe/api/LoopManager.hpp b/src/crepe/api/LoopManager.hpp new file mode 100644 index 0000000..20e8d1c --- /dev/null +++ b/src/crepe/api/LoopManager.hpp @@ -0,0 +1,38 @@ +#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 -- cgit v1.2.3