diff options
author | Max-001 <80035972+Max-001@users.noreply.github.com> | 2024-09-25 21:08:54 +0200 |
---|---|---|
committer | Max-001 <80035972+Max-001@users.noreply.github.com> | 2024-09-25 21:08:54 +0200 |
commit | 5458abaca5f01a4d34bb55b1b44dc4fb4e9890be (patch) | |
tree | a23e35dc95c69aced7d4e16550a2b4fff8507a6c /mwe/ecs-homemade/inc/ComponentManager.h | |
parent | 918392ec503a66e369fffa3a5a49c8afccf96a62 (diff) |
Made a homemade ECS
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" |