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.hpp | |
parent | 918392ec503a66e369fffa3a5a49c8afccf96a62 (diff) |
Made a homemade ECS
Diffstat (limited to 'mwe/ecs-homemade/inc/ComponentManager.hpp')
-rw-r--r-- | mwe/ecs-homemade/inc/ComponentManager.hpp | 58 |
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; +} |