45 : flecs::
id( nullptr,
id ) { }
62 explicit operator bool()
const {
111 template <
typename Parent>
116 bool enabled()
const {
117 return !
ecs_has_id(world_, id_, flecs::Disabled);
150 template <
typename Func>
151 void each(
const Func& func)
const;
162 template <
typename Func>
163 void each(flecs::id_t
first, flecs::id_t
second,
const Func& func)
const;
175 template <
typename Func>
188 template <
typename First,
typename Func>
189 void each(
const Func& func)
const {
203 template <
typename Func>
204 void children(flecs::entity_t rel, Func&& func)
const {
208 if (id_ == flecs::Wildcard || id_ == flecs::Any) {
215 if (rel == flecs::ChildOf) {
238 template <
typename Rel,
typename Func>
254 template <
typename Func>
256 children(flecs::ChildOf, FLECS_MOV(func));
268 template <typename T, if_t< is_actual<T>::value > = 0>
272 "operation invalid for empty type");
273 return static_cast<const T*
>(
ecs_get_id(world_, id_, comp_id));
284 template <
typename T,
typename A = actual_type_t<T>,
285 if_t< flecs::is_pair<T>::value > = 0>
289 "operation invalid for empty type");
290 return static_cast<const A*
>(
ecs_get_id(world_, id_, comp_id));
299 template <
typename First,
typename Second,
typename P = pair<First, Second>,
300 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
302 return this->try_get<P>();
311 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
315 "operation invalid for empty type");
316 return static_cast<const First*
>(
326 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
328 const auto& et = enum_type<Second>(this->world_);
330 return try_get<First>(
target);
362 template<
typename Second>
366 ECS_INVALID_PARAMETER,
"pair is not a component");
368 ECS_INVALID_PARAMETER,
"type of pair is not Second");
370 "operation invalid for empty type");
371 return static_cast<const Second*
>(
382 template<
typename First,
typename Second>
384 return try_get<pair_object<First, Second>>();
396 template <typename T, if_t< is_actual<T>::value > = 0>
398 const T *r = try_get<T>();
399 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
400 "invalid get: entity does not have component (use try_get)");
412 template <
typename T,
typename A = actual_type_t<T>,
413 if_t< flecs::is_pair<T>::value > = 0>
415 const A *r = try_get<T>();
416 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
417 "invalid get: entity does not have component (use try_get)");
429 template <
typename First,
typename Second,
typename P = pair<First, Second>,
430 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
432 return this->get<P>();
443 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
445 const First *r = try_get<First>(
second);
446 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
447 "invalid get: entity does not have component (use try_get)");
459 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
460 const First&
get(Second constant)
const {
461 const auto& et = enum_type<Second>(this->world_);
463 return get<First>(
target);
472 const void*
get(flecs::id_t comp)
const {
473 const void *r =
ecs_get_id(world_, id_, comp);
474 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
475 "invalid get: entity does not have component (use try_get)");
491 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
492 "invalid get: entity does not have component (use try_get)");
530 template <typename Func, if_t< is_callable<Func>::value > = 0>
531 bool get(
const Func& func)
const;
540 template<
typename Second>
542 const Second *r = try_get_second<Second>(
first);
543 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
544 "invalid get: entity does not have component (use try_get)");
555 template<
typename First,
typename Second>
557 const Second *r = try_get<First, Second>();
558 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
559 "invalid get: entity does not have component (use try_get)");
572 template <typename T, if_t< is_actual<T>::value > = 0>
576 "operation invalid for empty type");
588 template <
typename T,
typename A = actual_type_t<T>,
589 if_t< flecs::is_pair<T>::value > = 0>
593 "operation invalid for empty type");
603 template <
typename First,
typename Second,
typename P = pair<First, Second>,
604 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
606 return this->try_get_mut<P>();
615 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
619 "operation invalid for empty type");
620 return static_cast<First*
>(
630 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
632 const auto& et = enum_type<Second>(this->world_);
634 return get_mut<First>(
target);
666 template<
typename Second>
670 ECS_INVALID_PARAMETER,
"pair is not a component");
672 ECS_INVALID_PARAMETER,
"type of pair is not Second");
674 "operation invalid for empty type");
675 return static_cast<Second*
>(
686 template<
typename First,
typename Second>
688 return get_mut<pair_object<First, Second>>();
700 template <typename T, if_t< is_actual<T>::value > = 0>
702 T* r = try_get_mut<T>();
703 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
704 "invalid get_mut: entity does not have component (use try_get_mut)");
716 template <
typename T,
typename A = actual_type_t<T>,
717 if_t< flecs::is_pair<T>::value > = 0>
719 A* r = try_get_mut<T>();
720 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
721 "invalid get_mut: entity does not have component (use try_get_mut)");
731 template <
typename First,
typename Second,
typename P = pair<First, Second>,
732 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
734 A* r = try_get_mut<First, Second>();
735 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
736 "invalid get_mut: entity does not have component (use try_get_mut)");
746 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
748 First* r = try_get_mut<First>(
second);
749 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
750 "invalid get_mut: entity does not have component (use try_get_mut)");
760 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
762 const auto& et = enum_type<Second>(this->world_);
764 return get_mut<First>(
target);
775 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
776 "invalid get_mut: entity does not have component (use try_get_mut)");
790 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
791 "invalid get_mut: entity does not have component (use try_get_mut)");
802 template<
typename Second>
804 Second *r = try_get_mut_second<Second>(
first);
805 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
806 "invalid get_mut: entity does not have component (use try_get_mut)");
817 template<
typename First,
typename Second>
819 Second *r = try_get_mut_second<First, Second>();
820 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
821 "invalid get_mut: entity does not have component (use try_get_mut)");
826 template<
typename Enum>
837 template<
typename First>
870 template <
typename T>
873 template <
typename First,
typename Second>
881 int32_t
depth(flecs::entity_t rel)
const {
890 template<
typename Rel>
917 bool has(flecs::id_t e)
const {
926 template <
typename T>
934 if (is_enum<T>::value) {
935 return ecs_has_pair(world_, id_, cid, flecs::Wildcard);
947 template <typename E, if_t< is_enum<E>::value > = 0>
950 auto o = enum_type<E>(world_).entity(value);
952 "Constant was not found in Enum reflection data."
953 " Did you mean to use has<E>() instead of has(E)?");
954 return ecs_has_pair(world_, id_, r, o);
963 template <
typename First,
typename Second>
974 template<typename First, typename Second, if_not_t< is_enum<Second>::value > = 0>
986 template <
typename Second>
997 template<typename First, typename E, if_t< is_enum<E>::value && !std::is_same<First, E>::value > = 0>
999 const auto& et = enum_type<E>(this->world_);
1000 flecs::entity_t
second = et.entity(value);
1001 return has<First>(
second);
1030 template <
typename First>
1052 template <
typename T>
1064 template <
typename First,
typename Second>
1085 template<
typename T>
1106 template <
typename First>
1117 template <
typename First,
typename Second>
1122 flecs::entity clone(
bool clone_value =
true, flecs::entity_t dst_id = 0)
const;
component< T > & constant(const char *name, T value)
Add constant.
#define ecs_assert(condition, error_code,...)
Assert.
const ecs_type_info_t * ecs_get_type_info(const ecs_world_t *world, ecs_id_t id)
Get the type for an id.
bool ecs_children_next(ecs_iter_t *it)
Progress an iterator created with ecs_children().
bool ecs_each_next(ecs_iter_t *it)
Progress an iterator created with ecs_each_id().
ecs_iter_t ecs_children(const ecs_world_t *world, ecs_entity_t parent)
Iterate children of parent.
ecs_iter_t ecs_each_id(const ecs_world_t *world, ecs_id_t id)
Iterate all entities with specified (component id).
bool ecs_is_enabled_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if component is enabled.
bool ecs_has_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if an entity has an id.
bool ecs_owns_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if an entity owns an id.
int32_t ecs_get_depth(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel)
Return depth for entity in tree for the specified relationship.
void * ecs_get_mut_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Get a mutable pointer to a component.
const void * ecs_get_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Get an immutable pointer to a component.
bool ecs_is_valid(const ecs_world_t *world, ecs_entity_t e)
Test whether an entity is valid.
bool ecs_is_alive(const ecs_world_t *world, ecs_entity_t e)
Test whether an entity is alive.
char * ecs_get_path_w_sep(const ecs_world_t *world, ecs_entity_t parent, ecs_entity_t child, const char *sep, const char *prefix)
Get a path identifier for an entity.
const char * ecs_get_symbol(const ecs_world_t *world, ecs_entity_t entity)
Get the symbol of an entity.
const char * ecs_get_name(const ecs_world_t *world, ecs_entity_t entity)
Get the name of an entity.
const ecs_world_t * ecs_get_world(const ecs_poly_t *poly)
Get world from poly.
Component added to enum type entities.
flecs::type type() const
Get the entity's type.
entity_view(entity_t id)
Implicit conversion from flecs::entity_t to flecs::entity_view.
int32_t depth(flecs::entity_t rel) const
Get depth for given relationship.
bool enabled() const
Test if pair is enabled.
const Second * try_get_second(flecs::entity_t first) const
Get the second part for a pair.
bool has(flecs::id_t first, flecs::id_t second) const
Check if entity has the provided pair.
First & get_mut(Second constant) const
Get a mutable pair.
T & get_mut() const
Get mutable component value.
A & get_mut() const
Get mutable component value.
flecs::string_view name() const
Return the entity name.
bool owns(flecs::id_t second) const
Check if entity owns the provided pair.
const A * try_get() const
Get a pair.
bool is_valid() const
Check if entity is valid.
flecs::string path(const char *sep="::", const char *init_sep="::") const
Return the entity path.
const void * try_get(flecs::entity_t first, flecs::entity_t second) const
Get a pair (untyped).
flecs::string_view symbol() const
Return the entity symbol.
void each(const Func &func) const
Iterate targets for a given relationship.
A & get_mut() const
Get a mutable pair.
flecs::table_range range() const
Get table range for the entity.
void * get_mut(flecs::entity_t first, flecs::entity_t second) const
Get a mutable pair (untyped).
const Second & get_second(flecs::entity_t first) const
Get the second part for a pair.
const Second & get_second() const
Get the second part for a pair.
bool owns() const
Check if entity owns the provided pair.
const T & get() const
Get component value.
bool has(E value) const
Check if entity has the provided pair.
int32_t depth() const
Get depth for given relationship.
entity_view(flecs::world_t *world, flecs::id_t id)
Wrap an existing entity id.
bool enabled(flecs::id_t id) const
Test if id is enabled.
flecs::entity target_for(flecs::entity_t relationship, flecs::id_t id) const
Get the target of a pair for a given relationship id.
bool has_second(flecs::entity_t first) const
Check if entity has the provided pair.
const First * try_get(Second constant) const
Get a pair.
Second * try_get_mut_second(flecs::entity_t first) const
Get the second part for a pair.
flecs::entity lookup(const char *path, bool search_path=false) const
Lookup an entity by name.
const First & get(Second second) const
Get a pair.
void children(Func &&func) const
Iterate children for entity.
const void * try_get(flecs::id_t comp) const
Get component value (untyped).
bool owns(flecs::id_t e) const
Check if entity owns the provided entity.
Second & get_mut_second(flecs::entity_t first) const
Get the second part for a pair.
const First & get(Second constant) const
Get a pair.
flecs::table table() const
Get the entity's table.
flecs::string path_from(flecs::entity_t parent, const char *sep="::", const char *init_sep="::") const
Return the entity path relative to a parent.
Second * get_mut_second() const
Get the second part for a pair.
bool enabled(flecs::id_t second) const
Test if pair is enabled.
bool has(Second second) const
Check if entity has the provided pair.
A * try_get_mut() const
Get mutable component value.
bool has(flecs::id_t e) const
Check if entity has the provided entity.
bool owns() const
Check if entity owns the provided component.
flecs::entity parent() const
Get parent of entity.
const First * try_get(Second second) const
Get a pair.
void * get_mut(flecs::id_t comp) const
Get mutable component value (untyped).
A * try_get_mut() const
Get a mutable pair.
void each(const Func &func) const
Iterate (component) ids of an entity.
const void * get(flecs::entity_t first, flecs::entity_t second) const
Get a pair (untyped).
bool is_alive() const
Check if entity is alive.
const A & get() const
Get a pair.
bool has() const
Check if entity has the provided component.
T * try_get_mut() const
Get mutable component value.
bool owns(flecs::id_t first, flecs::id_t second) const
Check if entity owns the provided pair.
void * try_get_mut(flecs::id_t comp) const
Get mutable component value (untyped).
void children(Func &&func) const
Iterate children for entity.
const A & get() const
Get component value.
Enum get_constant() const
Get enum constant for enum relationship.
First & get_mut(Second second) const
Get a mutable pair.
Second * try_get_mut_second() const
Get the second part for a pair.
void * try_get_mut(flecs::entity_t first, flecs::entity_t second) const
Get a mutable pair (untyped).
First * try_get_mut(Second second) const
Get a mutable pair.
entity_t id() const
Get entity id.
flecs::entity target(int32_t index=0) const
Get target for a given pair.
const T * try_get() const
Get component value.
const void * get(flecs::id_t comp) const
Get component value (untyped).
bool has() const
Check if entity has the provided pair.
flecs::string path_from(const char *sep="::", const char *init_sep="::") const
Return the entity path relative to a parent.
First * try_get_mut(Second constant) const
Get a mutable pair.
bool enabled() const
Test if component is enabled.
const Second * try_get_second() const
Get the second part for a pair.
void children(flecs::entity_t rel, Func &&func) const
Iterate children for entity.
flecs::entity mut(const flecs::world &stage) const
Return mutable entity handle for current stage When an entity handle created from the world is used w...
bool has(E value) const
Check if entity has the provided enum constant.
bool enabled(flecs::id_t first, flecs::id_t second) const
Test if pair is enabled.
const A * try_get() const
Get component value.
Class that wraps around a flecs::id_t.
flecs::entity second() const
Get second element from a pair.
flecs::entity first() const
Get first element from a pair.
Class for iterating over query results.