14 const char *name, int32_t count = 0,
size_t offset = SIZE_MAX)
28 int32_t count = 0,
size_t offset = SIZE_MAX)
30 return member(type_id, 0, name, count, offset);
33template <
typename MemberType,
typename UnitType =
void>
34untyped_component& member(
const char *name, int32_t count = 0,
size_t offset = SIZE_MAX) {
36 if constexpr (!std::is_void_v<UnitType>) {
37 unit = _::type<UnitType>::id(world_);
39 return member(_::type<MemberType>::id(world_), unit, name, count, offset);
42template <
typename MemberType>
44 int32_t count = 0,
size_t offset = SIZE_MAX)
46 return member(_::type<MemberType>::id(world_), unit, name, count, offset);
49template <
typename MemberType,
typename ComponentType,
50 typename RealType = std::remove_extent_t<MemberType>>
51untyped_component& member(
const MemberType ComponentType::*ptr,
54 size_t offset =
reinterpret_cast<size_t>(&(
static_cast<ComponentType*
>(
nullptr)->*ptr));
55 return member(_::type<RealType>::id(world_), unit, name, std::extent<MemberType>::value, offset);
58template <
typename UnitType,
typename MemberType,
typename ComponentType,
59 typename RealType = std::remove_extent_t<MemberType>>
60untyped_component& member(
const MemberType ComponentType::*ptr,
const char *name) {
61 return member<MemberType, ComponentType, RealType>(ptr, name, _::type<UnitType>::id(world_));
65template <
typename T =
int32_t>
86template <
typename T = u
int32_t>
107template <
typename Elem>
114 desc.
count = elem_count;
120 return set_member_range<&flecs::member_t::range, &flecs::MemberRanges::value>(min, max);
123untyped_component& warning_range(
double min,
double max) {
124 return set_member_range<&flecs::member_t::warning_range, &flecs::MemberRanges::warning>(min, max);
127untyped_component& error_range(
double min,
double max) {
128 return set_member_range<&flecs::member_t::error_range, &flecs::MemberRanges::error>(min, max);
132 template <auto MemberRange, auto EntityRange>
133 untyped_component& set_member_range(
double min,
double max) {
136 member->*MemberRange = {min, max};
137 auto member_entity = member->member;
139 auto id = _::type<flecs::MemberRanges>::id(world_);
140 auto ranges =
static_cast<flecs::MemberRanges*
>(
141 ecs_ensure_id(world_, member_entity,
id,
sizeof(flecs::MemberRanges)));
142 ranges->*EntityRange = {min, max};
FLECS_API ecs_member_t * ecs_cpp_last_member(const ecs_world_t *world, ecs_entity_t type)
Get the last registered member for a type.
void ecs_add_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Add a (component) ID to an entity.
#define ecs_assert(condition, error_code,...)
Assert.
#define ECS_INTERNAL_ERROR
Internal error code.
ecs_id_t ecs_entity_t
An entity identifier.
ecs_entity_t entity_t
Entity type.
ecs_entity_t ecs_entity_init(ecs_world_t *world, const ecs_entity_desc_t *desc)
Find or create an entity.
void ecs_modified_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Signal that a component has been modified.
void * ecs_ensure_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component, size_t size)
Ensure an entity has a component and return a pointer.
void ecs_set_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component, size_t size, const void *ptr)
Set the value of a component.
Used with ecs_array_init().
ecs_entity_t entity
Existing entity to use for type (optional).
ecs_entity_t type
Element type.
int32_t count
Number of elements.
Used with ecs_entity_init().
const char * name
Name of the entity.
ecs_entity_t parent
Parent entity.
Element type of members vector in EcsStruct.
const char * name
Must be set when used with ecs_struct_desc_t.
bool use_offset
Set to true to prevent automatic offset computation.
ecs_entity_t type
Member type.
int32_t offset
May be set when used with ecs_struct_desc_t.
ecs_entity_t unit
May be set when used with ecs_struct_desc_t.
int32_t count
Element count (for inline arrays).
const Self & unit(const char *symbol, flecs::entity_t prefix=0, flecs::entity_t base=0, flecs::entity_t over=0, int32_t factor=0, int32_t power=0) const
Make an entity a unit.
flecs::string_view name() const
Return the entity name.
flecs::id_t id_
The raw ID value.
flecs::world_t * world_
World is optional, but guarantees that entity identifiers extracted from the ID are valid.
untyped_component()
Default constructor.