aboutsummaryrefslogtreecommitdiff
path: root/mwe/ecs-homemade/inc/ComponentManager.h
diff options
context:
space:
mode:
authorMax-001 <80035972+Max-001@users.noreply.github.com>2024-09-25 21:08:54 +0200
committerMax-001 <80035972+Max-001@users.noreply.github.com>2024-09-25 21:08:54 +0200
commit5458abaca5f01a4d34bb55b1b44dc4fb4e9890be (patch)
treea23e35dc95c69aced7d4e16550a2b4fff8507a6c /mwe/ecs-homemade/inc/ComponentManager.h
parent918392ec503a66e369fffa3a5a49c8afccf96a62 (diff)
Made a homemade ECS
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"