aboutsummaryrefslogtreecommitdiff
path: root/mwe/ecs-homemade/inc/ComponentManager.hpp
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.hpp
parent918392ec503a66e369fffa3a5a49c8afccf96a62 (diff)
Made a homemade ECS
Diffstat (limited to 'mwe/ecs-homemade/inc/ComponentManager.hpp')
-rw-r--r--mwe/ecs-homemade/inc/ComponentManager.hpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/mwe/ecs-homemade/inc/ComponentManager.hpp b/mwe/ecs-homemade/inc/ComponentManager.hpp
new file mode 100644
index 0000000..df8ea32
--- /dev/null
+++ b/mwe/ecs-homemade/inc/ComponentManager.hpp
@@ -0,0 +1,58 @@
+// AddComponent implementation
+template <typename T>
+void ComponentManager::AddComponent(T* component, std::uint32_t id) {
+ std::type_index type = typeid(T);
+ if (mComponents.find(type) == mComponents.end()) {
+ mComponents[type] = std::vector<Component*>();
+ }
+ // Resize the vector if the id is greater than current size
+ if (id >= mComponents[type].size()) {
+ mComponents[type].resize(id + 1, nullptr); // Initialize new slots to nullptr
+ }
+ mComponents[type][id] = component; // Store the raw pointer
+}
+
+// GetComponent implementation
+template <typename T>
+T* ComponentManager::GetComponent(std::uint32_t id) {
+ std::type_index type = typeid(T);
+ if (mComponents.find(type) != mComponents.end()) {
+ auto& componentArray = mComponents[type];
+ if (id < componentArray.size()) {
+ return static_cast<T*>(componentArray[id]); // Cast to the correct type
+ }
+ }
+ return nullptr; // Return nullptr if not found
+}
+
+// GetAllComponentIDs implementation
+template <typename T>
+std::vector<std::uint32_t> ComponentManager::GetAllComponentIDs() {
+ std::type_index type = typeid(T);
+ std::vector<std::uint32_t> ids;
+ if (mComponents.find(type) != mComponents.end()) {
+ const auto& componentArray = mComponents[type];
+ for (std::uint32_t id = 0; id < componentArray.size(); ++id) {
+ if (componentArray[id] != nullptr) {
+ ids.push_back(id); // Collect IDs of non-null components
+ }
+ }
+ }
+ return ids;
+}
+
+// GetAllComponentPointer implementation
+template <typename T>
+std::vector<T*> ComponentManager::GetAllComponentPointer() {
+ std::type_index type = typeid(T);
+ std::vector<T*> pointers;
+ if (mComponents.find(type) != mComponents.end()) {
+ const auto& componentArray = mComponents[type];
+ for (const auto& component : componentArray) {
+ if (component != nullptr) {
+ pointers.push_back(static_cast<T*>(component)); // Cast to the correct type
+ }
+ }
+ }
+ return pointers;
+}