From 55792e5765774182fd723e163db7ff2787f1f430 Mon Sep 17 00:00:00 2001 From: Nikita Fediuchin Date: Thu, 14 Dec 2023 16:37:57 +0200 Subject: [PATCH] Add entity component ID getter --- include/ecsm.hpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/include/ecsm.hpp b/include/ecsm.hpp index fde7267..a7bdf47 100644 --- a/include/ecsm.hpp +++ b/include/ecsm.hpp @@ -450,6 +450,49 @@ class Manager final return View(tryGet(entity, typeid(T))); } + ID getID(ID entity, type_index componentType) const + { + assert(entity); + auto entityView = entities.get(entity); + + #ifndef NDEBUG + if (entityView->components.find(componentType) == + entityView->components.end()) + { + throw runtime_error("Component is not added. (" + "name: " + string(componentType.name()) + + "entity:" + to_string(*entity) + ")"); + } + #endif + + return entityView->components.at(componentType).second; + } + template + ID getID(ID entity) const + { + static_assert(is_base_of_v, + "Must be derived from the Component class."); + return ID(getID(entity, typeid(T))); + } + + ID tryGetID(ID entity, type_index componentType) const + { + assert(entity); + auto entityView = entities.get(entity); + auto& components = entityView->components; + auto result = components.find(componentType); + if (result == components.end()) return {}; + auto& pair = result->second; + return pair.second; + } + template + ID tryGetID(ID entity) const + { + static_assert(is_base_of_v, + "Must be derived from the Component class."); + return ID(tryGetID(entity, typeid(T))); + } + uint32_t getComponentCount(ID entity) const { auto entityView = entities.get(entity);