Add non-throwing util::ecs::get_if
This commit is contained in:
parent
1bdef9134d
commit
57fb1e8f1f
1 changed files with 39 additions and 0 deletions
|
|
@ -263,6 +263,18 @@ namespace psemek::util
|
||||||
template <typename Component>
|
template <typename Component>
|
||||||
typename Component::data const & get(handle species, handle entity) const;
|
typename Component::data const & get(handle species, handle entity) const;
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
Component * get_if(handle species);
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
Component const * get_if(handle species) const;
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
typename Component::data * get_if(handle species, handle entity);
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
typename Component::data const * get_if(handle species, handle entity) const;
|
||||||
|
|
||||||
template <typename Behavior>
|
template <typename Behavior>
|
||||||
void apply(Behavior && behavior) const;
|
void apply(Behavior && behavior) const;
|
||||||
|
|
||||||
|
|
@ -328,6 +340,33 @@ namespace psemek::util
|
||||||
return const_cast<typename Component::data const &>(const_cast<ecs *>(this)->get<Component>(species, entity));
|
return const_cast<typename Component::data const &>(const_cast<ecs *>(this)->get<Component>(species, entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
Component * ecs::get_if(handle species)
|
||||||
|
{
|
||||||
|
return species_[species]->get_species_component<Component>();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
Component const * ecs::get_if(handle species) const
|
||||||
|
{
|
||||||
|
return const_cast<typename Component::data const *>(const_cast<ecs *>(this)->get<Component>(species));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
typename Component::data * ecs::get_if(handle species, handle entity)
|
||||||
|
{
|
||||||
|
auto p = species_[species]->get_entity_component<Component>();
|
||||||
|
if (p)
|
||||||
|
return p + entity;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Component>
|
||||||
|
typename Component::data const * ecs::get_if(handle species, handle entity) const
|
||||||
|
{
|
||||||
|
return const_cast<typename Component::data const *>(const_cast<ecs *>(this)->get<Component>(species, entity));
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Behavior>
|
template <typename Behavior>
|
||||||
void ecs::apply(Behavior && behavior) const
|
void ecs::apply(Behavior && behavior) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue