45 : flecs::
id( nullptr,
id ) { }
67 explicit operator bool()
const {
117 template <
typename Parent>
122 bool enabled()
const {
123 return !
ecs_has_id(world_, id_, flecs::Disabled);
156 template <
typename Func>
157 void each(
const Func& func)
const;
168 template <
typename Func>
169 void each(flecs::id_t
first, flecs::id_t
second,
const Func& func)
const;
181 template <
typename Func>
194 template <
typename First,
typename Func>
195 void each(
const Func& func)
const {
209 template <
typename Func>
210 void children(flecs::entity_t rel, Func&& func)
const {
214 if (id_ == flecs::Wildcard || id_ == flecs::Any) {
221 if (rel == flecs::ChildOf) {
244 template <
typename Rel,
typename Func>
260 template <
typename Func>
262 children(flecs::ChildOf, FLECS_MOV(func));
274 template <typename T, if_t< is_actual<T>::value > = 0>
278 "operation invalid for empty type");
279 return static_cast<const T*
>(
ecs_get_id(world_, id_, comp_id));
290 template <
typename T,
typename A = actual_type_t<T>,
291 if_t< flecs::is_pair<T>::value > = 0>
295 "operation invalid for empty type");
296 return static_cast<const A*
>(
ecs_get_id(world_, id_, comp_id));
305 template <
typename First,
typename Second,
typename P = pair<First, Second>,
306 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
308 return this->try_get<P>();
317 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
321 "operation invalid for empty type");
322 return static_cast<const First*
>(
332 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
334 const auto& et = enum_type<Second>(this->world_);
336 return try_get<First>(
target);
368 template<
typename Second>
372 ECS_INVALID_PARAMETER,
"pair is not a component");
374 ECS_INVALID_PARAMETER,
"type of pair is not Second");
376 "operation invalid for empty type");
377 return static_cast<const Second*
>(
388 template<
typename First,
typename Second>
390 return try_get<pair_object<First, Second>>();
402 template <typename T, if_t< is_actual<T>::value > = 0>
404 const T *r = try_get<T>();
405 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
406 "invalid get: entity does not have component (use try_get)");
418 template <
typename T,
typename A = actual_type_t<T>,
419 if_t< flecs::is_pair<T>::value > = 0>
421 const A *r = try_get<T>();
422 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
423 "invalid get: entity does not have component (use try_get)");
435 template <
typename First,
typename Second,
typename P = pair<First, Second>,
436 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
438 return this->get<P>();
449 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
451 const First *r = try_get<First>(
second);
452 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
453 "invalid get: entity does not have component (use try_get)");
465 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
466 const First&
get(Second constant)
const {
467 const auto& et = enum_type<Second>(this->world_);
469 return get<First>(
target);
478 const void*
get(flecs::id_t comp)
const {
479 const void *r =
ecs_get_id(world_, id_, comp);
480 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
481 "invalid get: entity does not have component (use try_get)");
497 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
498 "invalid get: entity does not have component (use try_get)");
536 template <typename Func, if_t< is_callable<Func>::value > = 0>
537 bool get(
const Func& func)
const;
546 template<
typename Second>
548 const Second *r = try_get_second<Second>(
first);
549 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
550 "invalid get: entity does not have component (use try_get)");
561 template<
typename First,
typename Second>
563 const Second *r = try_get<First, Second>();
564 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
565 "invalid get: entity does not have component (use try_get)");
578 template <typename T, if_t< is_actual<T>::value > = 0>
582 "operation invalid for empty type");
594 template <
typename T,
typename A = actual_type_t<T>,
595 if_t< flecs::is_pair<T>::value > = 0>
599 "operation invalid for empty type");
609 template <
typename First,
typename Second,
typename P = pair<First, Second>,
610 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
612 return this->try_get_mut<P>();
621 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
625 "operation invalid for empty type");
626 return static_cast<First*
>(
636 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
638 const auto& et = enum_type<Second>(this->world_);
640 return get_mut<First>(
target);
672 template<
typename Second>
676 ECS_INVALID_PARAMETER,
"pair is not a component");
678 ECS_INVALID_PARAMETER,
"type of pair is not Second");
680 "operation invalid for empty type");
681 return static_cast<Second*
>(
692 template<
typename First,
typename Second>
694 return get_mut<pair_object<First, Second>>();
706 template <typename T, if_t< is_actual<T>::value > = 0>
708 T* r = try_get_mut<T>();
709 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
710 "invalid get_mut: entity does not have component (use try_get_mut)");
722 template <
typename T,
typename A = actual_type_t<T>,
723 if_t< flecs::is_pair<T>::value > = 0>
725 A* r = try_get_mut<T>();
726 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
727 "invalid get_mut: entity does not have component (use try_get_mut)");
737 template <
typename First,
typename Second,
typename P = pair<First, Second>,
738 typename A = actual_type_t<P>, if_not_t< flecs::is_pair<First>::value > = 0>
740 A* r = try_get_mut<First, Second>();
741 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
742 "invalid get_mut: entity does not have component (use try_get_mut)");
752 template<typename First, typename Second, if_not_t< is_enum<Second>::value> = 0>
754 First* r = try_get_mut<First>(
second);
755 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
756 "invalid get_mut: entity does not have component (use try_get_mut)");
766 template<typename First, typename Second, if_t< is_enum<Second>::value && !std::is_same<First, Second>::value > = 0>
768 const auto& et = enum_type<Second>(this->world_);
770 return get_mut<First>(
target);
781 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
782 "invalid get_mut: entity does not have component (use try_get_mut)");
796 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
797 "invalid get_mut: entity does not have component (use try_get_mut)");
808 template<
typename Second>
810 Second *r = try_get_mut_second<Second>(
first);
811 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
812 "invalid get_mut: entity does not have component (use try_get_mut)");
823 template<
typename First,
typename Second>
825 Second *r = try_get_mut_second<First, Second>();
826 ecs_assert(r !=
nullptr, ECS_INVALID_OPERATION,
827 "invalid get_mut: entity does not have component (use try_get_mut)");
832 template<
typename Enum>
843 template<
typename First>
876 template <
typename T>
879 template <
typename First,
typename Second>
887 int32_t
depth(flecs::entity_t rel)
const {
896 template<
typename Rel>
923 bool has(flecs::id_t e)
const {
932 template <
typename T>
940 if (is_enum<T>::value) {
941 return ecs_has_pair(world_, id_, cid, flecs::Wildcard);
953 template <typename E, if_t< is_enum<E>::value > = 0>
956 auto o = enum_type<E>(world_).entity(value);
958 "Constant was not found in Enum reflection data."
959 " Did you mean to use has<E>() instead of has(E)?");
960 return ecs_has_pair(world_, id_, r, o);
969 template <
typename First,
typename Second>
980 template<typename First, typename Second, if_not_t< is_enum<Second>::value > = 0>
992 template <
typename Second>
1003 template<typename First, typename E, if_t< is_enum<E>::value && !std::is_same<First, E>::value > = 0>
1005 const auto& et = enum_type<E>(this->world_);
1006 flecs::entity_t
second = et.entity(value);
1007 return has<First>(
second);
1036 template <
typename First>
1058 template <
typename T>
1070 template <
typename First,
typename Second>
1091 template<
typename T>
1112 template <
typename First>
1123 template <
typename First,
typename Second>
1128 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 component)
Get the type info for an component.
bool ecs_children_next(ecs_iter_t *it)
Progress an iterator created with ecs_children().
ecs_iter_t ecs_each_id(const ecs_world_t *world, ecs_id_t component)
Iterate all entities with specified (component id).
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.
bool ecs_is_enabled_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if component is enabled.
bool ecs_owns_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if an entity owns a component.
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.
bool ecs_has_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if an entity has a component.
const void * ecs_get_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Get an immutable pointer to a component.
void * ecs_get_mut_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Get a mutable 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.