From 57fb1e8f1fa2b9ad8b6de7161954fd3a819ee2ec Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 22 Jul 2021 10:51:32 +0300 Subject: [PATCH] Add non-throwing util::ecs::get_if --- libs/util/include/psemek/util/ecs.hpp | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/libs/util/include/psemek/util/ecs.hpp b/libs/util/include/psemek/util/ecs.hpp index cd351b9d..815396dc 100644 --- a/libs/util/include/psemek/util/ecs.hpp +++ b/libs/util/include/psemek/util/ecs.hpp @@ -263,6 +263,18 @@ namespace psemek::util template typename Component::data const & get(handle species, handle entity) const; + template + Component * get_if(handle species); + + template + Component const * get_if(handle species) const; + + template + typename Component::data * get_if(handle species, handle entity); + + template + typename Component::data const * get_if(handle species, handle entity) const; + template void apply(Behavior && behavior) const; @@ -328,6 +340,33 @@ namespace psemek::util return const_cast(const_cast(this)->get(species, entity)); } + template + Component * ecs::get_if(handle species) + { + return species_[species]->get_species_component(); + } + + template + Component const * ecs::get_if(handle species) const + { + return const_cast(const_cast(this)->get(species)); + } + + template + typename Component::data * ecs::get_if(handle species, handle entity) + { + auto p = species_[species]->get_entity_component(); + if (p) + return p + entity; + return p; + } + + template + typename Component::data const * ecs::get_if(handle species, handle entity) const + { + return const_cast(const_cast(this)->get(species, entity)); + } + template void ecs::apply(Behavior && behavior) const {