Flecs v4.1
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
flecs.h
Go to the documentation of this file.
1
8#ifndef FLECS_H
9#define FLECS_H
10
33/* Flecs version macros */
34#define FLECS_VERSION_MAJOR 4
35#define FLECS_VERSION_MINOR 1
36#define FLECS_VERSION_PATCH 4
39#define FLECS_VERSION FLECS_VERSION_IMPL(\
40 FLECS_VERSION_MAJOR, FLECS_VERSION_MINOR, FLECS_VERSION_PATCH)
41
45#ifdef FLECS_CONFIG_HEADER
46#include "flecs_config.h"
47#endif
48
51#ifndef ecs_float_t
52#define ecs_float_t float
53#endif
54
58#ifndef ecs_ftime_t
59#define ecs_ftime_t ecs_float_t
60#endif
61
62
68// #define FLECS_ACCURATE_COUNTERS
69
75// #define FLECS_DISABLE_COUNTERS
76
77/* Make sure provided configuration is valid */
78#if defined(FLECS_DEBUG) && defined(FLECS_NDEBUG)
79#warning "invalid configuration: cannot both define FLECS_DEBUG and FLECS_NDEBUG"
80#endif
81#if defined(FLECS_DEBUG) && defined(NDEBUG)
82#warning "invalid configuration: cannot both define FLECS_DEBUG and NDEBUG"
83#endif
84
89#if !defined(FLECS_DEBUG) && !defined(FLECS_NDEBUG)
90#if defined(NDEBUG)
91#define FLECS_NDEBUG
92#else
93#define FLECS_DEBUG
94#endif
95#endif
96
101#ifdef FLECS_SANITIZE
102#ifndef FLECS_DEBUG
103#define FLECS_DEBUG /* If sanitized mode is enabled, so is debug mode */
104#endif
105#endif
106
111#ifdef FLECS_DEBUG
112#ifndef FLECS_DEBUG_INFO
113#define FLECS_DEBUG_INFO
114#endif
115#endif
116
117/* Tip: if you see weird behavior that you think might be a bug, make sure to
118 * test with the FLECS_DEBUG or FLECS_SANITIZE flags enabled. There's a good
119 * chance that this gives you more information about the issue! */
120
134// #define FLECS_SOFT_ASSERT
135
141// #define FLECS_KEEP_ASSERT
142
149// #define FLECS_DEFAULT_TO_UNCACHED_QUERIES
150
163// #define FLECS_CREATE_MEMBER_ENTITIES
164
173// #define FLECS_CPP_NO_AUTO_REGISTRATION
174
182// #define FLECS_CPP_NO_ENUM_REFLECTION
183
188// #define FLECS_NO_ALWAYS_INLINE
189
217// #define FLECS_CUSTOM_BUILD
218
219#ifndef FLECS_CUSTOM_BUILD
220#define FLECS_ALERTS
221#define FLECS_APP
222// #define FLECS_C /**< C API convenience macros, always enabled */
223#define FLECS_CPP
224#define FLECS_DOC
225// #define FLECS_JOURNAL /**< Journaling addon */
226#define FLECS_JSON
227#define FLECS_HTTP
228#define FLECS_LOG
229#define FLECS_META
230#define FLECS_METRICS
231#define FLECS_MODULE
232#define FLECS_OS_API_IMPL
233// #define FLECS_PERF_TRACE /**< Enable performance tracing */
234#define FLECS_PIPELINE
235#define FLECS_REST
236#define FLECS_PARSER
237#define FLECS_QUERY_DSL
238#define FLECS_SCRIPT
239// #define FLECS_SCRIPT_MATH /**< Math functions for flecs script (may require linking with libm) */
240#define FLECS_SYSTEM
241#define FLECS_STATS
242#define FLECS_TIMER
243#define FLECS_UNITS
244#endif // ifndef FLECS_CUSTOM_BUILD
245
249// #define FLECS_LOW_FOOTPRINT
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
256#endif
257
272#ifndef FLECS_HI_COMPONENT_ID
273#define FLECS_HI_COMPONENT_ID 256
274#endif
275
282#ifndef FLECS_HI_ID_RECORD_ID
283#define FLECS_HI_ID_RECORD_ID 1024
284#endif
285
291#ifndef FLECS_SPARSE_PAGE_BITS
292#define FLECS_SPARSE_PAGE_BITS 6
293#endif
294
297#ifndef FLECS_ENTITY_PAGE_BITS
298#define FLECS_ENTITY_PAGE_BITS 10
299#endif
300
305// #define FLECS_USE_OS_ALLOC
306
309#ifndef FLECS_ID_DESC_MAX
310#define FLECS_ID_DESC_MAX 32
311#endif
312
315#ifndef FLECS_EVENT_DESC_MAX
316#define FLECS_EVENT_DESC_MAX 8
317#endif
318
321#define FLECS_VARIABLE_COUNT_MAX 64
322
325#ifndef FLECS_TERM_COUNT_MAX
326#define FLECS_TERM_COUNT_MAX 32
327#endif
328
331#ifndef FLECS_TERM_ARG_COUNT_MAX
332#define FLECS_TERM_ARG_COUNT_MAX 16
333#endif
334
337#ifndef FLECS_QUERY_VARIABLE_COUNT_MAX
338#define FLECS_QUERY_VARIABLE_COUNT_MAX 64
339#endif
340
343#ifndef FLECS_QUERY_SCOPE_NESTING_MAX
344#define FLECS_QUERY_SCOPE_NESTING_MAX 8
345#endif
346
351#ifndef FLECS_DAG_DEPTH_MAX
352#define FLECS_DAG_DEPTH_MAX 128
353#endif
354
359#define FLECS_TREE_SPAWNER_DEPTH_CACHE_SIZE (6)
360
363#include "flecs/private/api_defines.h"
364
374typedef uint64_t ecs_id_t;
375
382
398typedef struct {
400 int32_t count;
401} ecs_type_t;
402
426
429
432
434typedef struct ecs_term_t ecs_term_t;
435
438
457
462
467typedef struct ecs_iter_t ecs_iter_t;
468
477typedef struct ecs_ref_t ecs_ref_t;
478
483
488
491
494
514typedef void ecs_poly_t;
515
518
525
526typedef struct ecs_table_record_t ecs_table_record_t;
527
530#include "flecs/datastructures/vec.h" /* Vector datatype */
531#include "flecs/datastructures/sparse.h" /* Sparse set */
532#include "flecs/datastructures/block_allocator.h" /* Block allocator */
533#include "flecs/datastructures/stack_allocator.h" /* Stack allocator */
534#include "flecs/datastructures/map.h" /* Map */
535#include "flecs/datastructures/allocator.h" /* Allocator */
536#include "flecs/datastructures/strbuf.h" /* String builder */
537#include "flecs/os_api.h" /* Abstraction for operating system functions */
538
539#ifdef __cplusplus
540extern "C" {
541#endif
542
567typedef void (*ecs_run_action_t)(
568 ecs_iter_t *it);
569
576typedef void (*ecs_iter_action_t)(
577 ecs_iter_t *it);
578
587 ecs_iter_t *it);
588
595 ecs_iter_t *it);
596
599 ecs_entity_t e1,
600 const void *ptr1,
601 ecs_entity_t e2,
602 const void *ptr2);
603
606 ecs_world_t* world,
607 ecs_table_t* table,
608 ecs_entity_t* entities,
609 void* ptr,
610 int32_t size,
611 int32_t lo,
612 int32_t hi,
613 ecs_order_by_action_t order_by);
614
616typedef uint64_t (*ecs_group_by_action_t)(
617 ecs_world_t *world,
618 ecs_table_t *table,
619 ecs_id_t group_id,
620 void *ctx);
621
623typedef void* (*ecs_group_create_action_t)(
624 ecs_world_t *world,
625 uint64_t group_id,
626 void *group_by_ctx); /* from ecs_query_desc_t */
627
630 ecs_world_t *world,
631 uint64_t group_id,
632 void *group_ctx, /* return value from ecs_group_create_action_t */
633 void *group_by_ctx); /* from ecs_query_desc_t */
634
636typedef void (*ecs_module_action_t)(
637 ecs_world_t *world);
638
640typedef void (*ecs_fini_action_t)(
641 ecs_world_t *world,
642 void *ctx);
643
645typedef void (*ecs_ctx_free_t)(
646 void *ctx);
647
649typedef int (*ecs_compare_action_t)(
650 const void *ptr1,
651 const void *ptr2);
652
654typedef uint64_t (*ecs_hash_value_action_t)(
655 const void *ptr);
656
658typedef void (*ecs_xtor_t)(
659 void *ptr,
660 int32_t count,
661 const ecs_type_info_t *type_info);
662
664typedef void (*ecs_copy_t)(
665 void *dst_ptr,
666 const void *src_ptr,
667 int32_t count,
668 const ecs_type_info_t *type_info);
669
671typedef void (*ecs_move_t)(
672 void *dst_ptr,
673 void *src_ptr,
674 int32_t count,
675 const ecs_type_info_t *type_info);
676
678typedef int (*ecs_cmp_t)(
679 const void *a_ptr,
680 const void *b_ptr,
681 const ecs_type_info_t *type_info);
682
684typedef bool (*ecs_equals_t)(
685 const void *a_ptr,
686 const void *b_ptr,
687 const ecs_type_info_t *type_info);
688
690typedef void (*flecs_poly_dtor_t)(
691 ecs_poly_t *poly);
692
711
722
730
731/* Term id flags */
732
737#define EcsSelf (1llu << 63)
738
743#define EcsUp (1llu << 62)
744
749#define EcsTrav (1llu << 61)
750
755#define EcsCascade (1llu << 60)
756
761#define EcsDesc (1llu << 59)
762
767#define EcsIsVariable (1llu << 58)
768
773#define EcsIsEntity (1llu << 57)
774
779#define EcsIsName (1llu << 56)
780
785#define EcsTraverseFlags (EcsSelf|EcsUp|EcsTrav|EcsCascade|EcsDesc)
786
791#define EcsTermRefFlags (EcsTraverseFlags|EcsIsVariable|EcsIsEntity|EcsIsName)
792
807
829
837 int32_t *sizes;
840 uint64_t bloom_filter;
841 ecs_flags32_t flags;
842 int8_t var_count;
843 int8_t term_count;
844 int8_t field_count;
846 /* Bitmasks for quick field information lookups */
847 ecs_termset_t fixed_fields;
848 ecs_termset_t var_fields;
849 ecs_termset_t static_id_fields;
850 ecs_termset_t data_fields;
851 ecs_termset_t write_fields;
852 ecs_termset_t read_fields;
853 ecs_termset_t row_fields;
855 ecs_termset_t set_fields;
859 char **vars;
861 void *ctx;
868 int32_t eval_count;
869};
870
899
907/* Flags that can be used to check which hooks a type has set */
908#define ECS_TYPE_HOOK_CTOR ECS_CAST(ecs_flags32_t, 1 << 0)
909#define ECS_TYPE_HOOK_DTOR ECS_CAST(ecs_flags32_t, 1 << 1)
910#define ECS_TYPE_HOOK_COPY ECS_CAST(ecs_flags32_t, 1 << 2)
911#define ECS_TYPE_HOOK_MOVE ECS_CAST(ecs_flags32_t, 1 << 3)
912#define ECS_TYPE_HOOK_COPY_CTOR ECS_CAST(ecs_flags32_t, 1 << 4)
913#define ECS_TYPE_HOOK_MOVE_CTOR ECS_CAST(ecs_flags32_t, 1 << 5)
914#define ECS_TYPE_HOOK_CTOR_MOVE_DTOR ECS_CAST(ecs_flags32_t, 1 << 6)
915#define ECS_TYPE_HOOK_MOVE_DTOR ECS_CAST(ecs_flags32_t, 1 << 7)
916#define ECS_TYPE_HOOK_CMP ECS_CAST(ecs_flags32_t, 1 << 8)
917#define ECS_TYPE_HOOK_EQUALS ECS_CAST(ecs_flags32_t, 1 << 9)
918
919
920/* Flags that can be used to set/check which hooks of a type are invalid */
921#define ECS_TYPE_HOOK_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 10)
922#define ECS_TYPE_HOOK_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 12)
923#define ECS_TYPE_HOOK_COPY_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 13)
924#define ECS_TYPE_HOOK_MOVE_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 14)
925#define ECS_TYPE_HOOK_COPY_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 15)
926#define ECS_TYPE_HOOK_MOVE_CTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 16)
927#define ECS_TYPE_HOOK_CTOR_MOVE_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 17)
928#define ECS_TYPE_HOOK_MOVE_DTOR_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 18)
929#define ECS_TYPE_HOOK_CMP_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 19)
930#define ECS_TYPE_HOOK_EQUALS_ILLEGAL ECS_CAST(ecs_flags32_t, 1 << 20)
931
932/* Internal debug flag that indicates type hooks have been invoked */
933#define ECS_TYPE_HOOK_IN_USE ECS_CAST(ecs_flags32_t, 1 << 21)
934
935
936/* All valid hook flags */
937#define ECS_TYPE_HOOKS (ECS_TYPE_HOOK_CTOR|ECS_TYPE_HOOK_DTOR|\
938 ECS_TYPE_HOOK_COPY|ECS_TYPE_HOOK_MOVE|ECS_TYPE_HOOK_COPY_CTOR|\
939 ECS_TYPE_HOOK_MOVE_CTOR|ECS_TYPE_HOOK_CTOR_MOVE_DTOR|\
940 ECS_TYPE_HOOK_MOVE_DTOR|ECS_TYPE_HOOK_CMP|ECS_TYPE_HOOK_EQUALS)
941
942/* All invalid hook flags */
943#define ECS_TYPE_HOOKS_ILLEGAL (ECS_TYPE_HOOK_CTOR_ILLEGAL|\
944 ECS_TYPE_HOOK_DTOR_ILLEGAL|ECS_TYPE_HOOK_COPY_ILLEGAL|\
945 ECS_TYPE_HOOK_MOVE_ILLEGAL|ECS_TYPE_HOOK_COPY_CTOR_ILLEGAL|\
946 ECS_TYPE_HOOK_MOVE_CTOR_ILLEGAL|ECS_TYPE_HOOK_CTOR_MOVE_DTOR_ILLEGAL|\
947 ECS_TYPE_HOOK_MOVE_DTOR_ILLEGAL|ECS_TYPE_HOOK_CMP_ILLEGAL|\
948 ECS_TYPE_HOOK_EQUALS_ILLEGAL)
1013
1025
1026#include "flecs/private/api_types.h" /* Supporting API types */
1027#include "flecs/private/api_support.h" /* Supporting API functions */
1028#include "flecs/datastructures/hashmap.h" /* Hashmap */
1029#include "flecs/private/api_internals.h" /* Supporting API functions */
1030
1036
1041typedef struct ecs_entity_desc_t {
1042 int32_t _canary;
1048 const char *name;
1053 const char *sep;
1057 const char *root_sep;
1059 const char *symbol;
1075
1078
1080 const char *add_expr;
1082
1112
1126
1166 /* World */
1170 /* Matched data */
1171 int32_t offset;
1172 int32_t count;
1174 void **ptrs;
1175 const ecs_table_record_t **trs;
1176 const ecs_size_t *sizes;
1181 ecs_flags64_t constrained_vars;
1182 ecs_termset_t set_fields;
1183 ecs_termset_t ref_fields;
1184 ecs_termset_t row_fields;
1185 ecs_termset_t up_fields;
1187 /* Input information */
1191 int32_t event_cur;
1193 /* Query information */
1195 int8_t term_index;
1200 /* Context */
1201 void *param;
1202 void *ctx;
1205 void *run_ctx;
1207 /* Time */
1211 /* Iterator counters */
1214 /* Misc */
1215 ecs_flags32_t flags;
1217 ecs_iter_private_t priv_;
1219 /* Chained iterators */
1224};
1225
1226
1231#define EcsQueryMatchPrefab (1u << 1u)
1232
1237#define EcsQueryMatchDisabled (1u << 2u)
1238
1243#define EcsQueryMatchEmptyTables (1u << 3u)
1244
1249#define EcsQueryAllowUnresolvedByName (1u << 6u)
1250
1255#define EcsQueryTableOnly (1u << 7u)
1256
1267#define EcsQueryDetectChanges (1u << 8u)
1268
1269
1343
1404
1409typedef struct ecs_event_desc_t {
1412
1417
1420
1424
1426 int32_t offset;
1427
1431 int32_t count;
1432
1435
1440 void *param;
1441
1445 const void *const_param;
1446
1449
1451 ecs_flags32_t flags;
1453
1454
1463typedef struct ecs_build_info_t {
1464 const char *compiler;
1465 const char **addons;
1466 const char **flags;
1467 const char *version;
1471 bool debug;
1475
1537
1540 uint64_t id;
1541 int32_t match_count;
1542 int32_t table_count;
1543 void *ctx;
1545
1556typedef struct EcsIdentifier {
1557 char *value;
1558 ecs_size_t length;
1559 uint64_t hash;
1560 uint64_t index_hash;
1561 ecs_hashmap_t *index;
1563
1565typedef struct EcsComponent {
1566 ecs_size_t size;
1567 ecs_size_t alignment;
1569
1574
1583
1584/* Non-fragmenting ChildOf relationship. */
1585typedef struct EcsParent {
1586 ecs_entity_t value;
1587} EcsParent;
1588
1589/* Component with data to instantiate a non-fragmenting tree. */
1590typedef struct {
1591 const char *child_name; /* Name of prefab child */
1592 ecs_table_t *table; /* Table in which child will be stored */
1593 uint32_t child; /* Prefab child entity (without generation) */
1594 int32_t parent_index; /* Index into children vector */
1596
1597typedef struct {
1598 ecs_vec_t children; /* vector<ecs_tree_spawner_child_t> */
1600
1601typedef struct EcsTreeSpawner {
1602 /* Tree instantiation cache, indexed by depth. Tables will have a
1603 * (ParentDepth, depth) pair indicating the hierarchy depth. This means that
1604 * for different depths, the tables the children are created in will also be
1605 * different. Caching tables for different depths therefore speeds up
1606 * instantiating trees even when the top level entity is not at the root. */
1609
1613/* Only include deprecated definitions if deprecated addon is required */
1614#ifdef FLECS_DEPRECATED
1616#endif
1617
1633FLECS_API extern const ecs_id_t ECS_PAIR;
1634
1636FLECS_API extern const ecs_id_t ECS_AUTO_OVERRIDE;
1637
1639FLECS_API extern const ecs_id_t ECS_TOGGLE;
1640
1642FLECS_API extern const ecs_id_t ECS_VALUE_PAIR;
1643
1651/* Builtin component ids */
1652
1654FLECS_API extern const ecs_entity_t ecs_id(EcsComponent);
1655
1657FLECS_API extern const ecs_entity_t ecs_id(EcsIdentifier);
1658
1660FLECS_API extern const ecs_entity_t ecs_id(EcsPoly);
1661
1663FLECS_API extern const ecs_entity_t ecs_id(EcsParent);
1664
1666FLECS_API extern const ecs_entity_t ecs_id(EcsTreeSpawner);
1667
1669FLECS_API extern const ecs_entity_t ecs_id(EcsDefaultChildComponent);
1670
1672FLECS_API extern const ecs_entity_t EcsParentDepth;
1673
1675FLECS_API extern const ecs_entity_t EcsQuery;
1676
1678FLECS_API extern const ecs_entity_t EcsObserver;
1679
1681FLECS_API extern const ecs_entity_t EcsSystem;
1682
1684FLECS_API extern const ecs_entity_t ecs_id(EcsTickSource);
1685
1687FLECS_API extern const ecs_entity_t ecs_id(EcsPipelineQuery);
1688
1690FLECS_API extern const ecs_entity_t ecs_id(EcsTimer);
1691
1693FLECS_API extern const ecs_entity_t ecs_id(EcsRateFilter);
1694
1696FLECS_API extern const ecs_entity_t EcsFlecs;
1697
1699FLECS_API extern const ecs_entity_t EcsFlecsCore;
1700
1702FLECS_API extern const ecs_entity_t EcsWorld;
1703
1705FLECS_API extern const ecs_entity_t EcsWildcard;
1706
1708FLECS_API extern const ecs_entity_t EcsAny;
1709
1711FLECS_API extern const ecs_entity_t EcsThis;
1712
1714FLECS_API extern const ecs_entity_t EcsVariable;
1715
1723FLECS_API extern const ecs_entity_t EcsTransitive;
1724
1732FLECS_API extern const ecs_entity_t EcsReflexive;
1733
1744FLECS_API extern const ecs_entity_t EcsFinal;
1745
1751FLECS_API extern const ecs_entity_t EcsInheritable;
1752
1754FLECS_API extern const ecs_entity_t EcsOnInstantiate;
1755
1759FLECS_API extern const ecs_entity_t EcsOverride;
1760
1764FLECS_API extern const ecs_entity_t EcsInherit;
1765
1770FLECS_API extern const ecs_entity_t EcsDontInherit;
1771
1779FLECS_API extern const ecs_entity_t EcsSymmetric;
1780
1790FLECS_API extern const ecs_entity_t EcsExclusive;
1791
1793FLECS_API extern const ecs_entity_t EcsAcyclic;
1794
1797FLECS_API extern const ecs_entity_t EcsTraversable;
1798
1808FLECS_API extern const ecs_entity_t EcsWith;
1809
1819FLECS_API extern const ecs_entity_t EcsOneOf;
1820
1822FLECS_API extern const ecs_entity_t EcsCanToggle;
1823
1827FLECS_API extern const ecs_entity_t EcsTrait;
1828
1838FLECS_API extern const ecs_entity_t EcsRelationship;
1839
1849FLECS_API extern const ecs_entity_t EcsTarget;
1850
1853FLECS_API extern const ecs_entity_t EcsPairIsTag;
1854
1856FLECS_API extern const ecs_entity_t EcsName;
1857
1859FLECS_API extern const ecs_entity_t EcsSymbol;
1860
1862FLECS_API extern const ecs_entity_t EcsAlias;
1863
1865FLECS_API extern const ecs_entity_t EcsChildOf;
1866
1868FLECS_API extern const ecs_entity_t EcsIsA;
1869
1871FLECS_API extern const ecs_entity_t EcsDependsOn;
1872
1874FLECS_API extern const ecs_entity_t EcsSlotOf;
1875
1877FLECS_API extern const ecs_entity_t EcsOrderedChildren;
1878
1880FLECS_API extern const ecs_entity_t EcsModule;
1881
1884FLECS_API extern const ecs_entity_t EcsPrefab;
1885
1888FLECS_API extern const ecs_entity_t EcsDisabled;
1889
1893FLECS_API extern const ecs_entity_t EcsNotQueryable;
1894
1896FLECS_API extern const ecs_entity_t EcsOnAdd;
1897
1899FLECS_API extern const ecs_entity_t EcsOnRemove;
1900
1902FLECS_API extern const ecs_entity_t EcsOnSet;
1903
1905FLECS_API extern const ecs_entity_t EcsMonitor;
1906
1908FLECS_API extern const ecs_entity_t EcsOnTableCreate;
1909
1911FLECS_API extern const ecs_entity_t EcsOnTableDelete;
1912
1914FLECS_API extern const ecs_entity_t EcsOnDelete;
1915
1918FLECS_API extern const ecs_entity_t EcsOnDeleteTarget;
1919
1922FLECS_API extern const ecs_entity_t EcsRemove;
1923
1926FLECS_API extern const ecs_entity_t EcsDelete;
1927
1930FLECS_API extern const ecs_entity_t EcsPanic;
1931
1934FLECS_API extern const ecs_entity_t EcsSingleton;
1935
1937FLECS_API extern const ecs_entity_t EcsSparse;
1938
1940FLECS_API extern const ecs_entity_t EcsDontFragment;
1941
1943FLECS_API extern const ecs_entity_t EcsPredEq;
1944
1946FLECS_API extern const ecs_entity_t EcsPredMatch;
1947
1949FLECS_API extern const ecs_entity_t EcsPredLookup;
1950
1952FLECS_API extern const ecs_entity_t EcsScopeOpen;
1953
1955FLECS_API extern const ecs_entity_t EcsScopeClose;
1956
1961FLECS_API extern const ecs_entity_t EcsEmpty;
1962
1963FLECS_API extern const ecs_entity_t ecs_id(EcsPipeline);
1964FLECS_API extern const ecs_entity_t EcsOnStart;
1965FLECS_API extern const ecs_entity_t EcsPreFrame;
1966FLECS_API extern const ecs_entity_t EcsOnLoad;
1967FLECS_API extern const ecs_entity_t EcsPostLoad;
1968FLECS_API extern const ecs_entity_t EcsPreUpdate;
1969FLECS_API extern const ecs_entity_t EcsOnUpdate;
1970FLECS_API extern const ecs_entity_t EcsOnValidate;
1971FLECS_API extern const ecs_entity_t EcsPostUpdate;
1972FLECS_API extern const ecs_entity_t EcsPreStore;
1973FLECS_API extern const ecs_entity_t EcsOnStore;
1974FLECS_API extern const ecs_entity_t EcsPostFrame;
1975FLECS_API extern const ecs_entity_t EcsPhase;
1977FLECS_API extern const ecs_entity_t EcsConstant;
1981#define EcsLastInternalComponentId (ecs_id(EcsTreeSpawner))
1982
1985#define EcsFirstUserComponentId (8)
1986
1989#define EcsFirstUserEntityId (FLECS_HI_COMPONENT_ID + 128)
1990
1991/* When visualized the reserved id ranges look like this:
1992 * - [1..8]: Builtin components
1993 * - [9..FLECS_HI_COMPONENT_ID]: Low ids reserved for application components
1994 * - [FLECS_HI_COMPONENT_ID + 1..EcsFirstUserEntityId]: Builtin entities
1995 */
1996
2018FLECS_API
2020
2027FLECS_API
2029
2037FLECS_API
2039 int argc,
2040 char *argv[]);
2041
2048FLECS_API
2050 ecs_world_t *world);
2051
2059FLECS_API
2061 const ecs_world_t *world);
2062
2070FLECS_API
2072 ecs_world_t *world,
2073 ecs_fini_action_t action,
2074 void *ctx);
2075
2082
2109FLECS_API
2111 const ecs_world_t *world);
2112
2120FLECS_API
2122 const ecs_world_t *world);
2123
2149FLECS_API
2151 ecs_world_t *world,
2152 ecs_ftime_t delta_time);
2153
2160FLECS_API
2162 ecs_world_t *world);
2163
2171FLECS_API
2173 ecs_world_t *world,
2174 ecs_fini_action_t action,
2175 void *ctx);
2176
2183FLECS_API
2185 ecs_world_t *world);
2186
2193FLECS_API
2195 const ecs_world_t *world);
2196
2209 ecs_world_t *world,
2210 bool enable);
2211
2223 ecs_world_t *world,
2224 bool enable);
2225
2241FLECS_API
2243 ecs_world_t *world,
2244 ecs_ftime_t fps);
2245
2259FLECS_API
2261 ecs_world_t *world,
2262 ecs_flags32_t flags);
2263
2340FLECS_API
2342 ecs_world_t *world,
2343 bool multi_threaded);
2344
2352FLECS_API
2354 ecs_world_t *world);
2355
2361FLECS_API
2363 ecs_world_t *stage);
2364
2381FLECS_API
2383 ecs_world_t *world);
2384
2398FLECS_API
2400 ecs_world_t *world);
2401
2416FLECS_API
2418 ecs_world_t *world);
2419
2430FLECS_API
2432 ecs_world_t *world);
2433
2445FLECS_API
2447 const ecs_world_t *world);
2448
2460FLECS_API
2462 const ecs_world_t *world);
2463
2477FLECS_API
2479 ecs_world_t *world,
2480 int32_t stages);
2481
2488FLECS_API
2490 const ecs_world_t *world);
2491
2507FLECS_API
2509 const ecs_world_t *world,
2510 int32_t stage_id);
2511
2519FLECS_API
2521 const ecs_world_t *world);
2522
2530FLECS_API
2532 ecs_world_t *world);
2533
2538FLECS_API
2540 ecs_world_t *stage);
2541
2549FLECS_API
2551 const ecs_world_t *world);
2552
2568FLECS_API
2570 ecs_world_t *world,
2571 void *ctx,
2572 ecs_ctx_free_t ctx_free);
2573
2582FLECS_API
2584 ecs_world_t *world,
2585 void *ctx,
2586 ecs_ctx_free_t ctx_free);
2587
2595FLECS_API
2597 const ecs_world_t *world);
2598
2606FLECS_API
2608 const ecs_world_t *world);
2609
2615FLECS_API
2617
2623FLECS_API
2625 const ecs_world_t *world);
2626
2635FLECS_API
2637 ecs_world_t *world,
2638 int32_t entity_count);
2639
2654FLECS_API
2656 ecs_world_t *world);
2657
2673FLECS_API
2675 ecs_world_t *world,
2676 ecs_entity_t id_start,
2677 ecs_entity_t id_end);
2678
2689FLECS_API
2691 ecs_world_t *world,
2692 bool enable);
2693
2699FLECS_API
2701 const ecs_world_t *world);
2702
2716FLECS_API
2718 ecs_world_t *world,
2719 ecs_flags32_t flags);
2720
2732
2762FLECS_API
2764 ecs_world_t *world,
2765 const ecs_delete_empty_tables_desc_t *desc);
2766
2772FLECS_API
2774 const ecs_poly_t *poly);
2775
2781FLECS_API
2783 const ecs_poly_t *poly);
2784
2798FLECS_API
2800 const ecs_poly_t *object,
2801 int32_t type);
2802
2806#define flecs_poly_is(object, type)\
2807 flecs_poly_is_(object, type##_magic)
2808
2817FLECS_API
2819 ecs_entity_t first,
2820 ecs_entity_t second);
2821
2844FLECS_API
2846 ecs_world_t *world,
2847 const char *thread_name);
2848
2871FLECS_API
2873 ecs_world_t *world,
2874 bool lock_world);
2875
2902FLECS_API
2904 ecs_world_t *world);
2905
2923FLECS_API
2925 ecs_world_t *world);
2926
2935FLECS_API
2937 ecs_world_t *world,
2938 ecs_id_t component);
2939
2947FLECS_API
2949 ecs_world_t *world,
2950 ecs_table_t *table);
2951
2970FLECS_API
2972 ecs_world_t *world,
2973 const ecs_entity_desc_t *desc);
2974
3001FLECS_API
3003 ecs_world_t *world,
3004 const ecs_bulk_desc_t *desc);
3005
3015FLECS_API
3017 ecs_world_t *world,
3018 ecs_id_t component,
3019 int32_t count);
3020
3036FLECS_API
3038 ecs_world_t *world,
3039 ecs_entity_t dst,
3040 ecs_entity_t src,
3041 bool copy_value);
3042
3051FLECS_API
3053 ecs_world_t *world,
3054 ecs_entity_t entity);
3055
3063FLECS_API
3065 ecs_world_t *world,
3066 ecs_id_t component);
3067
3085FLECS_API
3087 ecs_world_t *world,
3088 ecs_entity_t parent,
3089 const ecs_entity_t *children,
3090 int32_t child_count);
3091
3101FLECS_API
3103 const ecs_world_t *world,
3104 ecs_entity_t parent);
3105
3123FLECS_API
3125 ecs_world_t *world,
3126 ecs_entity_t entity,
3127 ecs_id_t component);
3128
3137FLECS_API
3139 ecs_world_t *world,
3140 ecs_entity_t entity,
3141 ecs_id_t component);
3142
3194FLECS_API
3196 ecs_world_t *world,
3197 ecs_entity_t entity,
3198 ecs_id_t component);
3199
3206FLECS_API
3208 ecs_world_t *world,
3209 ecs_entity_t entity);
3210
3218FLECS_API
3220 ecs_world_t *world,
3221 ecs_id_t component);
3222
3237FLECS_API
3239 ecs_world_t *world,
3240 ecs_id_t component);
3241
3249FLECS_API
3251 const ecs_world_t *world);
3252
3271FLECS_API
3273 ecs_world_t *world,
3274 ecs_entity_t entity,
3275 bool enabled);
3276
3290FLECS_API
3292 ecs_world_t *world,
3293 ecs_entity_t entity,
3294 ecs_id_t component,
3295 bool enable);
3296
3307FLECS_API
3309 const ecs_world_t *world,
3310 ecs_entity_t entity,
3311 ecs_id_t component);
3312
3336FLECS_API
3337FLECS_ALWAYS_INLINE const void* ecs_get_id(
3338 const ecs_world_t *world,
3339 ecs_entity_t entity,
3340 ecs_id_t component);
3341
3356FLECS_API
3357FLECS_ALWAYS_INLINE void* ecs_get_mut_id(
3358 const ecs_world_t *world,
3359 ecs_entity_t entity,
3360 ecs_id_t component);
3361
3378FLECS_API
3380 ecs_world_t *world,
3381 ecs_entity_t entity,
3382 ecs_id_t component,
3383 size_t size);
3384
3395FLECS_ALWAYS_INLINE FLECS_API
3397 const ecs_world_t *world,
3398 ecs_entity_t entity,
3399 ecs_id_t component);
3400
3411FLECS_ALWAYS_INLINE FLECS_API
3413 const ecs_world_t *world,
3414 ecs_ref_t *ref,
3415 ecs_id_t component);
3416
3424FLECS_ALWAYS_INLINE FLECS_API
3426 const ecs_world_t *world,
3427 ecs_ref_t *ref);
3428
3449FLECS_API
3451 ecs_world_t *world,
3452 ecs_entity_t entity,
3453 ecs_id_t component,
3454 size_t size,
3455 bool *is_new);
3456
3466FLECS_API
3468 ecs_world_t *world,
3469 ecs_entity_t entity,
3470 ecs_id_t component);
3471
3487FLECS_API
3489 ecs_world_t *world,
3490 ecs_entity_t entity,
3491 ecs_id_t component,
3492 size_t size,
3493 const void *ptr);
3494
3523FLECS_API
3525 const ecs_world_t *world,
3526 ecs_entity_t e);
3527
3557FLECS_API
3559 const ecs_world_t *world,
3560 ecs_entity_t e);
3561
3567FLECS_API
3569 ecs_entity_t e);
3570
3587FLECS_API
3589 const ecs_world_t *world,
3590 ecs_entity_t e);
3591
3614FLECS_API
3616 ecs_world_t *world,
3617 ecs_entity_t entity);
3618
3637FLECS_API
3639 ecs_world_t *world,
3640 ecs_id_t component);
3641
3649FLECS_API
3651 const ecs_world_t *world,
3652 ecs_entity_t entity);
3653
3668FLECS_API
3670 ecs_world_t *world,
3671 ecs_entity_t entity);
3672
3678FLECS_API
3680 ecs_entity_t entity);
3681
3697FLECS_API
3699 const ecs_world_t *world,
3700 ecs_entity_t entity);
3701
3708FLECS_API
3710 const ecs_world_t *world,
3711 ecs_entity_t entity);
3712
3720FLECS_API
3722 const ecs_world_t *world,
3723 const ecs_type_t* type);
3724
3736FLECS_API
3738 const ecs_world_t *world,
3739 const ecs_table_t *table);
3740
3755FLECS_API
3757 const ecs_world_t *world,
3758 ecs_entity_t entity);
3759
3770FLECS_API
3771FLECS_ALWAYS_INLINE bool ecs_has_id(
3772 const ecs_world_t *world,
3773 ecs_entity_t entity,
3774 ecs_id_t component);
3775
3786FLECS_API
3787FLECS_ALWAYS_INLINE bool ecs_owns_id(
3788 const ecs_world_t *world,
3789 ecs_entity_t entity,
3790 ecs_id_t component);
3791
3806FLECS_API
3808 const ecs_world_t *world,
3809 ecs_entity_t entity,
3810 ecs_entity_t rel,
3811 int32_t index);
3812
3826FLECS_API
3828 const ecs_world_t *world,
3829 ecs_entity_t entity);
3830
3844FLECS_API
3846 ecs_world_t *world,
3847 ecs_entity_t parent,
3848 const char *name);
3849
3870FLECS_API
3872 const ecs_world_t *world,
3873 ecs_entity_t entity,
3874 ecs_entity_t rel,
3875 ecs_id_t component);
3876
3887FLECS_API
3889 const ecs_world_t *world,
3890 ecs_entity_t entity,
3891 ecs_entity_t rel);
3892
3900FLECS_API
3902 const ecs_world_t *world,
3903 ecs_id_t entity);
3904
3924FLECS_API
3925const char* ecs_get_name(
3926 const ecs_world_t *world,
3927 ecs_entity_t entity);
3928
3938FLECS_API
3939const char* ecs_get_symbol(
3940 const ecs_world_t *world,
3941 ecs_entity_t entity);
3942
3956FLECS_API
3958 ecs_world_t *world,
3959 ecs_entity_t entity,
3960 const char *name);
3961
3975FLECS_API
3977 ecs_world_t *world,
3978 ecs_entity_t entity,
3979 const char *symbol);
3980
3992FLECS_API
3994 ecs_world_t *world,
3995 ecs_entity_t entity,
3996 const char *alias);
3997
4013FLECS_API
4015 const ecs_world_t *world,
4016 const char *path);
4017
4032FLECS_API
4034 const ecs_world_t *world,
4035 ecs_entity_t parent,
4036 const char *name);
4037
4060FLECS_API
4062 const ecs_world_t *world,
4063 ecs_entity_t parent,
4064 const char *path,
4065 const char *sep,
4066 const char *prefix,
4067 bool recursive);
4068
4086FLECS_API
4088 const ecs_world_t *world,
4089 const char *symbol,
4090 bool lookup_as_path,
4091 bool recursive);
4092
4114FLECS_API
4116 const ecs_world_t *world,
4117 ecs_entity_t parent,
4118 ecs_entity_t child,
4119 const char *sep,
4120 const char *prefix);
4121
4134FLECS_API
4136 const ecs_world_t *world,
4137 ecs_entity_t parent,
4138 ecs_entity_t child,
4139 const char *sep,
4140 const char *prefix,
4141 ecs_strbuf_t *buf,
4142 bool escape);
4143
4159FLECS_API
4161 ecs_world_t *world,
4162 ecs_entity_t parent,
4163 const char *path,
4164 const char *sep,
4165 const char *prefix);
4166
4181FLECS_API
4183 ecs_world_t *world,
4184 ecs_entity_t entity,
4185 ecs_entity_t parent,
4186 const char *path,
4187 const char *sep,
4188 const char *prefix);
4189
4203FLECS_API
4205 ecs_world_t *world,
4206 ecs_entity_t scope);
4207
4215FLECS_API
4217 const ecs_world_t *world);
4218
4228FLECS_API
4230 ecs_world_t *world,
4231 const char *prefix);
4232
4259FLECS_API
4261 ecs_world_t *world,
4262 const ecs_entity_t *lookup_path);
4263
4270FLECS_API
4272 const ecs_world_t *world);
4273
4298FLECS_API
4300 ecs_world_t *world,
4301 const ecs_component_desc_t *desc);
4302
4312FLECS_API
4314 const ecs_world_t *world,
4315 ecs_id_t component);
4316
4328FLECS_API
4330 ecs_world_t *world,
4331 ecs_entity_t component,
4332 const ecs_type_hooks_t *hooks);
4333
4340FLECS_API
4342 const ecs_world_t *world,
4343 ecs_entity_t component);
4344
4368FLECS_API
4370 const ecs_world_t *world,
4371 ecs_id_t component);
4372
4381FLECS_API
4383 const ecs_world_t *world,
4384 ecs_id_t component);
4385
4405FLECS_API
4407 const ecs_world_t *world,
4408 ecs_id_t component);
4409
4418FLECS_API
4420 ecs_id_t component,
4421 ecs_id_t pattern);
4422
4428FLECS_API
4430 ecs_id_t component);
4431
4437FLECS_API
4439 ecs_id_t component);
4440
4447 ecs_id_t component);
4448
4462FLECS_API
4464 const ecs_world_t *world,
4465 ecs_id_t component);
4466
4475FLECS_API
4476ecs_flags32_t ecs_id_get_flags(
4477 const ecs_world_t *world,
4478 ecs_id_t component);
4479
4490FLECS_API
4492 uint64_t component_flags);
4493
4509FLECS_API
4511 const ecs_world_t *world,
4512 ecs_id_t component);
4513
4521FLECS_API
4523 const ecs_world_t *world,
4524 ecs_id_t component,
4525 ecs_strbuf_t *buf);
4526
4534FLECS_API
4536 const ecs_world_t *world,
4537 const char *expr);
4538
4554FLECS_API
4556 const ecs_term_ref_t *ref);
4557
4569FLECS_API
4571 const ecs_term_t *term);
4572
4587FLECS_API
4589 const ecs_term_t *term);
4590
4603FLECS_API
4605 const ecs_term_t *term);
4606
4615FLECS_API
4617 const ecs_world_t *world,
4618 const ecs_term_t *term);
4619
4627FLECS_API
4629 const ecs_query_t *query);
4630
4671FLECS_API
4673 const ecs_world_t *world,
4674 ecs_id_t component);
4675
4681FLECS_API
4683 ecs_iter_t *it);
4684
4707FLECS_API
4708FLECS_ALWAYS_INLINE ecs_iter_t ecs_children(
4709 const ecs_world_t *world,
4710 ecs_entity_t parent);
4711
4719FLECS_API
4720FLECS_ALWAYS_INLINE ecs_iter_t ecs_children_w_rel(
4721 const ecs_world_t *world,
4722 ecs_entity_t relationship,
4723 ecs_entity_t parent);
4724
4730FLECS_API
4732 ecs_iter_t *it);
4733
4749FLECS_API
4751 ecs_world_t *world,
4752 const ecs_query_desc_t *desc);
4753
4758FLECS_API
4760 ecs_query_t *query);
4761
4770FLECS_API
4772 const ecs_query_t *query,
4773 const char *name);
4774
4782FLECS_API
4784 const ecs_query_t *query,
4785 int32_t var_id);
4786
4797FLECS_API
4799 const ecs_query_t *query,
4800 int32_t var_id);
4801
4870FLECS_API
4872 const ecs_world_t *world,
4873 const ecs_query_t *query);
4874
4882FLECS_API
4884 ecs_iter_t *it);
4885
4904FLECS_API
4906 const ecs_query_t *query,
4907 ecs_entity_t entity,
4908 ecs_iter_t *it);
4909
4928FLECS_API
4930 const ecs_query_t *query,
4931 ecs_table_t *table,
4932 ecs_iter_t *it);
4933
4960FLECS_API
4962 const ecs_query_t *query,
4963 ecs_table_range_t *range,
4964 ecs_iter_t *it);
4965
4973FLECS_API
4975 const ecs_query_t *query);
4976
4986FLECS_API
4988 const ecs_query_t *query);
4989
5004FLECS_API
5006 const ecs_query_t *query,
5007 const ecs_iter_t *it);
5008
5014FLECS_API
5016 const ecs_query_t *query);
5017
5035FLECS_API
5037 ecs_query_t *query,
5038 ecs_iter_t *it,
5039 const char *expr);
5040
5068FLECS_API
5070 ecs_query_t *query);
5071
5080FLECS_API
5082 const ecs_world_t *world,
5083 ecs_entity_t query);
5084
5095FLECS_API
5097 ecs_iter_t *it);
5098
5121FLECS_API
5123 ecs_iter_t *it,
5124 uint64_t group_id);
5125
5151FLECS_API
5152const ecs_map_t* ecs_query_get_groups(
5153 const ecs_query_t *query);
5154
5163FLECS_API
5165 const ecs_query_t *query,
5166 uint64_t group_id);
5167
5176FLECS_API
5178 const ecs_query_t *query,
5179 uint64_t group_id);
5180
5189
5196FLECS_API
5198 const ecs_query_t *query);
5199
5205FLECS_API
5207 const ecs_query_t *query);
5208
5217FLECS_API
5219 const ecs_query_t *query);
5220
5249FLECS_API
5251 ecs_world_t *world,
5252 ecs_event_desc_t *desc);
5253
5264FLECS_API
5266 ecs_world_t *world,
5267 ecs_event_desc_t *desc);
5268
5279FLECS_API
5281 ecs_world_t *world,
5282 const ecs_observer_desc_t *desc);
5283
5292FLECS_API
5294 const ecs_world_t *world,
5295 ecs_entity_t observer);
5296
5319FLECS_API
5321 ecs_iter_t *it);
5322
5332FLECS_API
5334 ecs_iter_t *it);
5335
5347FLECS_API
5349 ecs_iter_t *it);
5350
5363FLECS_API
5365 ecs_iter_t *it);
5366
5374FLECS_API
5376 ecs_iter_t *it);
5377
5416FLECS_API
5418 ecs_iter_t *it,
5419 int32_t var_id,
5420 ecs_entity_t entity);
5421
5432FLECS_API
5434 ecs_iter_t *it,
5435 int32_t var_id,
5436 const ecs_table_t *table);
5437
5448FLECS_API
5450 ecs_iter_t *it,
5451 int32_t var_id,
5452 const ecs_table_range_t *range);
5453
5466FLECS_API
5468 ecs_iter_t *it,
5469 int32_t var_id);
5470
5477FLECS_API
5479 const ecs_iter_t *it,
5480 int32_t var_id);
5481
5487FLECS_API
5489 const ecs_iter_t *it);
5490
5496FLECS_API
5498 const ecs_iter_t *it);
5499
5513FLECS_API
5515 ecs_iter_t *it,
5516 int32_t var_id);
5517
5531FLECS_API
5533 ecs_iter_t *it,
5534 int32_t var_id);
5535
5547FLECS_API
5549 ecs_iter_t *it,
5550 int32_t var_id);
5551
5563FLECS_API
5565 const ecs_iter_t *it);
5566
5578FLECS_API
5580 ecs_iter_t *it);
5581
5593FLECS_API
5595 const ecs_iter_t *it);
5596
5612FLECS_API
5614 const ecs_iter_t *it,
5615 int32_t offset,
5616 int32_t limit);
5617
5624FLECS_API
5626 ecs_iter_t *it);
5627
5648FLECS_API
5650 const ecs_iter_t *it,
5651 int32_t index,
5652 int32_t count);
5653
5660FLECS_API
5662 ecs_iter_t *it);
5663
5705FLECS_API
5707 const ecs_iter_t *it,
5708 size_t size,
5709 int8_t index);
5710
5732FLECS_API
5734 const ecs_iter_t *it,
5735 size_t size,
5736 int8_t index,
5737 int32_t row);
5738
5747FLECS_API
5749 const ecs_iter_t *it,
5750 int8_t index);
5751
5762FLECS_API
5764 const ecs_iter_t *it,
5765 int8_t index);
5766
5773FLECS_API
5775 const ecs_iter_t *it,
5776 int8_t index);
5777
5784FLECS_API
5786 const ecs_iter_t *it,
5787 int8_t index);
5788
5797FLECS_API
5799 const ecs_iter_t *it,
5800 int8_t index);
5801
5809FLECS_API
5811 const ecs_iter_t *it,
5812 int8_t index);
5813
5821FLECS_API
5823 const ecs_iter_t *it,
5824 int8_t index);
5825
5839FLECS_API
5841 const ecs_iter_t *it,
5842 int8_t index);
5843
5859FLECS_API
5861 const ecs_table_t *table);
5862
5873FLECS_API
5875 const ecs_world_t *world,
5876 const ecs_table_t *table,
5877 ecs_id_t component);
5878
5888FLECS_API
5890 const ecs_world_t *world,
5891 const ecs_table_t *table,
5892 ecs_id_t component);
5893
5901FLECS_API
5903 const ecs_table_t *table);
5904
5918FLECS_API
5920 const ecs_table_t *table,
5921 int32_t index);
5922
5931FLECS_API
5933 const ecs_table_t *table,
5934 int32_t index);
5935
5944FLECS_API
5946 const ecs_table_t *table,
5947 int32_t index,
5948 int32_t offset);
5949
5959FLECS_API
5961 const ecs_world_t *world,
5962 const ecs_table_t *table,
5963 ecs_id_t component,
5964 int32_t offset);
5965
5973FLECS_API
5975 const ecs_table_t *table,
5976 int32_t index);
5977
5984FLECS_API
5986 const ecs_table_t *table);
5987
5995FLECS_API
5997 const ecs_table_t *table);
5998
6005FLECS_API
6007 const ecs_table_t *table);
6008
6019FLECS_API
6021 const ecs_world_t *world,
6022 const ecs_table_t *table,
6023 ecs_id_t component);
6024
6035FLECS_API
6037 const ecs_world_t *world,
6038 const ecs_table_t *table,
6039 ecs_entity_t relationship,
6040 int32_t index);
6041
6052FLECS_API
6054 const ecs_world_t *world,
6055 const ecs_table_t *table,
6056 ecs_entity_t rel);
6057
6067FLECS_API
6069 ecs_world_t *world,
6070 ecs_table_t *table,
6071 ecs_id_t component);
6072
6083FLECS_API
6085 ecs_world_t *world,
6086 const ecs_id_t *ids,
6087 int32_t id_count);
6088
6098FLECS_API
6100 ecs_world_t *world,
6101 ecs_table_t *table,
6102 ecs_id_t component);
6103
6119FLECS_API
6121 ecs_world_t *world,
6122 ecs_table_t *table);
6123
6130FLECS_API
6132 ecs_world_t *world,
6133 ecs_table_t *table);
6134
6144FLECS_API
6146 ecs_table_t *table,
6147 ecs_flags32_t flags);
6148
6156FLECS_API
6158 const ecs_table_t *table);
6159
6167FLECS_API
6169 ecs_world_t* world,
6170 ecs_table_t* table,
6171 int32_t row_1,
6172 int32_t row_2);
6173
6196FLECS_API
6198 ecs_world_t *world,
6199 ecs_entity_t entity,
6200 ecs_record_t *record,
6201 ecs_table_t *table,
6202 const ecs_type_t *added,
6203 const ecs_type_t *removed);
6204
6205
6225FLECS_API
6227 const ecs_world_t *world,
6228 const ecs_table_t *table,
6229 ecs_id_t component,
6230 ecs_id_t *component_out);
6231
6267FLECS_API
6269 const ecs_world_t *world,
6270 const ecs_table_t *table,
6271 int32_t offset,
6272 ecs_id_t component,
6273 ecs_id_t *component_out);
6274
6316FLECS_API
6318 const ecs_world_t *world,
6319 const ecs_table_t *table,
6320 int32_t offset,
6321 ecs_id_t component,
6322 ecs_entity_t rel,
6323 ecs_flags64_t flags, /* EcsSelf and/or EcsUp */
6324 ecs_entity_t *tgt_out,
6325 ecs_id_t *component_out,
6326 struct ecs_table_record_t **tr_out);
6327
6328/* Up traversal from entity */
6329FLECS_API
6330int32_t ecs_search_relation_for_entity(
6331 const ecs_world_t *world,
6332 ecs_entity_t entity,
6333 ecs_id_t id,
6334 ecs_entity_t rel,
6335 bool self,
6337 ecs_entity_t *tgt_out,
6338 ecs_id_t *id_out,
6339 struct ecs_table_record_t **tr_out);
6340
6348FLECS_API
6350 ecs_world_t* world,
6351 ecs_table_t* table);
6352
6369FLECS_API
6371 const ecs_world_t *world,
6372 ecs_entity_t type,
6373 void *ptr);
6374
6382FLECS_API
6384 const ecs_world_t *world,
6385 const ecs_type_info_t *ti,
6386 void *ptr);
6387
6394FLECS_API
6396 ecs_world_t *world,
6397 ecs_entity_t type);
6398
6406 ecs_world_t *world,
6407 const ecs_type_info_t *ti);
6408
6417 const ecs_world_t *world,
6418 const ecs_type_info_t *ti,
6419 void *ptr);
6420
6428FLECS_API
6430 const ecs_world_t *world,
6431 ecs_entity_t type,
6432 void* ptr);
6433
6441FLECS_API
6443 ecs_world_t *world,
6444 ecs_entity_t type,
6445 void* ptr);
6446
6455FLECS_API
6457 const ecs_world_t *world,
6458 const ecs_type_info_t *ti,
6459 void* dst,
6460 const void *src);
6461
6470FLECS_API
6472 const ecs_world_t *world,
6473 ecs_entity_t type,
6474 void* dst,
6475 const void *src);
6476
6486 const ecs_world_t *world,
6487 const ecs_type_info_t *ti,
6488 void* dst,
6489 void *src);
6490
6500 const ecs_world_t *world,
6501 ecs_entity_t type,
6502 void* dst,
6503 void *src);
6504
6514 const ecs_world_t *world,
6515 const ecs_type_info_t *ti,
6516 void* dst,
6517 void *src);
6518
6528 const ecs_world_t *world,
6529 ecs_entity_t type,
6530 void* dst,
6531 void *src);
6532
6546#include "flecs/addons/flecs_c.h"
6547
6548#ifdef __cplusplus
6549}
6550#endif
6551
6552#include "flecs/private/addons.h"
6553
6554#endif
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 auto override for 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 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 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 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 ass...
struct EcsComponent EcsComponent
Component information.
const ecs_entity_t EcsScopeClose
Marker used to indicate the end of a scope (}) in queries.
const ecs_entity_t EcsOnRemove
Event that triggers when an id is removed from an entity.
const ecs_entity_t EcsThis
This entity.
const ecs_entity_t EcsWildcard
Wildcard entity ("*").
const ecs_entity_t EcsName
Tag to indicate name identifier.
const ecs_entity_t EcsAcyclic
Marks a relationship as acyclic.
const ecs_entity_t EcsSymmetric
Marks relationship as commutative.
const ecs_entity_t EcsAlias
Tag to indicate alias identifier.
const ecs_entity_t EcsOnSet
Event that triggers when a component is set for an entity.
const ecs_entity_t EcsReflexive
Marks a relationship as reflexive.
const ecs_entity_t EcsTrait
Can be added to components to indicate it is a trait.
const ecs_entity_t EcsEmpty
Tag used to indicate query is empty.
const ecs_entity_t EcsOneOf
Ensure that relationship target is child of specified entity.
const ecs_entity_t EcsOnTableDelete
Event that triggers when a table is deleted.
const ecs_entity_t EcsOnTableCreate
Event that triggers when a table is created.
const ecs_entity_t EcsObserver
Tag added to observers.
const ecs_entity_t EcsQuery
Tag added to queries.
const ecs_entity_t EcsRelationship
Ensure that an entity is always used in pair as relationship.
const ecs_entity_t EcsSingleton
Mark component as singleton.
const ecs_entity_t EcsOnStart
OnStart pipeline phase.
const ecs_entity_t EcsNotQueryable
Trait added to entities that should never be returned by queries.
const ecs_entity_t EcsOnStore
OnStore pipeline phase.
const ecs_entity_t EcsOrderedChildren
Tag that when added to a parent ensures stable order of ecs_children result.
const ecs_entity_t EcsDontFragment
Mark component as non-fragmenting.
const ecs_entity_t EcsTraversable
Marks a relationship as traversable.
const ecs_entity_t EcsPredLookup
Marker used to indicate $var ~= "pattern" matching in queries.
const ecs_entity_t EcsPreStore
PreStore pipeline phase.
const ecs_entity_t EcsOnLoad
OnLoad pipeline phase.
const ecs_entity_t EcsIsA
Used to express inheritance relationships.
const ecs_entity_t EcsExclusive
Can be added to relationship to indicate that the relationship can only occur once on an entity.
const ecs_entity_t EcsSymbol
Tag to indicate symbol identifier.
const ecs_entity_t EcsDependsOn
Used to express dependency relationships.
const ecs_entity_t EcsTransitive
Marks a relationship as transitive.
const ecs_entity_t EcsDelete
Delete cleanup policy.
const ecs_entity_t EcsChildOf
Used to express parent-child relationships.
const ecs_entity_t EcsFlecsCore
Core module scope.
const ecs_entity_t EcsMonitor
Event that triggers observer when an entity starts/stops matching a query.
const ecs_entity_t EcsCanToggle
Mark a component as toggleable with ecs_enable_id().
const ecs_entity_t EcsPredEq
Marker used to indicate $var == ... matching in queries.
const ecs_entity_t EcsPhase
Phase pipeline phase.
const ecs_entity_t EcsWorld
Entity associated with world (used for "attaching" components to world)
const ecs_entity_t EcsScopeOpen
Marker used to indicate the start of a scope ({) in queries.
const ecs_entity_t EcsPostUpdate
PostUpdate pipeline phase.
const ecs_entity_t EcsOnValidate
OnValidate pipeline phase.
const ecs_entity_t EcsRemove
Remove cleanup policy.
const ecs_entity_t EcsOverride
Override component on instantiate.
const ecs_entity_t EcsPredMatch
Marker used to indicate $var == "name" matching in queries.
const ecs_entity_t EcsInherit
Inherit component on instantiate.
const ecs_entity_t EcsSlotOf
Used to express a slot (used with prefab inheritance)
const ecs_entity_t EcsModule
Tag added to module entities.
const ecs_entity_t EcsSparse
Mark component as sparse.
const ecs_entity_t EcsPreUpdate
PreUpdate pipeline phase.
const ecs_entity_t EcsOnAdd
Event that triggers when an id is added to an entity.
const ecs_entity_t EcsPrefab
Tag added to prefab entities.
const ecs_entity_t EcsOnInstantiate
Relationship that specifies component inheritance behavior.
const ecs_entity_t EcsPostFrame
PostFrame pipeline phase.
const ecs_entity_t EcsInheritable
Mark component as inheritable.
const ecs_entity_t EcsAny
Any entity ("_").
const ecs_entity_t EcsTarget
Ensure that an entity is always used in pair as target.
const ecs_entity_t EcsParentDepth
Relationship storing the entity's depth in a non-fragmenting hierarchy.
const ecs_entity_t EcsWith
Ensure that a component always is added together with another component.
const ecs_entity_t EcsPostLoad
PostLoad pipeline phase.
const ecs_entity_t EcsOnDelete
Relationship used for specifying cleanup behavior.
const ecs_entity_t EcsOnDeleteTarget
Relationship used to define what should happen when a target entity (second element of a pair) is del...
const ecs_entity_t EcsPreFrame
PreFrame pipeline phase.
const ecs_entity_t EcsFlecs
Root scope for builtin flecs entities.
const ecs_entity_t EcsSystem
Tag added to systems.
const ecs_entity_t EcsOnUpdate
OnUpdate pipeline phase.
const ecs_entity_t EcsDisabled
When this tag is added to an entity it is skipped by queries, unless EcsDisabled is explicitly querie...
const ecs_entity_t EcsDontInherit
Never inherit component on instantiate.
const ecs_entity_t EcsPairIsTag
Can be added to relationship to indicate that it should never hold data, even when it or the relation...
const ecs_entity_t EcsPanic
Panic cleanup policy.
const ecs_entity_t EcsFinal
Ensures that entity/component cannot be used as target in IsA relationship.
const ecs_entity_t EcsVariable
Variable entity ("$").
const ecs_entity_t EcsConstant
Tag added to enum/bitmask constants.
FLECS_API const ecs_entity_t ecs_id(EcsDocDescription)
Component id for EcsDocDescription.
ecs_world_t * ecs_stage_new(ecs_world_t *world)
Create unmanaged stage.
bool ecs_defer_end(ecs_world_t *world)
End 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 end of 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 current stage.
void ecs_stage_free(ecs_world_t *stage)
Free unmanaged stage.
void ecs_merge(ecs_world_t *stage)
Merge stage.
int32_t ecs_stage_get_id(const ecs_world_t *world)
Get 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 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 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 current stage.
const ecs_type_hooks_t * ecs_get_hooks_id(const ecs_world_t *world, ecs_entity_t component)
Get hooks for 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 an 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 component.
struct ecs_component_record_t ecs_component_record_t
Information about a (component) id, such as type info and tables with the id.
Definition flecs.h:493
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.
Definition flecs.h:428
struct ecs_ref_t ecs_ref_t
A ref is a fast way to fetch a component for a specific entity.
Definition flecs.h:477
ecs_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:381
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:425
struct ecs_mixins_t ecs_mixins_t
Type that stores poly mixins.
Definition flecs.h:517
uint64_t ecs_id_t
Ids are the things that can be added to an entity.
Definition flecs.h:374
struct ecs_observable_t ecs_observable_t
An observable produces events that can be listened for by an observer.
Definition flecs.h:461
struct ecs_record_t ecs_record_t
Information about an entity, like its table and row.
Definition flecs.h:490
struct ecs_table_t ecs_table_t
A table stores entities and components for a specific type.
Definition flecs.h:431
void ecs_poly_t
A poly object.
Definition flecs.h:514
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/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 This operation clones the components of one entity into another 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 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.
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 custom relationship argument.
void ecs_enable_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t component, bool enable)
Enable or disable component.
bool ecs_is_enabled_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t component)
Test if component is enabled.
void ecs_enable(ecs_world_t *world, ecs_entity_t entity, bool enabled)
Enable or disable 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 entity to 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 parent (target of ChildOf relationship) for 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 type to string.
char * ecs_table_str(const ecs_world_t *world, const ecs_table_t *table)
Convert table to 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 depth for entity in 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.
Definition flecs.h:636
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.
Definition flecs.h:616
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.
Definition flecs.h:678
uint64_t(* ecs_hash_value_action_t)(const void *ptr)
Callback used for hashing values.
Definition flecs.h:654
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.
Definition flecs.h:629
void(* ecs_iter_fini_action_t)(ecs_iter_t *it)
Function prototype for freeing an iterator.
Definition flecs.h:594
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.
Definition flecs.h:623
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.
Definition flecs.h:605
bool(* ecs_iter_next_action_t)(ecs_iter_t *it)
Function prototype for iterating an iterator.
Definition flecs.h:586
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:576
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.
Definition flecs.h:664
bool(* ecs_equals_t)(const void *a_ptr, const void *b_ptr, const ecs_type_info_t *type_info)
Equals operator hook.
Definition flecs.h:684
int(* ecs_compare_action_t)(const void *ptr1, const void *ptr2)
Callback used for sorting values.
Definition flecs.h:649
void(* ecs_fini_action_t)(ecs_world_t *world, void *ctx)
Action callback on world exit.
Definition flecs.h:640
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.
Definition flecs.h:671
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
Definition flecs.h:690
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
Definition flecs.h:567
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:645
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.
Definition flecs.h:598
void(* ecs_xtor_t)(void *ptr, int32_t count, const ecs_type_info_t *type_info)
Constructor/destructor callback.
Definition flecs.h:658
void * ecs_ref_get_id(const ecs_world_t *world, ecs_ref_t *ref, ecs_id_t component)
Get component from 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 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 entity has component, return 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
Indicates 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
Adds bitset to storage which allows component to be enabled/disabled.
const ecs_id_t ECS_VALUE_PAIR
Indicates that the target of a pair is an integer value.
char * ecs_id_str(const ecs_world_t *world, ecs_id_t component)
Convert component id to string.
bool ecs_id_is_tag(const ecs_world_t *world, ecs_id_t component)
Returns whether 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 id.
bool ecs_id_is_valid(const ecs_world_t *world, ecs_id_t component)
Utility to check if id is valid.
const char * ecs_id_flag_str(uint64_t component_flags)
Convert component flag to string.
bool ecs_id_in_use(const ecs_world_t *world, ecs_id_t component)
Returns whether 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 component string to buffer.
bool ecs_id_is_pair(ecs_id_t component)
Utility to check if 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 string to a component.
bool ecs_id_is_wildcard(ecs_id_t component)
Utility to check if component is a wildcard.
bool ecs_id_is_any(ecs_id_t component)
Utility to check if component is an any wildcard.
ecs_entity_t ecs_field_src(const ecs_iter_t *it, int8_t index)
Return field source.
bool ecs_iter_changed(ecs_iter_t *it)
Returns whether current iterator result has changed.
bool ecs_field_is_writeonly(const ecs_iter_t *it, int8_t index)
Test whether the field is writeonly.
ecs_var_t * ecs_iter_get_vars(const ecs_iter_t *it)
Get variable array.
bool ecs_field_is_readonly(const ecs_iter_t *it, int8_t index)
Test whether the field is readonly.
const char * ecs_iter_get_var_name(const ecs_iter_t *it, int32_t var_id)
Get 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 iterator is true.
void ecs_iter_fini(ecs_iter_t *it)
Cleanup iterator resources.
char * ecs_iter_str(const ecs_iter_t *it)
Convert iterator to string.
bool ecs_iter_var_is_constrained(ecs_iter_t *it, int32_t var_id)
Returns whether 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 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 field at specified row.
ecs_id_t ecs_field_id(const ecs_iter_t *it, int8_t index)
Return id matched for field.
bool ecs_field_is_set(const ecs_iter_t *it, int8_t index)
Test whether field is set.
void ecs_iter_set_var(ecs_iter_t *it, int32_t var_id, ecs_entity_t entity)
Set value for 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 value of iterator variable as entity.
bool ecs_worker_next(ecs_iter_t *it)
Progress a worker iterator.
ecs_entity_t ecs_iter_first(ecs_iter_t *it)
Get first matching entity from iterator.
int32_t ecs_field_column(const ecs_iter_t *it, int8_t index)
Return index of 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 value of iterator variable as table.
void * ecs_field_w_size(const ecs_iter_t *it, size_t size, int8_t index)
Get data for field.
int32_t ecs_iter_count(ecs_iter_t *it)
Count number of matched entities in 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 This constrains the variable to a range of en...
size_t ecs_field_size(const ecs_iter_t *it, int8_t index)
Return field type size.
ecs_table_range_t ecs_iter_get_var_as_range(ecs_iter_t *it, int32_t var_id)
Get value of iterator variable as table range.
ecs_id_t ecs_strip_generation(ecs_entity_t e)
Remove generation from 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 id is alive.
ecs_entity_t ecs_get_alive(const ecs_world_t *world, ecs_entity_t e)
Get alive identifier.
uint32_t ecs_get_version(ecs_entity_t entity)
Get 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_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 event.
void ecs_enqueue(ecs_world_t *world, ecs_event_desc_t *desc)
Enqueue event.
ecs_entity_t ecs_observer_init(ecs_world_t *world, const ecs_observer_desc_t *desc)
Create observer.
const ecs_observer_t * ecs_observer_get(const ecs_world_t *world, ecs_entity_t observer)
Get 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.
Definition flecs.h:316
#define ecs_ftime_t
Customizable precision for scalar time values.
Definition flecs.h:59
#define FLECS_ID_DESC_MAX
Maximum number of ids to add ecs_entity_desc_t / ecs_bulk_desc_t.
Definition flecs.h:310
#define FLECS_TERM_COUNT_MAX
Maximum number of terms in queries.
Definition flecs.h:326
#define FLECS_TREE_SPAWNER_DEPTH_CACHE_SIZE
Size of depth cache in tree spawner component.
Definition flecs.h:359
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 entity from path.
ecs_entity_t ecs_lookup_symbol(const ecs_world_t *world, const char *symbol, bool lookup_as_path, bool recursive)
Lookup an entity by its symbol name.
void ecs_set_alias(ecs_world_t *world, ecs_entity_t entity, const char *alias)
Set alias for entity.
ecs_entity_t ecs_lookup(const ecs_world_t *world, const char *path)
Lookup an entity by it's 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 path identifier to buffer.
ecs_entity_t * ecs_set_lookup_path(ecs_world_t *world, const ecs_entity_t *lookup_path)
Set 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)
Lookup 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)
Lookup 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 specified path to entity.
ecs_entity_t * ecs_get_lookup_path(const ecs_world_t *world)
Get 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 table with query.
void ecs_iter_set_group(ecs_iter_t *it, uint64_t group_id)
Set group to iterate for query iterator.
const ecs_query_t * ecs_query_get(const ecs_world_t *world, ecs_entity_t query)
Get query object.
bool ecs_query_next(ecs_iter_t *it)
Progress 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 query group.
bool ecs_query_is_true(const ecs_query_t *query)
Does query return one or more results.
char * ecs_term_str(const ecs_world_t *world, const ecs_term_t *term)
Convert term to string expression.
bool ecs_query_has_range(const ecs_query_t *query, ecs_table_range_t *range, ecs_iter_t *it)
Match range with query.
int32_t ecs_query_find_var(const ecs_query_t *query, const char *name)
Find 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 entity with query.
char * ecs_query_plan_w_profile(const ecs_query_t *query, const ecs_iter_t *it)
Convert query to string with 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 key-value string.
int32_t ecs_query_match_count(const ecs_query_t *query)
Returns how often a match event happened for a cached query.
char * ecs_query_plan(const ecs_query_t *query)
Convert 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 query to string expression.
bool ecs_query_var_is_entity(const ecs_query_t *query, int32_t var_id)
Test if 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)
Returns 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 variable name.
bool ecs_term_match_this(const ecs_term_t *term)
Is term matched on $this variable.
char * ecs_query_plans(const ecs_query_t *query)
Same as ecs_query_plan(), but includes plan for populating cache (if any).
void * ecs_query_get_group_ctx(const ecs_query_t *query, uint64_t group_id)
Get context of query group.
ecs_query_count_t ecs_query_count(const ecs_query_t *query)
Returns number of entities and results the query matches with.
const ecs_map_t * ecs_query_get_groups(const ecs_query_t *query)
Return 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 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 term matched on 0 source.
const ecs_query_t * ecs_query_get_cache_query(const ecs_query_t *query)
Get query used to populate 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.
Definition flecs.h:724
ecs_inout_kind_t
Specify read/write access for term.
Definition flecs.h:703
ecs_oper_kind_t
Specify operator for term.
Definition flecs.h:713
@ EcsQueryCacheAll
Require that all query terms can be cached.
Definition flecs.h:727
@ EcsQueryCacheDefault
Behavior determined by query creation context.
Definition flecs.h:725
@ EcsQueryCacheNone
No caching.
Definition flecs.h:728
@ EcsQueryCacheAuto
Cache query terms that are cacheable.
Definition flecs.h:726
@ EcsOut
Term is only written.
Definition flecs.h:709
@ EcsInOut
Term is both read and written.
Definition flecs.h:707
@ EcsInOutFilter
Same as InOutNone + prevents term from triggering observers.
Definition flecs.h:706
@ EcsInOutDefault
InOut for regular terms, In for shared terms.
Definition flecs.h:704
@ EcsInOutNone
Term is neither read nor written.
Definition flecs.h:705
@ EcsIn
Term is only read.
Definition flecs.h:708
@ EcsNot
The term must not match.
Definition flecs.h:716
@ EcsOptional
The term may match.
Definition flecs.h:717
@ EcsOr
One of the terms in an or chain must match.
Definition flecs.h:715
@ EcsOrFrom
Term must match at least one component from term id.
Definition flecs.h:719
@ EcsAnd
The term must match.
Definition flecs.h:714
@ EcsNotFrom
Term must match none of the components from term id.
Definition flecs.h:720
@ EcsAndFrom
Term must match all components from term id.
Definition flecs.h:718
ecs_table_t * ecs_table_add_id(ecs_world_t *world, ecs_table_t *table, ecs_id_t component)
Get table that has all components of 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 component in 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 table that has all components of current table minus the specified component.
const ecs_type_t * ecs_table_get_type(const ecs_table_t *table)
Get type for table.
int32_t ecs_table_get_column_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Get column index for component.
void * ecs_table_get_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component, int32_t offset)
Get column from table by component.
int32_t ecs_table_size(const ecs_table_t *table)
Returns allocated size of table.
bool ecs_table_has_flags(ecs_table_t *table, ecs_flags32_t flags)
Test table for flags.
int32_t ecs_table_column_to_type_index(const ecs_table_t *table, int32_t index)
Convert column index to type index.
int32_t ecs_table_column_count(const ecs_table_t *table)
Return number of columns in 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) 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 component/relationship id in table type starting from an offset.
void * ecs_table_get_column(const ecs_table_t *table, int32_t index, int32_t offset)
Get column from 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 component in 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 relationship target for table.
int32_t ecs_table_count(const ecs_table_t *table)
Returns the number of entities in the table.
const ecs_entity_t * ecs_table_entities(const ecs_table_t *table)
Returns array with entity ids for 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 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 depth for table in tree for relationship rel.
bool ecs_table_has_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Test if table has component.
void ecs_table_swap_rows(ecs_world_t *world, ecs_table_t *table, int32_t row_1, int32_t row_2)
Swaps 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 table from id array.
size_t ecs_table_get_column_size(const ecs_table_t *table, int32_t index)
Get column size from table.
int32_t ecs_table_get_type_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t component)
Get type index for 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 type index to 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 value.
int ecs_value_move(const ecs_world_t *world, ecs_entity_t type, void *dst, void *src)
Move value.
int ecs_value_move_w_type_info(const ecs_world_t *world, const ecs_type_info_t *ti, void *dst, void *src)
Move 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 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 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, free storage.
int ecs_value_move_ctor(const ecs_world_t *world, ecs_entity_t type, void *dst, void *src)
Move construct 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 action to be executed when world is destroyed.
bool ecs_is_fini(const ecs_world_t *world)
Returns 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 world.
void ecs_set_target_fps(ecs_world_t *world, float fps)
Set target frames per second (FPS) for 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 action to be executed once after 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 default query flags.
void ecs_quit(ecs_world_t *world)
Signal exit This operation signals that the application should quit.
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 entity from 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 pointer is of specified type.
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.
void ecs_set_entity_range(ecs_world_t *world, ecs_entity_t id_start, ecs_entity_t id_end)
Set a range for issuing new entity ids.
const ecs_world_info_t * ecs_get_world_info(const ecs_world_t *world)
Get world info.
const ecs_world_t * ecs_get_world(const ecs_poly_t *poly)
Get world from 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)
Cleanup empty tables.
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().
bool ecs_enable_range_check(ecs_world_t *world, bool enable)
Enable/disable range limits.
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.
Component information.
Definition flecs.h:1565
ecs_size_t size
Component size.
Definition flecs.h:1566
ecs_size_t alignment
Component alignment.
Definition flecs.h:1567
When added to an entity this informs serialization formats which component to use when a value is ass...
Definition flecs.h:1580
ecs_id_t component
Default component id.
Definition flecs.h:1581
A (string) identifier.
Definition flecs.h:1556
ecs_size_t length
Length of identifier.
Definition flecs.h:1558
char * value
Identifier string.
Definition flecs.h:1557
ecs_hashmap_t * index
Current index.
Definition flecs.h:1561
uint64_t hash
Hash of current value.
Definition flecs.h:1559
uint64_t index_hash
Hash of existing record in current index.
Definition flecs.h:1560
Component for storing a poly object.
Definition flecs.h:1571
ecs_poly_t * poly
Pointer to poly object.
Definition flecs.h:1572
Apply a rate filter to a tick source.
Definition timer.h:45
Component used to provide a tick source to systems.
Definition system.h:32
Component used for one shot/interval timer functionality.
Definition timer.h:35
Type with information about the current Flecs build.
Definition flecs.h:1463
const char ** flags
Compile time settings.
Definition flecs.h:1466
int16_t version_major
Major flecs version.
Definition flecs.h:1468
const char ** addons
Addons included in build.
Definition flecs.h:1465
const char * version
Stringified version.
Definition flecs.h:1467
const char * compiler
Compiler used to compile flecs.
Definition flecs.h:1464
bool sanitize
Is this a sanitize build.
Definition flecs.h:1472
bool perf_trace
Is this a perf tracing build.
Definition flecs.h:1473
int16_t version_minor
Minor flecs version.
Definition flecs.h:1469
bool debug
Is this a debug build.
Definition flecs.h:1471
int16_t version_patch
Patch flecs version.
Definition flecs.h:1470
Used with ecs_bulk_init().
Definition flecs.h:1087
ecs_id_t ids[32]
Ids to create the entities with.
Definition flecs.h:1097
void ** data
Array with component data to insert.
Definition flecs.h:1099
int32_t count
Number of entities to create/populate.
Definition flecs.h:1095
int32_t _canary
Used for validity testing.
Definition flecs.h:1088
ecs_entity_t * entities
Entities to bulk insert.
Definition flecs.h:1090
ecs_table_t * table
Table to insert the entities into.
Definition flecs.h:1106
Used with ecs_component_init().
Definition flecs.h:1117
int32_t _canary
Used for validity testing.
Definition flecs.h:1118
ecs_type_info_t type
Parameters for type (size, hooks, ...)
Definition flecs.h:1124
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1121
Used with ecs_delete_empty_tables().
Definition flecs.h:2722
uint16_t delete_generation
Delete table when generation > delete_generation.
Definition flecs.h:2727
double time_budget_seconds
Amount of time operation is allowed to spend.
Definition flecs.h:2730
uint16_t clear_generation
Free table data when generation > clear_generation.
Definition flecs.h:2724
Type returned by ecs_get_entities().
Definition flecs.h:2077
int32_t alive_count
Number of alive entity ids.
Definition flecs.h:2080
int32_t count
Total number of entity ids.
Definition flecs.h:2079
const ecs_entity_t * ids
Array with all entity ids in the world.
Definition flecs.h:2078
Used with ecs_entity_init().
Definition flecs.h:1041
const char * sep
Optional custom separator for hierarchical names.
Definition flecs.h:1053
const char * root_sep
Optional, used for identifiers relative to root.
Definition flecs.h:1057
const char * name
Name of the entity.
Definition flecs.h:1048
bool use_low_id
When set to true, a low id (typically reserved for components) will be used to create the entity,...
Definition flecs.h:1069
const char * symbol
Optional entity symbol.
Definition flecs.h:1059
int32_t _canary
Used for validity testing.
Definition flecs.h:1042
const ecs_id_t * add
0-terminated array of ids to add to the entity.
Definition flecs.h:1074
const char * add_expr
String expression with components to add.
Definition flecs.h:1080
const ecs_value_t * set
0-terminated array of values to set on the entity.
Definition flecs.h:1077
ecs_entity_t id
Set to modify existing entity (optional)
Definition flecs.h:1044
ecs_entity_t parent
Parent entity.
Definition flecs.h:1046
Used with ecs_emit().
Definition flecs.h:1409
ecs_entity_t entity
Single-entity alternative to setting table / offset / count.
Definition flecs.h:1434
const void * const_param
Same as param, but with the guarantee that the value won't be modified.
Definition flecs.h:1445
ecs_table_t * table
The table for which to notify.
Definition flecs.h:1419
int32_t count
Limit number of notified entities to count.
Definition flecs.h:1431
ecs_table_t * other_table
Optional 2nd table to notify.
Definition flecs.h:1423
int32_t offset
Limit notified entities to ones starting from offset (row) in table.
Definition flecs.h:1426
const ecs_type_t * ids
Component ids.
Definition flecs.h:1416
ecs_poly_t * observable
Observable (usually the world)
Definition flecs.h:1448
ecs_entity_t event
The event id.
Definition flecs.h:1411
ecs_flags32_t flags
Event flags.
Definition flecs.h:1451
void * param
Optional context.
Definition flecs.h:1440
Header for ecs_poly_t objects.
Definition flecs.h:520
int32_t type
Magic number indicating which type of flecs object.
Definition flecs.h:521
int32_t refcount
Refcount, to enable RAII handles.
Definition flecs.h:522
ecs_mixins_t * mixins
Table with offsets to (optional) mixins.
Definition flecs.h:523
Iterator.
Definition flecs.h:1165
ecs_world_t * real_world
Actual world.
Definition flecs.h:1168
void * param
Param passed to ecs_run.
Definition flecs.h:1201
ecs_entity_t event
The event (if applicable)
Definition flecs.h:1189
int32_t frame_offset
Offset relative to start of iteration.
Definition flecs.h:1212
ecs_flags32_t ref_fields
Bitset with fields that aren't component arrays.
Definition flecs.h:1183
ecs_entity_t interrupted_by
When set, system execution is interrupted.
Definition flecs.h:1216
ecs_flags32_t flags
Iterator flags.
Definition flecs.h:1215
ecs_iter_t * chain_it
Optional, allows for creating iterator chains.
Definition flecs.h:1223
void * ctx
System context.
Definition flecs.h:1202
void * run_ctx
Run language binding context.
Definition flecs.h:1205
ecs_table_t * table
Current table.
Definition flecs.h:1177
int32_t offset
Offset relative to current table.
Definition flecs.h:1171
ecs_id_t event_id
The (component) id for the event.
Definition flecs.h:1190
ecs_iter_fini_action_t fini
Function to cleanup iterator resources.
Definition flecs.h:1222
ecs_iter_private_t priv_
Private data.
Definition flecs.h:1217
ecs_world_t * world
The world.
Definition flecs.h:1167
void * callback_ctx
Callback language binding context.
Definition flecs.h:1204
ecs_entity_t * sources
Entity on which the id was matched (0 if same as entities)
Definition flecs.h:1180
void * binding_ctx
System binding context.
Definition flecs.h:1203
ecs_flags32_t row_fields
Fields that must be obtained with field_at.
Definition flecs.h:1184
float delta_system_time
Time elapsed since last system invocation.
Definition flecs.h:1209
const ecs_query_t * query
Query being evaluated.
Definition flecs.h:1198
int8_t term_index
Index of term that emitted an event.
Definition flecs.h:1195
ecs_entity_t system
The system (if applicable)
Definition flecs.h:1188
ecs_flags32_t set_fields
Fields that are set.
Definition flecs.h:1182
const ecs_size_t * sizes
Component sizes.
Definition flecs.h:1176
float delta_time
Time elapsed since last frame.
Definition flecs.h:1208
ecs_flags32_t up_fields
Bitset with fields matched through up traversal.
Definition flecs.h:1185
ecs_iter_action_t callback
Callback of system or observer.
Definition flecs.h:1221
int8_t field_count
Number of fields in iterator.
Definition flecs.h:1194
ecs_table_t * other_table
Prev or next table when adding/removing.
Definition flecs.h:1178
int32_t event_cur
Unique event id.
Definition flecs.h:1191
const ecs_table_record_t ** trs
Info on where to find field in table.
Definition flecs.h:1175
int32_t count
Number of entities to iterate.
Definition flecs.h:1172
void ** ptrs
Component pointers.
Definition flecs.h:1174
ecs_iter_next_action_t next
Function to progress iterator.
Definition flecs.h:1220
const ecs_entity_t * entities
Entity identifiers.
Definition flecs.h:1173
ecs_id_t * ids
(Component) ids
Definition flecs.h:1179
ecs_flags64_t constrained_vars
Bitset that marks constrained variables.
Definition flecs.h:1181
Used with ecs_observer_init().
Definition flecs.h:1348
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition flecs.h:1397
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1385
void * run_ctx
Context associated with run (for language bindings).
Definition flecs.h:1394
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1353
int32_t * last_event_id
Used for internal purposes.
Definition flecs.h:1400
void * callback_ctx
Context associated with callback (for language bindings).
Definition flecs.h:1388
void * ctx
User context to pass to callback.
Definition flecs.h:1382
ecs_query_desc_t query
Query for observer.
Definition flecs.h:1356
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition flecs.h:1391
bool global_observer
Global observers are tied to the lifespan of the world.
Definition flecs.h:1368
ecs_iter_action_t callback
Callback to invoke on an event, invoked when the observer matches.
Definition flecs.h:1371
bool yield_existing
When observer is created, generate events from existing data.
Definition flecs.h:1363
ecs_run_action_t run
Callback invoked on an event.
Definition flecs.h:1379
ecs_entity_t events[8]
Events to observe (OnAdd, OnRemove, OnSet)
Definition flecs.h:1359
int32_t _canary
Used for validity testing.
Definition flecs.h:1350
An observer reacts to events matching a query.
Definition flecs.h:874
int32_t event_count
Number of events.
Definition flecs.h:881
ecs_iter_action_t callback
See ecs_observer_desc_t::callback.
Definition flecs.h:883
ecs_entity_t entity
Entity associated with observer.
Definition flecs.h:897
ecs_observable_t * observable
Observable for observer.
Definition flecs.h:894
ecs_run_action_t run
See ecs_observer_desc_t::run.
Definition flecs.h:884
ecs_header_t hdr
Object header.
Definition flecs.h:875
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:890
ecs_entity_t events[8]
Observer events.
Definition flecs.h:880
void * run_ctx
Run language binding context.
Definition flecs.h:888
ecs_world_t * world
The world.
Definition flecs.h:896
ecs_ctx_free_t run_ctx_free
Callback to free run_ctx.
Definition flecs.h:892
void * callback_ctx
Callback language binding context.
Definition flecs.h:887
void * ctx
Observer context.
Definition flecs.h:886
ecs_ctx_free_t callback_ctx_free
Callback to free callback_ctx.
Definition flecs.h:891
ecs_query_t * query
Observer query.
Definition flecs.h:877
Struct returned by ecs_query_count().
Definition flecs.h:5182
int32_t entities
Number of entities returned by query.
Definition flecs.h:5184
int32_t results
Number of results returned by query.
Definition flecs.h:5183
int32_t tables
Number of tables returned by query.
Definition flecs.h:5185
Used with ecs_query_init().
Definition flecs.h:1274
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1335
ecs_id_t group_by
Component id to be used for grouping.
Definition flecs.h:1305
ecs_term_t terms[32]
Query terms.
Definition flecs.h:1279
int32_t _canary
Used for validity testing.
Definition flecs.h:1276
void * ctx
User context to pass to callback.
Definition flecs.h:1329
ecs_ctx_free_t group_by_ctx_free
Function to free group_by_ctx.
Definition flecs.h:1326
void * group_by_ctx
Context to pass to group_by.
Definition flecs.h:1323
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:1332
ecs_entity_t order_by
Component to sort on, used together with order_by_callback or order_by_table_callback.
Definition flecs.h:1301
ecs_order_by_action_t order_by_callback
Callback used for ordering query results.
Definition flecs.h:1293
ecs_group_create_action_t on_group_create
Callback that is invoked when a new group is created.
Definition flecs.h:1316
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:1341
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:1338
ecs_group_by_action_t group_by_callback
Callback used for grouping results.
Definition flecs.h:1312
ecs_group_delete_action_t on_group_delete
Callback that is invoked when an existing group is deleted.
Definition flecs.h:1320
ecs_sort_table_action_t order_by_table_callback
Callback used for ordering query results.
Definition flecs.h:1297
ecs_flags32_t flags
Flags for enabling query features.
Definition flecs.h:1288
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:1285
const char * expr
Query DSL expression (optional)
Definition flecs.h:1282
Type that contains information about a query group.
Definition flecs.h:1539
int32_t table_count
Number of tables in group.
Definition flecs.h:1542
void * ctx
Group context, returned by on_group_create.
Definition flecs.h:1543
int32_t match_count
How often tables have been matched/unmatched.
Definition flecs.h:1541
Queries are lists of constraints (terms) that match entities.
Definition flecs.h:833
ecs_flags32_t row_fields
Fields that must be acquired with field_at.
Definition flecs.h:853
ecs_flags32_t data_fields
Fields that have data.
Definition flecs.h:850
ecs_flags32_t read_fields
Fields that read data.
Definition flecs.h:852
ecs_header_t hdr
Object header.
Definition flecs.h:834
int8_t var_count
Number of query variables.
Definition flecs.h:842
ecs_flags32_t fixed_fields
Fields with a fixed source.
Definition flecs.h:847
ecs_flags32_t var_fields
Fields with non-$this variable source.
Definition flecs.h:848
ecs_flags32_t write_fields
Fields that write data.
Definition flecs.h:851
int32_t eval_count
Number of times query is evaluated.
Definition flecs.h:868
ecs_world_t * world
World or stage query was created with.
Definition flecs.h:866
ecs_flags32_t static_id_fields
Fields with a static (component) id.
Definition flecs.h:849
uint64_t bloom_filter
Bitmask used to quickly discard tables.
Definition flecs.h:840
ecs_world_t * real_world
Actual world.
Definition flecs.h:865
ecs_flags32_t set_fields
Fields that will be set.
Definition flecs.h:855
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:864
void * ctx
User context to pass to callback.
Definition flecs.h:861
int32_t * sizes
Component sizes.
Definition flecs.h:837
ecs_id_t * ids
Component ids.
Definition flecs.h:838
ecs_flags32_t shared_readonly_fields
Fields that don't write shared data.
Definition flecs.h:854
ecs_term_t * terms
Query terms.
Definition flecs.h:836
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:857
int8_t term_count
Number of query terms.
Definition flecs.h:843
char ** vars
Array with variable names for iterator.
Definition flecs.h:859
int8_t field_count
Number of fields returned by query.
Definition flecs.h:844
ecs_flags32_t flags
Query flags.
Definition flecs.h:841
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:862
Type that describes a reference to an entity or variable in a term.
Definition flecs.h:794
const char * name
Name.
Definition flecs.h:801
ecs_entity_t id
Entity id.
Definition flecs.h:795
Type that describes a term (single element in a query).
Definition flecs.h:809
ecs_term_ref_t src
Source of term.
Definition flecs.h:815
int8_t field_index
Index of field for term in iterator.
Definition flecs.h:826
ecs_id_t id
Component id to be matched by term.
Definition flecs.h:810
int16_t oper
Operator of term.
Definition flecs.h:824
ecs_term_ref_t second
Second element of pair.
Definition flecs.h:817
ecs_flags16_t flags_
Flags that help eval, set by ecs_query_init()
Definition flecs.h:827
ecs_entity_t trav
Relationship to traverse when looking for the component.
Definition flecs.h:819
int16_t inout
Access to contents matched by term.
Definition flecs.h:823
ecs_term_ref_t first
Component or first element of pair.
Definition flecs.h:816
ecs_copy_t copy_ctor
Ctor + copy.
Definition flecs.h:956
void * lifecycle_ctx
Component lifecycle context (see meta add-on)
Definition flecs.h:1007
void * ctx
User defined context.
Definition flecs.h:1005
ecs_iter_action_t on_remove
Callback that is invoked when an instance of the component is removed.
Definition flecs.h:997
void * binding_ctx
Language binding context.
Definition flecs.h:1006
ecs_move_t move_dtor
Move + dtor.
Definition flecs.h:971
ecs_flags32_t flags
Hook flags.
Definition flecs.h:983
ecs_cmp_t cmp
Compare hook.
Definition flecs.h:974
ecs_copy_t copy
copy assignment
Definition flecs.h:952
ecs_ctx_free_t lifecycle_ctx_free
Callback to free lifecycle_ctx.
Definition flecs.h:1011
ecs_iter_action_t on_set
Callback that is invoked when an instance of the component is set.
Definition flecs.h:992
ecs_move_t move
move assignment
Definition flecs.h:953
ecs_xtor_t ctor
ctor
Definition flecs.h:950
ecs_iter_action_t on_replace
Callback that is invoked with the existing and new value before the value is assigned.
Definition flecs.h:1003
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1009
ecs_iter_action_t on_add
Callback that is invoked when an instance of a component is added.
Definition flecs.h:987
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:1010
ecs_move_t move_ctor
Ctor + move.
Definition flecs.h:959
ecs_equals_t equals
Equals hook.
Definition flecs.h:977
ecs_move_t ctor_move_dtor
Ctor + move + dtor (or move_ctor + dtor).
Definition flecs.h:965
ecs_xtor_t dtor
dtor
Definition flecs.h:951
Type that contains component information (passed to ctors/dtors/...)
Definition flecs.h:1018
ecs_size_t alignment
Alignment of type.
Definition flecs.h:1020
ecs_size_t size
Size of type.
Definition flecs.h:1019
const char * name
Type name.
Definition flecs.h:1023
ecs_entity_t component
Handle to component (do not set)
Definition flecs.h:1022
ecs_type_hooks_t hooks
Type hooks.
Definition flecs.h:1021
A type is a list of (component) ids.
Definition flecs.h:398
ecs_id_t * array
Array with ids.
Definition flecs.h:399
int32_t count
Number of elements in array.
Definition flecs.h:400
Utility to hold a value of a dynamic type.
Definition flecs.h:1032
void * ptr
Pointer to value.
Definition flecs.h:1034
ecs_entity_t type
Type of value.
Definition flecs.h:1033
Type that contains information about the world.
Definition flecs.h:1477
int64_t observers_ran_total
Total number of times observer was invoked.
Definition flecs.h:1505
float delta_time
Time passed to or computed by ecs_progress()
Definition flecs.h:1483
ecs_entity_t min_id
First allowed entity id.
Definition flecs.h:1479
int64_t systems_ran_total
Total number of systems ran.
Definition flecs.h:1504
int64_t set_count
Set commands processed.
Definition flecs.h:1522
double world_time_total
Time elapsed in simulation.
Definition flecs.h:1491
int32_t tag_id_count
Number of tag (no data) ids in the world.
Definition flecs.h:1508
int32_t component_id_count
Number of component (data) ids in the world.
Definition flecs.h:1509
int64_t pipeline_build_count_total
Total number of pipeline builds.
Definition flecs.h:1503
int64_t eval_comp_monitors_total
Total number of monitor evaluations.
Definition flecs.h:1496
int32_t table_count
Number of tables.
Definition flecs.h:1512
float delta_time_raw
Raw delta time (no time scaling)
Definition flecs.h:1482
float frame_time_total
Total time spent processing a frame.
Definition flecs.h:1486
int64_t table_create_total
Total number of times a table was created.
Definition flecs.h:1501
float system_time_total
Total time spent in systems.
Definition flecs.h:1487
int64_t id_delete_total
Total number of times an id was deleted.
Definition flecs.h:1500
float merge_time_total
Total time spent in merges.
Definition flecs.h:1489
struct ecs_world_info_t::@0 cmd
Command statistics.
int64_t discard_count
Commands discarded, happens when entity is no longer alive when running the command.
Definition flecs.h:1525
int64_t clear_count
Clear commands processed.
Definition flecs.h:1521
ecs_entity_t last_component_id
Last issued component entity id.
Definition flecs.h:1478
int64_t frame_count_total
Total number of frames.
Definition flecs.h:1494
ecs_entity_t max_id
Last allowed entity id.
Definition flecs.h:1480
int64_t merge_count_total
Total number of merges.
Definition flecs.h:1495
int64_t other_count
Other commands processed.
Definition flecs.h:1527
int64_t batched_command_count
Commands batched.
Definition flecs.h:1529
int64_t table_delete_total
Total number of times a table was deleted.
Definition flecs.h:1502
int64_t queries_ran_total
Total number of times a query was evaluated.
Definition flecs.h:1506
int64_t delete_count
Delete commands processed.
Definition flecs.h:1520
int64_t rematch_count_total
Total number of rematches.
Definition flecs.h:1497
int64_t id_create_total
Total number of times a new id was created.
Definition flecs.h:1499
int64_t batched_entity_count
Entities for which commands were batched.
Definition flecs.h:1528
float time_scale
Time scale applied to delta_time.
Definition flecs.h:1484
int32_t pair_id_count
Number of pair ids in the world.
Definition flecs.h:1510
float rematch_time_total
Time spent on query rematching.
Definition flecs.h:1490
int64_t ensure_count
Ensure/emplace commands processed.
Definition flecs.h:1523
float target_fps
Target fps.
Definition flecs.h:1485
double world_time_total_raw
Time elapsed in simulation (no scaling)
Definition flecs.h:1492
float emit_time_total
Total time spent notifying observers.
Definition flecs.h:1488
uint32_t creation_time
Time when world was created.
Definition flecs.h:1514
int64_t modified_count
Modified commands processed.
Definition flecs.h:1524
const char * name_prefix
Value set by ecs_set_name_prefix().
Definition flecs.h:1532
int64_t event_count
Enqueued custom events.
Definition flecs.h:1526
int64_t add_count
Add commands processed.
Definition flecs.h:1518
int64_t remove_count
Remove commands processed.
Definition flecs.h:1519