aboutsummaryrefslogtreecommitdiff
path: root/mwe/ecs-homemade/inc/ComponentManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'mwe/ecs-homemade/inc/ComponentManager.h')
-rw-r--r--mwe/ecs-homemade/inc/ComponentManager.h37
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"