diff options
Diffstat (limited to 'mwe/ecs-homemade/inc/ComponentManager.h')
-rw-r--r-- | mwe/ecs-homemade/inc/ComponentManager.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/mwe/ecs-homemade/inc/ComponentManager.h b/mwe/ecs-homemade/inc/ComponentManager.h new file mode 100644 index 0000000..cfc5f20 --- /dev/null +++ b/mwe/ecs-homemade/inc/ComponentManager.h @@ -0,0 +1,37 @@ +#pragma once + +#include "Components.h" +#include <cstdint> +#include <unordered_map> +#include <vector> +#include <typeindex> +#include <memory> +#include <any> + +class ComponentManager { +public: + static ComponentManager& GetInstance(); + + ComponentManager(const ComponentManager&) = delete; + ComponentManager(ComponentManager&&) = delete; + ComponentManager& operator=(const ComponentManager&) = delete; + ComponentManager& operator=(ComponentManager&&) = delete; + + template <typename T> + void AddComponent(T* component, std::uint32_t id); + template <typename T> + T* GetComponent(std::uint32_t id); + template <typename T> + std::vector<std::uint32_t> GetAllComponentIDs(); + template <typename T> + std::vector<T*> GetAllComponentPointer(); + +private: + static ComponentManager mInstance; + + ComponentManager(); + + std::unordered_map<std::type_index, std::vector<Component*>> mComponents; //TODO: Make this not only work with Component* OR add extra checks at templated methodes!!! +}; + +#include "ComponentManager.hpp" |