34#define FLECS_VERSION_MAJOR 4
35#define FLECS_VERSION_MINOR 1
36#define FLECS_VERSION_PATCH 5
39#define FLECS_VERSION FLECS_VERSION_IMPL(\
40 FLECS_VERSION_MAJOR, FLECS_VERSION_MINOR, FLECS_VERSION_PATCH)
45#ifdef FLECS_CONFIG_HEADER
46#include "flecs_config.h"
52#define ecs_float_t float
59#define ecs_ftime_t ecs_float_t
78#if defined(FLECS_DEBUG) && defined(FLECS_NDEBUG)
79#warning "invalid configuration: cannot both define FLECS_DEBUG and FLECS_NDEBUG"
81#if defined(FLECS_DEBUG) && defined(NDEBUG)
82#warning "invalid configuration: cannot both define FLECS_DEBUG and NDEBUG"
89#if !defined(FLECS_DEBUG) && !defined(FLECS_NDEBUG)
112#ifndef FLECS_DEBUG_INFO
113#define FLECS_DEBUG_INFO
219#ifndef FLECS_CUSTOM_BUILD
232#define FLECS_OS_API_IMPL
234#define FLECS_PIPELINE
237#define FLECS_QUERY_DSL
250#ifdef FLECS_LOW_FOOTPRINT
251#define FLECS_HI_COMPONENT_ID 16
252#define FLECS_HI_ID_RECORD_ID 16
253#define FLECS_ENTITY_PAGE_BITS 6
254#define FLECS_USE_OS_ALLOC
255#define FLECS_DEFAULT_TO_UNCACHED_QUERIES
272#ifndef FLECS_HI_COMPONENT_ID
273#define FLECS_HI_COMPONENT_ID 256
282#ifndef FLECS_HI_ID_RECORD_ID
283#define FLECS_HI_ID_RECORD_ID 1024
291#ifndef FLECS_SPARSE_PAGE_BITS
292#define FLECS_SPARSE_PAGE_BITS 6
297#ifndef FLECS_ENTITY_PAGE_BITS
298#define FLECS_ENTITY_PAGE_BITS 10
309#ifndef FLECS_ID_DESC_MAX
310#define FLECS_ID_DESC_MAX 32
315#ifndef FLECS_EVENT_DESC_MAX
316#define FLECS_EVENT_DESC_MAX 8
321#define FLECS_VARIABLE_COUNT_MAX 64
325#ifndef FLECS_TERM_COUNT_MAX
326#define FLECS_TERM_COUNT_MAX 32
331#ifndef FLECS_TERM_ARG_COUNT_MAX
332#define FLECS_TERM_ARG_COUNT_MAX 16
337#ifndef FLECS_QUERY_VARIABLE_COUNT_MAX
338#define FLECS_QUERY_VARIABLE_COUNT_MAX 64
343#ifndef FLECS_QUERY_SCOPE_NESTING_MAX
344#define FLECS_QUERY_SCOPE_NESTING_MAX 8
351#ifndef FLECS_DAG_DEPTH_MAX
352#define FLECS_DAG_DEPTH_MAX 128
359#define FLECS_TREE_SPAWNER_DEPTH_CACHE_SIZE (6)
363#include "flecs/private/api_defines.h"
531#include "flecs/datastructures/vec.h"
532#include "flecs/datastructures/sparse.h"
533#include "flecs/datastructures/block_allocator.h"
534#include "flecs/datastructures/stack_allocator.h"
535#include "flecs/datastructures/map.h"
536#include "flecs/datastructures/allocator.h"
537#include "flecs/datastructures/strbuf.h"
624typedef void* (*ecs_group_create_action_t)(
738#define EcsSelf (1llu << 63)
744#define EcsUp (1llu << 62)
750#define EcsTrav (1llu << 61)
756#define EcsCascade (1llu << 60)
762#define EcsDesc (1llu << 59)
768#define EcsIsVariable (1llu << 58)
774#define EcsIsEntity (1llu << 57)
780#define EcsIsName (1llu << 56)
786#define EcsTraverseFlags (EcsSelf|EcsUp|EcsTrav|EcsCascade|EcsDesc)
792#define EcsTermRefFlags (EcsTraverseFlags|EcsIsVariable|EcsIsEntity|EcsIsName)
909#define ECS_TYPE_HOOK_CTOR ECS_CAST(ecs_flags32_t, 1 << 0)
910#define ECS_TYPE_HOOK_DTOR ECS_CAST(ecs_flags32_t, 1 << 1)
911#define ECS_TYPE_HOOK_COPY ECS_CAST(ecs_flags32_t, 1 << 2)
912#define ECS_TYPE_HOOK_MOVE ECS_CAST(ecs_flags32_t, 1 << 3)
913#define ECS_TYPE_HOOK_COPY_CTOR ECS_CAST(ecs_flags32_t, 1 << 4)
914#define ECS_TYPE_HOOK_MOVE_CTOR ECS_CAST(ecs_flags32_t, 1 << 5)
915#define ECS_TYPE_HOOK_CTOR_MOVE_DTOR ECS_CAST(ecs_flags32_t, 1 << 6)
916#define ECS_TYPE_HOOK_MOVE_DTOR ECS_CAST(ecs_flags32_t, 1 << 7)
917#define ECS_TYPE_HOOK_CMP ECS_CAST(ecs_flags32_t, 1 << 8)
918#define ECS_TYPE_HOOK_EQUALS ECS_CAST(ecs_flags32_t, 1 << 9)
922#define ECS_TYPE_HOOK_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 10)
923#define ECS_TYPE_HOOK_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 12)
924#define ECS_TYPE_HOOK_COPY_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 13)
925#define ECS_TYPE_HOOK_MOVE_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 14)
926#define ECS_TYPE_HOOK_COPY_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 15)
927#define ECS_TYPE_HOOK_MOVE_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 16)
928#define ECS_TYPE_HOOK_CTOR_MOVE_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 17)
929#define ECS_TYPE_HOOK_MOVE_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 18)
930#define ECS_TYPE_HOOK_CMP_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 19)
931#define ECS_TYPE_HOOK_EQUALS_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 20)
934#define ECS_TYPE_HOOK_IN_USE ECS_CAST(ecs_flags32_t, 1 << 21)
938#define ECS_TYPE_HOOKS (ECS_TYPE_HOOK_CTOR|ECS_TYPE_HOOK_DTOR|\
939 ECS_TYPE_HOOK_COPY|ECS_TYPE_HOOK_MOVE|ECS_TYPE_HOOK_COPY_CTOR|\
940 ECS_TYPE_HOOK_MOVE_CTOR|ECS_TYPE_HOOK_CTOR_MOVE_DTOR|\
941 ECS_TYPE_HOOK_MOVE_DTOR|ECS_TYPE_HOOK_CMP|ECS_TYPE_HOOK_EQUALS)
944#define ECS_TYPE_HOOKS_ILLEGAL (ECS_TYPE_HOOK_CTOR_ILLEGAL|\
945 ECS_TYPE_HOOK_DTOR_ILLEGAL|ECS_TYPE_HOOK_COPY_ILLEGAL|\
946 ECS_TYPE_HOOK_MOVE_ILLEGAL|ECS_TYPE_HOOK_COPY_CTOR_ILLEGAL|\
947 ECS_TYPE_HOOK_MOVE_CTOR_ILLEGAL|ECS_TYPE_HOOK_CTOR_MOVE_DTOR_ILLEGAL|\
948 ECS_TYPE_HOOK_MOVE_DTOR_ILLEGAL|ECS_TYPE_HOOK_CMP_ILLEGAL|\
949 ECS_TYPE_HOOK_EQUALS_ILLEGAL)
1027#include "flecs/private/api_types.h"
1028#include "flecs/private/api_support.h"
1029#include "flecs/datastructures/hashmap.h"
1030#include "flecs/private/api_internals.h"
1232#define EcsQueryMatchPrefab (1u << 1u)
1238#define EcsQueryMatchDisabled (1u << 2u)
1244#define EcsQueryMatchEmptyTables (1u << 3u)
1250#define EcsQueryAllowUnresolvedByName (1u << 6u)
1256#define EcsQueryTableOnly (1u << 7u)
1268#define EcsQueryDetectChanges (1u << 8u)
1626#ifdef FLECS_DEPRECATED
1993#define EcsLastInternalComponentId (ecs_id(EcsTreeSpawner))
1997#define EcsFirstUserComponentId (8)
2001#define EcsFirstUserEntityId (FLECS_HI_COMPONENT_ID + 128)
2278 ecs_flags32_t flags);
2359 bool multi_threaded);
2654 int32_t entity_count);
2749 ecs_flags32_t flags);
2846#define flecs_poly_is(object, type)\
2847 flecs_poly_is_(object, type##_magic)
2887 const char *thread_name);
3130 int32_t child_count);
3438FLECS_ALWAYS_INLINE FLECS_API
3454FLECS_ALWAYS_INLINE FLECS_API
3467FLECS_ALWAYS_INLINE FLECS_API
4022 const char *symbol);
4133 bool lookup_as_path,
4163 const char *prefix);
4209 const char *prefix);
4232 const char *prefix);
4275 const char *prefix);
4536 uint64_t component_flags);
5008 ecs_table_range_t *range,
5492 const ecs_table_range_t *range);
6188 ecs_flags32_t flags);
6367 ecs_flags64_t flags,
6610#include "flecs/private/addons.h"
The deprecated addon contains deprecated operations.
Extends the core API with convenience macros for C applications.
void ecs_remove_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Remove a component from an entity.
void ecs_auto_override_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Add an auto override for a component.
void ecs_remove_all(ecs_world_t *world, ecs_id_t component)
Remove all instances of the specified component.
void ecs_clear(ecs_world_t *world, ecs_entity_t entity)
Clear all components.
ecs_id_t ecs_get_with(const ecs_world_t *world)
Get the component set with ecs_set_with().
void ecs_add_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Add a (component) ID to an entity.
ecs_entity_t ecs_set_with(ecs_world_t *world, ecs_id_t component)
Create new entities with a specified component.
struct ecs_value_t ecs_value_t
Utility to hold a value of a dynamic type.
struct EcsIdentifier EcsIdentifier
A (string) identifier.
struct EcsTreeSpawner EcsTreeSpawner
Tree instantiation cache component.
struct EcsPoly EcsPoly
Component for storing a poly object.
struct EcsDefaultChildComponent EcsDefaultChildComponent
When added to an entity, this informs serialization formats which component to use when a value is as...
struct EcsParent EcsParent
Non-fragmenting ChildOf relationship.
struct EcsComponent EcsComponent
Component information.
FLECS_API const ecs_entity_t ecs_id(EcsDocDescription)
Component ID for EcsDocDescription.
ecs_world_t * ecs_stage_new(ecs_world_t *world)
Create an unmanaged stage.
bool ecs_defer_end(ecs_world_t *world)
End a block of operations to defer.
bool ecs_readonly_begin(ecs_world_t *world, bool multi_threaded)
Begin readonly mode.
void ecs_defer_resume(ecs_world_t *world)
Resume deferring.
bool ecs_defer_begin(ecs_world_t *world)
Defer operations until the end of the frame.
void ecs_defer_suspend(ecs_world_t *world)
Suspend deferring but do not flush queue.
bool ecs_is_deferred(const ecs_world_t *world)
Test if deferring is enabled for the current stage.
void ecs_stage_free(ecs_world_t *stage)
Free an unmanaged stage.
void ecs_merge(ecs_world_t *stage)
Merge a stage.
int32_t ecs_stage_get_id(const ecs_world_t *world)
Get the stage ID.
bool ecs_stage_is_readonly(const ecs_world_t *world)
Test whether the current world is readonly.
int32_t ecs_get_stage_count(const ecs_world_t *world)
Get the number of configured stages.
ecs_world_t * ecs_get_stage(const ecs_world_t *world, int32_t stage_id)
Get stage-specific world pointer.
void ecs_set_stage_count(ecs_world_t *world, int32_t stages)
Configure the world to have N stages.
void ecs_readonly_end(ecs_world_t *world)
End readonly mode.
bool ecs_is_defer_suspended(const ecs_world_t *world)
Test if deferring is suspended for the current stage.
const ecs_type_hooks_t * ecs_get_hooks_id(const ecs_world_t *world, ecs_entity_t component)
Get hooks for a component.
ecs_entity_t ecs_component_init(ecs_world_t *world, const ecs_component_desc_t *desc)
Find or create a component.
const ecs_type_info_t * ecs_get_type_info(const ecs_world_t *world, ecs_id_t component)
Get the type info for a component.
struct ecs_component_desc_t ecs_component_desc_t
Used with ecs_component_init().
void ecs_set_hooks_id(ecs_world_t *world, ecs_entity_t component, const ecs_type_hooks_t *hooks)
Register hooks for a component.
struct ecs_component_record_t ecs_component_record_t
Information about a (component) ID, such as type info and tables with the ID.
struct ecs_header_t ecs_header_t
Header for ecs_poly_t objects.
struct ecs_stage_t ecs_stage_t
A stage enables modification while iterating and from multiple threads.
struct ecs_ref_t ecs_ref_t
A ref is a fast way to fetch a component for a specific entity.
ecs_id_t ecs_entity_t
An entity identifier.
struct ecs_table_record_t ecs_table_record_t
Opaque type for table record.
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
struct ecs_mixins_t ecs_mixins_t
Type that stores poly mixins.
uint64_t ecs_id_t
IDs are the things that can be added to an entity.
struct ecs_observable_t ecs_observable_t
An observable produces events that can be listened for by an observer.
struct ecs_record_t ecs_record_t
Information about an entity, like its table and row.
struct ecs_table_t ecs_table_t
A table stores entities and components for a specific type.
void ecs_poly_t
A poly object.
ecs_entity_t ecs_new_low_id(ecs_world_t *world)
Create new low ID.
void ecs_set_child_order(ecs_world_t *world, ecs_entity_t parent, const ecs_entity_t *children, int32_t child_count)
Set child order for parent with OrderedChildren.
const ecs_entity_t * ecs_bulk_init(ecs_world_t *world, const ecs_bulk_desc_t *desc)
Bulk create or populate new entities.
ecs_entity_t ecs_clone(ecs_world_t *world, ecs_entity_t dst, ecs_entity_t src, bool copy_value)
Clone an entity.
ecs_entity_t ecs_new(ecs_world_t *world)
Create new entity ID.
ecs_entity_t ecs_entity_init(ecs_world_t *world, const ecs_entity_desc_t *desc)
Find or create an entity.
void ecs_delete(ecs_world_t *world, ecs_entity_t entity)
Delete an entity.
void ecs_delete_with(ecs_world_t *world, ecs_id_t component)
Delete all entities with the specified component.
ecs_entity_t ecs_new_w_id(ecs_world_t *world, ecs_id_t component)
Create new entity with (component) ID.
ecs_entity_t ecs_new_w_table(ecs_world_t *world, ecs_table_t *table)
Create new entity in table.
const ecs_entity_t * ecs_bulk_new_w_id(ecs_world_t *world, ecs_id_t component, int32_t count)
Create N new entities.
ecs_entities_t ecs_get_ordered_children(const ecs_world_t *world, ecs_entity_t parent)
Get ordered children.
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 a 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 a parent.
ecs_iter_t ecs_children_w_rel(const ecs_world_t *world, ecs_entity_t relationship, ecs_entity_t parent)
Same as ecs_children(), but with a custom relationship argument.
void ecs_enable_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component, bool enable)
Enable or disable a component.
bool ecs_is_enabled_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if a component is enabled.
void ecs_enable(ecs_world_t *world, ecs_entity_t entity, bool enabled)
Enable or disable an entity.
struct ecs_bulk_desc_t ecs_bulk_desc_t
Used with ecs_bulk_init().
struct ecs_entity_desc_t ecs_entity_desc_t
Used with ecs_entity_init().
char * ecs_entity_str(const ecs_world_t *world, ecs_entity_t entity)
Convert an entity to a string.
ecs_entity_t ecs_get_target(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel, int32_t index)
Get the target of a relationship.
ecs_entity_t ecs_get_parent(const ecs_world_t *world, ecs_entity_t entity)
Get the parent (target of the ChildOf relationship) for an entity.
ecs_entity_t ecs_get_target_for_id(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel, ecs_id_t component)
Get the target of a relationship for a given component.
const ecs_type_t * ecs_get_type(const ecs_world_t *world, ecs_entity_t entity)
Get the type of an entity.
bool ecs_owns_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if an entity owns a component.
char * ecs_type_str(const ecs_world_t *world, const ecs_type_t *type)
Convert a type to a string.
char * ecs_table_str(const ecs_world_t *world, const ecs_table_t *table)
Convert a table to a string.
int32_t ecs_count_id(const ecs_world_t *world, ecs_id_t entity)
Count entities that have the specified ID.
int32_t ecs_get_depth(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel)
Return the depth for an entity in the tree for the specified relationship.
ecs_table_t * ecs_get_table(const ecs_world_t *world, ecs_entity_t entity)
Get the table of an entity.
ecs_entity_t ecs_new_w_parent(ecs_world_t *world, ecs_entity_t parent, const char *name)
Create child with Parent component.
bool ecs_has_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if an entity has a component.
void(* ecs_module_action_t)(ecs_world_t *world)
Initialization action for modules.
uint64_t(* ecs_group_by_action_t)(ecs_world_t *world, ecs_table_t *table, ecs_id_t group_id, void *ctx)
Callback used for grouping tables in a query.
int(* ecs_cmp_t)(const void *a_ptr, const void *b_ptr, const ecs_type_info_t *type_info)
Compare hook to compare component instances.
uint64_t(* ecs_hash_value_action_t)(const void *ptr)
Callback used for hashing values.
void(* ecs_group_delete_action_t)(ecs_world_t *world, uint64_t group_id, void *group_ctx, void *group_by_ctx)
Callback invoked when a query deletes an existing group.
void(* ecs_iter_fini_action_t)(ecs_iter_t *it)
Function prototype for freeing an iterator.
void *(* ecs_group_create_action_t)(ecs_world_t *world, uint64_t group_id, void *group_by_ctx)
Callback invoked when a query creates a new group.
void(* ecs_sort_table_action_t)(ecs_world_t *world, ecs_table_t *table, ecs_entity_t *entities, void *ptr, int32_t size, int32_t lo, int32_t hi, ecs_order_by_action_t order_by)
Callback used for sorting the entire table of components.
bool(* ecs_iter_next_action_t)(ecs_iter_t *it)
Function prototype for iterating an iterator.
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
void(* ecs_copy_t)(void *dst_ptr, const void *src_ptr, int32_t count, const ecs_type_info_t *type_info)
Copy is invoked when a component is copied into another component.
bool(* ecs_equals_t)(const void *a_ptr, const void *b_ptr, const ecs_type_info_t *type_info)
Equals operator hook.
int(* ecs_compare_action_t)(const void *ptr1, const void *ptr2)
Callback used for sorting values.
void(* ecs_fini_action_t)(ecs_world_t *world, void *ctx)
Action callback on world exit.
void(* ecs_move_t)(void *dst_ptr, void *src_ptr, int32_t count, const ecs_type_info_t *type_info)
Move is invoked when a component is moved to another component.
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
void(* ecs_ctx_free_t)(void *ctx)
Function to clean up context data.
int(* ecs_order_by_action_t)(ecs_entity_t e1, const void *ptr1, ecs_entity_t e2, const void *ptr2)
Callback used for comparing components.
void(* ecs_xtor_t)(void *ptr, int32_t count, const ecs_type_info_t *type_info)
Constructor/destructor callback.
void * ecs_ref_get_id(const ecs_world_t *world, ecs_ref_t *ref, ecs_id_t component)
Get a component from a ref.
void * ecs_emplace_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component, size_t size, bool *is_new)
Emplace a component.
void ecs_ref_update(const ecs_world_t *world, ecs_ref_t *ref)
Update a ref.
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_modified_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Signal that a component has been modified.
ecs_ref_t ecs_ref_init_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Create a component ref.
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.
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.
const ecs_id_t ECS_PAIR
Indicate that the ID is a pair.
const ecs_id_t ECS_AUTO_OVERRIDE
Automatically override component when it is inherited.
const ecs_id_t ECS_TOGGLE
Add a bitset to storage, which allows a component to be enabled or disabled.
const ecs_id_t ECS_VALUE_PAIR
Indicate that the target of a pair is an integer value.
char * ecs_id_str(const ecs_world_t *world, ecs_id_t component)
Convert a component ID to a string.
bool ecs_id_is_tag(const ecs_world_t *world, ecs_id_t component)
Return whether a specified component is a tag.
ecs_flags32_t ecs_id_get_flags(const ecs_world_t *world, ecs_id_t component)
Get flags associated with an ID.
bool ecs_id_is_valid(const ecs_world_t *world, ecs_id_t component)
Utility to check if an ID is valid.
const char * ecs_id_flag_str(uint64_t component_flags)
Convert a component flag to a string.
bool ecs_id_in_use(const ecs_world_t *world, ecs_id_t component)
Return whether a specified component is in use.
bool ecs_id_match(ecs_id_t component, ecs_id_t pattern)
Utility to match a component with a pattern.
void ecs_id_str_buf(const ecs_world_t *world, ecs_id_t component, ecs_strbuf_t *buf)
Write a component string to a buffer.
bool ecs_id_is_pair(ecs_id_t component)
Utility to check if a component is a pair.
ecs_entity_t ecs_get_typeid(const ecs_world_t *world, ecs_id_t component)
Get the type for a component.
ecs_id_t ecs_id_from_str(const ecs_world_t *world, const char *expr)
Convert a string to a component.
bool ecs_id_is_wildcard(ecs_id_t component)
Utility to check if a component is a wildcard.
bool ecs_id_is_any(ecs_id_t component)
Utility to check if a component is an any wildcard.
ecs_entity_t ecs_field_src(const ecs_iter_t *it, int8_t index)
Return the field source.
bool ecs_iter_changed(ecs_iter_t *it)
Return whether the current iterator result has changed.
bool ecs_field_is_writeonly(const ecs_iter_t *it, int8_t index)
Test whether the field is write-only.
ecs_var_t * ecs_iter_get_vars(const ecs_iter_t *it)
Get the variable array.
bool ecs_field_is_readonly(const ecs_iter_t *it, int8_t index)
Test whether the field is read-only.
const char * ecs_iter_get_var_name(const ecs_iter_t *it, int32_t var_id)
Get the variable name.
ecs_iter_t ecs_worker_iter(const ecs_iter_t *it, int32_t index, int32_t count)
Create a worker iterator.
bool ecs_iter_is_true(ecs_iter_t *it)
Test if an iterator is true.
void ecs_iter_fini(ecs_iter_t *it)
Clean up iterator resources.
char * ecs_iter_str(const ecs_iter_t *it)
Convert an iterator to a string.
bool ecs_iter_var_is_constrained(ecs_iter_t *it, int32_t var_id)
Return whether a variable is constrained.
ecs_iter_t ecs_page_iter(const ecs_iter_t *it, int32_t offset, int32_t limit)
Create a paged iterator.
int32_t ecs_iter_get_var_count(const ecs_iter_t *it)
Get the number of variables.
void * ecs_field_at_w_size(const ecs_iter_t *it, size_t size, int8_t index, int32_t row)
Get data for a field at a specified row.
ecs_id_t ecs_field_id(const ecs_iter_t *it, int8_t index)
Return the ID matched for a field.
bool ecs_field_is_set(const ecs_iter_t *it, int8_t index)
Test whether a field is set.
void ecs_iter_set_var(ecs_iter_t *it, int32_t var_id, ecs_entity_t entity)
Set the value for an iterator variable.
bool ecs_field_is_self(const ecs_iter_t *it, int8_t index)
Test whether the field is matched on self.
bool ecs_iter_next(ecs_iter_t *it)
Progress any iterator.
ecs_entity_t ecs_iter_get_var(ecs_iter_t *it, int32_t var_id)
Get the value of an iterator variable as an entity.
bool ecs_worker_next(ecs_iter_t *it)
Progress a worker iterator.
ecs_entity_t ecs_iter_first(ecs_iter_t *it)
Get the first matching entity from an iterator.
int32_t ecs_field_column(const ecs_iter_t *it, int8_t index)
Return the index of a matched table column.
uint64_t ecs_iter_get_group(const ecs_iter_t *it)
Return the group ID for the currently iterated result.
void ecs_iter_set_var_as_table(ecs_iter_t *it, int32_t var_id, const ecs_table_t *table)
Same as ecs_iter_set_var(), but for a table.
ecs_table_t * ecs_iter_get_var_as_table(ecs_iter_t *it, int32_t var_id)
Get the value of an iterator variable as a table.
void * ecs_field_w_size(const ecs_iter_t *it, size_t size, int8_t index)
Get data for a field.
int32_t ecs_iter_count(ecs_iter_t *it)
Count the number of matched entities in a query.
bool ecs_page_next(ecs_iter_t *it)
Progress a paged iterator.
void ecs_iter_set_var_as_range(ecs_iter_t *it, int32_t var_id, const ecs_table_range_t *range)
Same as ecs_iter_set_var(), but for a range of entities.
size_t ecs_field_size(const ecs_iter_t *it, int8_t index)
Return the field type size.
ecs_table_range_t ecs_iter_get_var_as_range(ecs_iter_t *it, int32_t var_id)
Get the value of an iterator variable as a table range.
ecs_id_t ecs_strip_generation(ecs_entity_t e)
Remove the generation from an entity ID.
void ecs_make_alive_id(ecs_world_t *world, ecs_id_t component)
Same as ecs_make_alive(), but for components.
bool ecs_is_valid(const ecs_world_t *world, ecs_entity_t e)
Test whether an entity is valid.
void ecs_make_alive(ecs_world_t *world, ecs_entity_t entity)
Ensure an ID is alive.
ecs_entity_t ecs_get_alive(const ecs_world_t *world, ecs_entity_t e)
Get an alive identifier.
uint32_t ecs_get_version(ecs_entity_t entity)
Get the generation of an entity.
bool ecs_exists(const ecs_world_t *world, ecs_entity_t entity)
Test whether an entity exists.
bool ecs_is_alive(const ecs_world_t *world, ecs_entity_t e)
Test whether an entity is alive.
void ecs_set_version(ecs_world_t *world, ecs_entity_t entity)
Override the generation of an entity.
struct ecs_world_info_t ecs_world_info_t
Type that contains information about the world.
struct ecs_query_group_info_t ecs_query_group_info_t
Type that contains information about a query group.
struct ecs_entity_range_t ecs_entity_range_t
Type that stores an entity id range.
struct ecs_build_info_t ecs_build_info_t
Type with information about the current Flecs build.
void ecs_emit(ecs_world_t *world, ecs_event_desc_t *desc)
Send an event.
void ecs_enqueue(ecs_world_t *world, ecs_event_desc_t *desc)
Enqueue an event.
ecs_entity_t ecs_observer_init(ecs_world_t *world, const ecs_observer_desc_t *desc)
Create an observer.
const ecs_observer_t * ecs_observer_get(const ecs_world_t *world, ecs_entity_t observer)
Get the observer object.
struct ecs_event_desc_t ecs_event_desc_t
Used with ecs_emit().
struct ecs_observer_desc_t ecs_observer_desc_t
Used with ecs_observer_init().
#define FLECS_EVENT_DESC_MAX
Maximum number of events in ecs_observer_desc_t.
#define ecs_ftime_t
Customizable precision for scalar time values.
#define FLECS_ID_DESC_MAX
Maximum number of IDs to add in ecs_entity_desc_t / ecs_bulk_desc_t.
#define FLECS_TERM_COUNT_MAX
Maximum number of terms in queries.
#define FLECS_TREE_SPAWNER_DEPTH_CACHE_SIZE
Size of the depth cache in the tree spawner component.
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.
ecs_entity_t ecs_new_from_path_w_sep(ecs_world_t *world, ecs_entity_t parent, const char *path, const char *sep, const char *prefix)
Find or create an entity from a path.
ecs_entity_t ecs_lookup_symbol(const ecs_world_t *world, const char *symbol, bool lookup_as_path, bool recursive)
Look up an entity by its symbol name.
void ecs_set_alias(ecs_world_t *world, ecs_entity_t entity, const char *alias)
Set an alias for an entity.
ecs_entity_t ecs_lookup(const ecs_world_t *world, const char *path)
Look up an entity by its path.
ecs_entity_t ecs_get_scope(const ecs_world_t *world)
Get the current scope.
void ecs_get_path_w_sep_buf(const ecs_world_t *world, ecs_entity_t parent, ecs_entity_t child, const char *sep, const char *prefix, ecs_strbuf_t *buf, bool escape)
Write a path identifier to a buffer.
ecs_entity_t * ecs_set_lookup_path(ecs_world_t *world, const ecs_entity_t *lookup_path)
Set the search path for lookup operations.
ecs_entity_t ecs_set_name(ecs_world_t *world, ecs_entity_t entity, const char *name)
Set the name of an entity.
const char * ecs_get_symbol(const ecs_world_t *world, ecs_entity_t entity)
Get the symbol of an entity.
ecs_entity_t ecs_lookup_path_w_sep(const ecs_world_t *world, ecs_entity_t parent, const char *path, const char *sep, const char *prefix, bool recursive)
Look up an entity from a path.
ecs_entity_t ecs_set_symbol(ecs_world_t *world, ecs_entity_t entity, const char *symbol)
Set the symbol of an entity.
ecs_entity_t ecs_lookup_child(const ecs_world_t *world, ecs_entity_t parent, const char *name)
Look up a child entity by name.
const char * ecs_get_name(const ecs_world_t *world, ecs_entity_t entity)
Get the name of an entity.
ecs_entity_t ecs_add_path_w_sep(ecs_world_t *world, ecs_entity_t entity, ecs_entity_t parent, const char *path, const char *sep, const char *prefix)
Add a specified path to an entity.
ecs_entity_t * ecs_get_lookup_path(const ecs_world_t *world)
Get the current lookup path.
ecs_entity_t ecs_set_scope(ecs_world_t *world, ecs_entity_t scope)
Set the current scope.
const char * ecs_set_name_prefix(ecs_world_t *world, const char *prefix)
Set a name prefix for newly created entities.
void ecs_iter_skip(ecs_iter_t *it)
Skip a table while iterating.
bool ecs_query_has_table(const ecs_query_t *query, ecs_table_t *table, ecs_iter_t *it)
Match a table with a query.
void ecs_iter_set_group(ecs_iter_t *it, uint64_t group_id)
Set the group to iterate for a query iterator.
const ecs_query_t * ecs_query_get(const ecs_world_t *world, ecs_entity_t query)
Get the query object.
bool ecs_query_next(ecs_iter_t *it)
Progress a query iterator.
const ecs_query_group_info_t * ecs_query_get_group_info(const ecs_query_t *query, uint64_t group_id)
Get information about a query group.
bool ecs_query_is_true(const ecs_query_t *query)
Test whether a query returns one or more results.
char * ecs_term_str(const ecs_world_t *world, const ecs_term_t *term)
Convert a term to a string expression.
bool ecs_query_has_range(const ecs_query_t *query, ecs_table_range_t *range, ecs_iter_t *it)
Match a range with a query.
int32_t ecs_query_find_var(const ecs_query_t *query, const char *name)
Find a variable index.
void ecs_query_fini(ecs_query_t *query)
Delete a query.
bool ecs_query_has(const ecs_query_t *query, ecs_entity_t entity, ecs_iter_t *it)
Match an entity with a query.
char * ecs_query_plan_w_profile(const ecs_query_t *query, const ecs_iter_t *it)
Convert a query to a string with a profile.
struct ecs_query_desc_t ecs_query_desc_t
Used with ecs_query_init().
const char * ecs_query_args_parse(ecs_query_t *query, ecs_iter_t *it, const char *expr)
Populate variables from a key-value string.
int32_t ecs_query_match_count(const ecs_query_t *query)
Return how often a match event happened for a cached query.
char * ecs_query_plan(const ecs_query_t *query)
Convert a query to a string.
ecs_iter_t ecs_query_iter(const ecs_world_t *world, const ecs_query_t *query)
Create a query iterator.
char * ecs_query_str(const ecs_query_t *query)
Convert a query to a string expression.
bool ecs_query_var_is_entity(const ecs_query_t *query, int32_t var_id)
Test if a variable is an entity.
ecs_query_t * ecs_query_init(ecs_world_t *world, const ecs_query_desc_t *desc)
Create a query.
bool ecs_query_changed(ecs_query_t *query)
Return whether the query data changed since the last iteration.
const char * ecs_query_var_name(const ecs_query_t *query, int32_t var_id)
Get the variable name.
bool ecs_term_match_this(const ecs_term_t *term)
Is a term matched on the $this variable.
char * ecs_query_plans(const ecs_query_t *query)
Same as ecs_query_plan(), but includes the plan for populating the cache (if any).
void * ecs_query_get_group_ctx(const ecs_query_t *query, uint64_t group_id)
Get the context of a query group.
ecs_query_count_t ecs_query_count(const ecs_query_t *query)
Return the number of entities and results the query matches with.
const ecs_map_t * ecs_query_get_groups(const ecs_query_t *query)
Return the map with query groups.
bool ecs_term_is_initialized(const ecs_term_t *term)
Test whether a term is set.
bool ecs_term_ref_is_set(const ecs_term_ref_t *ref)
Test whether a term ref is set.
struct ecs_query_count_t ecs_query_count_t
Struct returned by ecs_query_count().
bool ecs_term_match_0(const ecs_term_t *term)
Is a term matched on a 0 source.
const ecs_query_t * ecs_query_get_cache_query(const ecs_query_t *query)
Get the query used to populate the cache.
struct ecs_term_ref_t ecs_term_ref_t
Type that describes a reference to an entity or variable in a term.
ecs_query_cache_kind_t
Specify cache policy for query.
ecs_inout_kind_t
Specify read/write access for term.
ecs_oper_kind_t
Specify operator for term.
@ EcsQueryCacheAll
Require that all query terms can be cached.
@ EcsQueryCacheDefault
Behavior determined by query creation context.
@ EcsQueryCacheNone
No caching.
@ EcsQueryCacheAuto
Cache query terms that are cacheable.
@ EcsOut
Term is only written.
@ EcsInOut
Term is both read and written.
@ EcsInOutFilter
Same as InOutNone + prevents term from triggering observers.
@ EcsInOutDefault
InOut for regular terms, In for shared terms.
@ EcsInOutNone
Term is neither read nor written.
@ EcsIn
Term is only read.
@ EcsNot
The term must not match.
@ EcsOptional
The term may match.
@ EcsOr
One of the terms in an or chain must match.
@ EcsOrFrom
Term must match at least one component from term ID.
@ EcsAnd
The term must match.
@ EcsNotFrom
Term must match none of the components from term ID.
@ EcsAndFrom
Term must match all components from term ID.
ecs_table_t * ecs_table_add_id(ecs_world_t *world, ecs_table_t *table, ecs_id_t component)
Get the table that has all components of the current table plus the specified ID.
int32_t ecs_search_offset(const ecs_world_t *world, const ecs_table_t *table, int32_t offset, ecs_id_t component, ecs_id_t *component_out)
Search for a component in a table type starting from an offset.
ecs_table_t * ecs_table_remove_id(ecs_world_t *world, ecs_table_t *table, ecs_id_t component)
Get the table that has all components of the current table minus the specified component.
const ecs_type_t * ecs_table_get_type(const ecs_table_t *table)
Get the type for a table.
int32_t ecs_table_get_column_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Get the column index for a component.
int32_t ecs_search_relation_for_entity(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id, ecs_entity_t rel, bool self, ecs_component_record_t *cr, ecs_entity_t *tgt_out, ecs_id_t *id_out, struct ecs_table_record_t **tr_out)
Search for a component ID by following a relationship, starting from an entity.
void * ecs_table_get_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component, int32_t offset)
Get a column from a table by component.
int32_t ecs_table_size(const ecs_table_t *table)
Return the allocated size of the table.
bool ecs_table_has_flags(ecs_table_t *table, ecs_flags32_t flags)
Test a table for flags.
int32_t ecs_table_column_to_type_index(const ecs_table_t *table, int32_t index)
Convert a column index to a type index.
int32_t ecs_table_column_count(const ecs_table_t *table)
Return the number of columns in a table.
bool ecs_commit(ecs_world_t *world, ecs_entity_t entity, ecs_record_t *record, ecs_table_t *table, const ecs_type_t *added, const ecs_type_t *removed)
Commit (move) an entity to a table.
int32_t ecs_search_relation(const ecs_world_t *world, const ecs_table_t *table, int32_t offset, ecs_id_t component, ecs_entity_t rel, ecs_flags64_t flags, ecs_entity_t *tgt_out, ecs_id_t *component_out, struct ecs_table_record_t **tr_out)
Search for a component or relationship ID in a table type starting from an offset.
void * ecs_table_get_column(const ecs_table_t *table, int32_t index, int32_t offset)
Get a column from a table by column index.
int32_t ecs_search(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component, ecs_id_t *component_out)
Search for a component in a table type.
ecs_entity_t ecs_table_get_target(const ecs_world_t *world, const ecs_table_t *table, ecs_entity_t relationship, int32_t index)
Get the relationship target for a table.
int32_t ecs_table_count(const ecs_table_t *table)
Return the number of entities in the table.
const ecs_entity_t * ecs_table_entities(const ecs_table_t *table)
Return the array with entity IDs for the table.
void ecs_table_unlock(ecs_world_t *world, ecs_table_t *table)
Unlock a table.
bool ecs_table_has_traversable(const ecs_table_t *table)
Check if a table has traversable entities.
int32_t ecs_table_get_depth(const ecs_world_t *world, const ecs_table_t *table, ecs_entity_t rel)
Return the depth for a table in the tree for the specified relationship.
bool ecs_table_has_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Test if a table has a component.
void ecs_table_swap_rows(ecs_world_t *world, ecs_table_t *table, int32_t row_1, int32_t row_2)
Swap two elements inside the table.
void ecs_table_lock(ecs_world_t *world, ecs_table_t *table)
Lock a table.
ecs_table_t * ecs_table_find(ecs_world_t *world, const ecs_id_t *ids, int32_t id_count)
Find a table from an ID array.
size_t ecs_table_get_column_size(const ecs_table_t *table, int32_t index)
Get the column size from a table.
int32_t ecs_table_get_type_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Get the type index for a component.
void ecs_table_clear_entities(ecs_world_t *world, ecs_table_t *table)
Remove all entities in a table.
int32_t ecs_table_type_to_column_index(const ecs_table_t *table, int32_t index)
Convert a type index to a column index.
int ecs_value_fini_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *ptr)
Destruct a value.
int ecs_value_fini(const ecs_world_t *world, ecs_entity_t type, void *ptr)
Destruct a value.
int ecs_value_copy(const ecs_world_t *world, ecs_entity_t type, void *dst, const void *src)
Copy a value.
int ecs_value_move(const ecs_world_t *world, ecs_entity_t type, void *dst, void *src)
Move a value.
int ecs_value_move_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *dst, void *src)
Move a value.
void * ecs_value_new_w_type_info(ecs_world_t *world, const ecs_type_info_t *ti)
Construct a value in new storage.
int ecs_value_move_ctor_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *dst, void *src)
Move-construct a value.
int ecs_value_copy_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *dst, const void *src)
Copy a value.
int ecs_value_init_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *ptr)
Construct a value in existing storage.
void * ecs_value_new(ecs_world_t *world, ecs_entity_t type)
Construct a value in new storage.
int ecs_value_free(ecs_world_t *world, ecs_entity_t type, void *ptr)
Destruct a value and free storage.
int ecs_value_move_ctor(const ecs_world_t *world, ecs_entity_t type, void *dst, void *src)
Move-construct a value.
int ecs_value_init(const ecs_world_t *world, ecs_entity_t type, void *ptr)
Construct a value in existing storage.
struct ecs_entities_t ecs_entities_t
Type returned by ecs_get_entities().
void ecs_atfini(ecs_world_t *world, ecs_fini_action_t action, void *ctx)
Register an action to be executed when the world is destroyed.
bool ecs_is_fini(const ecs_world_t *world)
Return whether the world is being deleted.
int ecs_fini(ecs_world_t *world)
Delete a world.
ecs_flags32_t ecs_world_get_flags(const ecs_world_t *world)
Get flags set on the world.
ecs_world_t * ecs_mini(void)
Create a new world with just the core module.
ecs_world_t * ecs_init(void)
Create a new world.
ecs_world_t * ecs_init_w_args(int argc, char *argv[])
Create a new world with arguments.
ecs_entities_t ecs_get_entities(const ecs_world_t *world)
Return entity identifiers in the world.
void ecs_set_target_fps(ecs_world_t *world, float fps)
Set target frames per second (FPS) for an application.
void ecs_measure_system_time(ecs_world_t *world, bool enable)
Measure system time.
float ecs_frame_begin(ecs_world_t *world, float delta_time)
Begin frame.
void ecs_run_post_frame(ecs_world_t *world, ecs_fini_action_t action, void *ctx)
Register an action to be executed once after the frame.
bool ecs_should_quit(const ecs_world_t *world)
Return whether a quit has been requested.
void ecs_set_default_query_flags(ecs_world_t *world, ecs_flags32_t flags)
Set the default query flags.
void ecs_quit(ecs_world_t *world)
Signal exit.
void ecs_measure_frame_time(ecs_world_t *world, bool enable)
Measure frame time.
void ecs_frame_end(ecs_world_t *world)
End frame.
ecs_entity_t ecs_get_entity(const ecs_poly_t *poly)
Get the entity from a poly.
ecs_id_t ecs_make_pair(ecs_entity_t first, ecs_entity_t second)
Make a pair ID.
const ecs_build_info_t * ecs_get_build_info(void)
Get build info.
bool flecs_poly_is_(const ecs_poly_t *object, int32_t type)
Test if a pointer is of the specified type.
void ecs_entity_range_set(ecs_world_t *world, const ecs_entity_range_t *range)
Set the active entity range.
const ecs_entity_range_t * ecs_entity_range_new(ecs_world_t *world, uint32_t min, uint32_t max)
Create a new entity range.
ecs_entity_t ecs_get_max_id(const ecs_world_t *world)
Get the largest issued entity ID (not counting generation).
void ecs_run_aperiodic(ecs_world_t *world, ecs_flags32_t flags)
Force aperiodic actions.
void * ecs_get_binding_ctx(const ecs_world_t *world)
Get the world binding context.
void ecs_shrink(ecs_world_t *world)
Free unused memory.
void ecs_dim(ecs_world_t *world, int32_t entity_count)
Dimension the world for a specified number of entities.
const ecs_world_info_t * ecs_get_world_info(const ecs_world_t *world)
Get the world info.
const ecs_world_t * ecs_get_world(const ecs_poly_t *poly)
Get the world from a poly.
void ecs_set_ctx(ecs_world_t *world, void *ctx, ecs_ctx_free_t ctx_free)
Set a world context.
void ecs_exclusive_access_begin(ecs_world_t *world, const char *thread_name)
Begin exclusive thread access.
int32_t ecs_delete_empty_tables(ecs_world_t *world, const ecs_delete_empty_tables_desc_t *desc)
Clean up empty tables.
const ecs_entity_range_t * ecs_entity_range_get(const ecs_world_t *world)
Get the currently active entity id range.
void ecs_set_binding_ctx(ecs_world_t *world, void *ctx, ecs_ctx_free_t ctx_free)
Set a world binding context.
struct ecs_delete_empty_tables_desc_t ecs_delete_empty_tables_desc_t
Used with ecs_delete_empty_tables().
void ecs_exclusive_access_end(ecs_world_t *world, bool lock_world)
End exclusive thread access.
void * ecs_get_ctx(const ecs_world_t *world)
Get the world context.
Operating system abstraction API.
ecs_size_t size
Component size.
ecs_size_t alignment
Component alignment.
When added to an entity, this informs serialization formats which component to use when a value is as...
ecs_id_t component
Default component ID.
ecs_size_t length
Length of identifier.
char * value
Identifier string.
ecs_hashmap_t * index
Current index.
uint64_t hash
Hash of current value.
uint64_t index_hash
Hash of existing record in current index.
Non-fragmenting ChildOf relationship.
ecs_entity_t value
Parent entity.
Component for storing a poly object.
ecs_poly_t * poly
Pointer to poly object.
Apply a rate filter to a tick source.
Component used to provide a tick source to systems.
Component used for one-shot and interval timer functionality.
Tree instantiation cache component.
ecs_tree_spawner_t data[(6)]
Cache data indexed by depth.
Type with information about the current Flecs build.
const char ** flags
Compile-time settings.
int16_t version_major
Major Flecs version.
const char ** addons
Addons included in the build.
const char * version
Stringified version.
const char * compiler
Compiler used to compile Flecs.
bool sanitize
Is this a sanitize build?
bool perf_trace
Is this a perf tracing build?
int16_t version_minor
Minor Flecs version.
bool debug
Is this a debug build?
int16_t version_patch
Patch Flecs version.
Used with ecs_bulk_init().
ecs_id_t ids[32]
IDs to create the entities with.
void ** data
Array with component data to insert.
int32_t count
Number of entities to create/populate.
int32_t _canary
Used for validity testing.
ecs_entity_t * entities
Entities to bulk insert.
ecs_table_t * table
Table to insert the entities into.
Used with ecs_component_init().
int32_t _canary
Used for validity testing.
ecs_type_info_t type
Parameters for type (size, hooks, ...).
ecs_entity_t entity
Existing entity to associate with a component (optional).
Used with ecs_delete_empty_tables().
uint16_t delete_generation
Delete table when generation > delete_generation.
double time_budget_seconds
Amount of time operation is allowed to spend.
uint16_t clear_generation
Free table data when generation > clear_generation.
int32_t offset
Table index to start scanning at.
Type returned by ecs_get_entities().
int32_t alive_count
Number of alive entity IDs.
int32_t count
Total number of entity IDs.
const ecs_entity_t * ids
Array with all entity IDs in the world.
Used with ecs_entity_init().
const char * sep
Optional custom separator for hierarchical names.
const char * root_sep
Optional, used for identifiers relative to the root.
const char * name
Name of the entity.
bool use_low_id
When set to true, a low id (typically reserved for components) will be used to create the entity,...
const char * symbol
Optional entity symbol.
int32_t _canary
Used for validity testing.
const ecs_id_t * add
0-terminated array of IDs to add to the entity.
const char * add_expr
String expression with components to add.
const ecs_value_t * set
0-terminated array of values to set on the entity.
ecs_entity_t id
Set to modify existing entity (optional).
ecs_entity_t parent
Parent entity.
Type that stores an entity id range.
uint32_t max
Last id in range (inclusive, 0 = unlimited).
uint32_t cur
Last issued id in range.
ecs_vec_t recycled
Recycled entity ids (vec<entity_t>).
uint32_t min
First id in range (inclusive).
ecs_entity_t entity
Single-entity alternative to setting table / offset / count.
const void * const_param
Same as param, but with the guarantee that the value won't be modified.
ecs_table_t * table
The table for which to notify.
int32_t count
Limit number of notified entities to count.
ecs_table_t * other_table
Optional second table to notify.
int32_t offset
Limit notified entities to ones starting from offset (row) in table.
const ecs_type_t * ids
Component IDs.
ecs_poly_t * observable
Observable (usually the world).
ecs_entity_t event
The event ID.
ecs_flags32_t flags
Event flags.
void * param
Optional context.
ecs_world_t * real_world
Actual world.
void * param
Param passed to ecs_run().
ecs_entity_t event
The event (if applicable).
int32_t frame_offset
Offset relative to the start of iteration.
ecs_flags32_t ref_fields
Bitset with fields that aren't component arrays.
ecs_entity_t interrupted_by
When set, system execution is interrupted.
ecs_flags32_t flags
Iterator flags.
ecs_iter_t * chain_it
Optional, allows for creating iterator chains.
void * ctx
System context.
void * run_ctx
Run language binding context.
ecs_table_t * table
Current table.
int32_t offset
Offset relative to the current table.
ecs_id_t event_id
The (component) ID for the event.
ecs_iter_fini_action_t fini
Function to clean up iterator resources.
ecs_iter_private_t priv_
Private data.
ecs_world_t * world
The world.
void * callback_ctx
Callback language binding context.
ecs_entity_t * sources
Entity on which the ID was matched (0 if same as entities).
void * binding_ctx
System binding context.
ecs_flags32_t row_fields
Fields that must be obtained with field_at.
float delta_system_time
Time elapsed since last system invocation.
const ecs_query_t * query
Query being evaluated.
int8_t term_index
Index of the term that emitted an event.
ecs_entity_t system
The system (if applicable).
ecs_flags32_t set_fields
Fields that are set.
const ecs_size_t * sizes
Component sizes.
float delta_time
Time elapsed since last frame.
ecs_flags32_t up_fields
Bitset with fields matched through up traversal.
ecs_iter_action_t callback
Callback of system or observer.
int8_t field_count
Number of fields in the iterator.
ecs_table_t * other_table
Previous or next table when adding or removing.
int32_t event_cur
Unique event ID.
const ecs_table_record_t ** trs
Info on where to find the field in the table.
int32_t count
Number of entities to iterate.
void ** ptrs
Component pointers.
ecs_iter_next_action_t next
Function to progress iterator.
const ecs_entity_t * entities
Entity identifiers.
ecs_id_t * ids
(Component) IDs.
ecs_flags64_t constrained_vars
Bitset that marks constrained variables.
Used with ecs_observer_init().
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
ecs_ctx_free_t ctx_free
Callback to free ctx.
void * run_ctx
Context associated with run (for language bindings).
ecs_entity_t entity
Existing entity to associate with an observer (optional).
int32_t * last_event_id
Used for internal purposes.
void * callback_ctx
Context associated with callback (for language bindings).
void * ctx
User context to pass to callback.
ecs_query_desc_t query
Query for observer.
ecs_flags32_t flags_
Used for internal purposes.
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
int8_t term_index_
Used for internal purposes.
bool global_observer
Global observers are tied to the lifespan of the world.
ecs_iter_action_t callback
Callback to invoke on an event, invoked when the observer matches.
bool yield_existing
When an observer is created, generate events from existing data.
ecs_run_action_t run
Callback invoked on an event.
ecs_entity_t events[8]
Events to observe (OnAdd, OnRemove, OnSet).
int32_t _canary
Used for validity testing.
An observer reacts to events matching a query.
int32_t event_count
Number of events.
ecs_iter_action_t callback
See ecs_observer_desc_t::callback.
ecs_entity_t entity
Entity associated with the observer.
ecs_observable_t * observable
Observable for the observer.
ecs_run_action_t run
See ecs_observer_desc_t::run.
ecs_header_t hdr
Object header.
ecs_ctx_free_t ctx_free
Callback to free ctx.
ecs_entity_t events[8]
Observer events.
void * run_ctx
Run language binding context.
ecs_world_t * world
The world.
ecs_ctx_free_t run_ctx_free
Callback to free run_ctx.
void * callback_ctx
Callback language binding context.
void * ctx
Observer context.
ecs_ctx_free_t callback_ctx_free
Callback to free callback_ctx.
ecs_query_t * query
Observer query.
Struct returned by ecs_query_count().
int32_t entities
Number of entities returned by the query.
int32_t results
Number of results returned by the query.
int32_t tables
Number of tables returned by the query.
Used with ecs_query_init().
ecs_ctx_free_t ctx_free
Callback to free ctx.
ecs_id_t group_by
Component ID to be used for grouping.
ecs_term_t terms[32]
Query terms.
int32_t _canary
Used for validity testing.
void * ctx
User context to pass to callback.
ecs_ctx_free_t group_by_ctx_free
Function to free group_by_ctx.
void * group_by_ctx
Context to pass to group_by.
void * binding_ctx
Context to be used for language bindings.
ecs_entity_t order_by
Component to sort on, used together with order_by_callback or order_by_table_callback.
ecs_order_by_action_t order_by_callback
Callback used for ordering query results.
ecs_group_create_action_t on_group_create
Callback that is invoked when a new group is created.
ecs_entity_t entity
Entity associated with query (optional).
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
ecs_group_by_action_t group_by_callback
Callback used for grouping results.
ecs_group_delete_action_t on_group_delete
Callback that is invoked when an existing group is deleted.
ecs_sort_table_action_t order_by_table_callback
Callback used for ordering query results.
ecs_flags32_t flags
Flags for enabling query features.
ecs_query_cache_kind_t cache_kind
Caching policy of the query.
const char * expr
Query DSL expression (optional).
Type that contains information about a query group.
int32_t table_count
Number of tables in group.
void * ctx
Group context, returned by on_group_create.
int32_t match_count
How often tables have been matched or unmatched.
Queries are lists of constraints (terms) that match entities.
ecs_flags32_t row_fields
Fields that must be acquired with field_at.
ecs_flags32_t data_fields
Fields that have data.
ecs_flags32_t read_fields
Fields that read data.
ecs_header_t hdr
Object header.
int8_t var_count
Number of query variables.
ecs_flags32_t fixed_fields
Bitmasks for quick field information lookups.
ecs_flags32_t var_fields
Fields with non-$this variable source.
ecs_flags32_t write_fields
Fields that write data.
int32_t eval_count
Number of times the query is evaluated.
ecs_world_t * world
World or stage the query was created with.
ecs_flags32_t static_id_fields
Fields with a static (component) id.
uint64_t bloom_filter
Bitmask used to quickly discard tables.
ecs_world_t * real_world
Actual world.
ecs_flags32_t set_fields
Fields that will be set.
ecs_entity_t entity
Entity associated with query (optional).
void * ctx
User context to pass to callback.
int32_t * sizes
Component sizes.
ecs_id_t * ids
Component ids.
ecs_flags32_t shared_readonly_fields
Fields that don't write shared data.
ecs_term_t * terms
Query terms.
ecs_query_cache_kind_t cache_kind
Caching policy of the query.
int8_t term_count
Number of query terms.
char ** vars
Array with variable names for the iterator.
int8_t field_count
Number of fields returned by the query.
ecs_flags32_t flags
Query flags.
void * binding_ctx
Context to be used for language bindings.
Type that describes a reference to an entity or variable in a term.
ecs_entity_t id
Entity ID.
Type that describes a term (single element in a query).
ecs_term_ref_t src
Source of term.
int8_t field_index
Index of the field for the term in the iterator.
ecs_id_t id
Component ID to be matched by term.
int16_t oper
Operator of term.
ecs_term_ref_t second
Second element of pair.
ecs_flags16_t flags_
Flags that help evaluation, set by ecs_query_init().
ecs_entity_t trav
Relationship to traverse when looking for the component.
int16_t inout
Access to contents matched by term.
ecs_term_ref_t first
Component or first element of pair.
Component with data to instantiate a non-fragmenting tree.
uint32_t child
Prefab child entity (without generation).
int32_t parent_index
Index into the children vector.
const char * child_name
Name of the prefab child.
ecs_table_t * table
Table in which the child will be stored.
Tree spawner data for a single hierarchy depth.
ecs_vec_t children
vector<ecs_tree_spawner_child_t>.
ecs_copy_t copy_ctor
Ctor + copy.
void * lifecycle_ctx
Component lifecycle context (see meta addon).
void * ctx
User-defined context.
ecs_iter_action_t on_remove
Callback that is invoked when an instance of the component is removed.
void * binding_ctx
Language binding context.
ecs_move_t move_dtor
Move + dtor.
ecs_flags32_t flags
Hook flags.
ecs_cmp_t cmp
Compare hook.
ecs_copy_t copy
copy assignment.
ecs_ctx_free_t lifecycle_ctx_free
Callback to free lifecycle_ctx.
ecs_iter_action_t on_set
Callback that is invoked when an instance of the component is set.
ecs_move_t move
move assignment.
ecs_iter_action_t on_replace
Callback that is invoked with the existing and new value before the value is assigned.
ecs_ctx_free_t ctx_free
Callback to free ctx.
ecs_iter_action_t on_add
Callback that is invoked when an instance of a component is added.
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
ecs_move_t move_ctor
Ctor + move.
ecs_equals_t equals
Equals hook.
ecs_move_t ctor_move_dtor
Ctor + move + dtor (or move_ctor + dtor).
Type that contains component information (passed to ctors/dtors/...).
ecs_size_t alignment
Alignment of the type.
ecs_size_t size
Size of the type.
const char * name
Type name.
ecs_entity_t component
Handle to component (do not set).
ecs_type_hooks_t hooks
Type hooks.
A type is a list of (component) IDs.
ecs_id_t * array
Array with IDs.
int32_t count
Number of elements in array.
Utility to hold a value of a dynamic type.
void * ptr
Pointer to value.
ecs_entity_t type
Type of value.
Type that contains information about the world.
int64_t observers_ran_total
Total number of times an observer was invoked.
float delta_time
Time passed to or computed by ecs_progress().
int64_t systems_ran_total
Total number of systems run.
int64_t set_count
Set commands processed.
double world_time_total
Time elapsed in simulation.
int32_t tag_id_count
Number of tag (no data) IDs in the world.
int32_t component_id_count
Number of component (data) IDs in the world.
int64_t pipeline_build_count_total
Total number of pipeline builds.
int64_t eval_comp_monitors_total
Total number of monitor evaluations.
int32_t table_count
Number of tables.
float delta_time_raw
Raw delta time (no time scaling).
float frame_time_total
Total time spent processing a frame.
int64_t table_create_total
Total number of times a table was created.
float system_time_total
Total time spent in systems.
int64_t id_delete_total
Total number of times an ID was deleted.
float merge_time_total
Total time spent in merges.
struct ecs_world_info_t::@0 cmd
Command statistics.
int64_t discard_count
Commands discarded, happens when the entity is no longer alive when running the command.
int64_t clear_count
Clear commands processed.
ecs_entity_t last_component_id
Last issued component entity ID.
int64_t frame_count_total
Total number of frames.
int64_t merge_count_total
Total number of merges.
int64_t other_count
Other commands processed.
int64_t batched_command_count
Commands batched.
int64_t table_delete_total
Total number of times a table was deleted.
int64_t queries_ran_total
Total number of times a query was evaluated.
int64_t delete_count
Delete commands processed.
int64_t rematch_count_total
Total number of rematches.
int64_t id_create_total
Total number of times a new ID was created.
int64_t batched_entity_count
Entities for which commands were batched.
float time_scale
Time scale applied to delta_time.
int32_t pair_id_count
Number of pair IDs in the world.
float rematch_time_total
Time spent on query rematching.
int64_t ensure_count
Ensure or emplace commands processed.
float target_fps
Target FPS.
double world_time_total_raw
Time elapsed in simulation (no scaling).
float emit_time_total
Total time spent notifying observers.
uint32_t creation_time
Time when world was created.
int64_t modified_count
Modified commands processed.
const char * name_prefix
Value set by ecs_set_name_prefix().
int64_t event_count
Enqueued custom events.
int64_t add_count
Add commands processed.
int64_t remove_count
Remove commands processed.