Flecs v4.0
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 0
36#define FLECS_VERSION_PATCH 1
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
65// #define FLECS_LEGACY
66
72// #define FLECS_ACCURATE_COUNTERS
73
79// #define FLECS_DISABLE_COUNTERS
80
81/* Make sure provided configuration is valid */
82#if defined(FLECS_DEBUG) && defined(FLECS_NDEBUG)
83#error "invalid configuration: cannot both define FLECS_DEBUG and FLECS_NDEBUG"
84#endif
85#if defined(FLECS_DEBUG) && defined(NDEBUG)
86#error "invalid configuration: cannot both define FLECS_DEBUG and NDEBUG"
87#endif
88
93#if !defined(FLECS_DEBUG) && !defined(FLECS_NDEBUG)
94#if defined(NDEBUG)
95#define FLECS_NDEBUG
96#else
97#define FLECS_DEBUG
98#endif
99#endif
100
105#ifdef FLECS_SANITIZE
106#ifndef FLECS_DEBUG
107#define FLECS_DEBUG /* If sanitized mode is enabled, so is debug mode */
108#endif
109#endif
110
111/* Tip: if you see weird behavior that you think might be a bug, make sure to
112 * test with the FLECS_DEBUG or FLECS_SANITIZE flags enabled. There's a good
113 * chance that this gives you more information about the issue! */
114
128// #define FLECS_SOFT_ASSERT
129
135// #define FLECS_KEEP_ASSERT
136
145// #define FLECS_CPP_NO_AUTO_REGISTRATION
146
174// #define FLECS_CUSTOM_BUILD
175
184// #define FLECS_CPP_NO_AUTO_REGISTRATION
185
186#ifndef FLECS_CUSTOM_BUILD
187// #define FLECS_C /**< C API convenience macros, always enabled */
188#define FLECS_CPP
189#define FLECS_MODULE
190#define FLECS_SCRIPT
191#define FLECS_STATS
192#define FLECS_METRICS
193#define FLECS_ALERTS
194#define FLECS_SYSTEM
195#define FLECS_PIPELINE
196#define FLECS_TIMER
197#define FLECS_META
198#define FLECS_UNITS
199#define FLECS_JSON
200#define FLECS_DOC
201#define FLECS_LOG
202#define FLECS_APP
203#define FLECS_OS_API_IMPL
204#define FLECS_HTTP
205#define FLECS_REST
206// #define FLECS_JOURNAL /**< Journaling addon (disabled by default) */
207// #define FLECS_PERF_TRACE /**< Enable performance tracing (disabled by default) */
208#endif // ifndef FLECS_CUSTOM_BUILD
209
213// #define FLECS_LOW_FOOTPRINT
214#ifdef FLECS_LOW_FOOTPRINT
215#define FLECS_HI_COMPONENT_ID (16)
216#define FLECS_HI_ID_RECORD_ID (16)
217#define FLECS_SPARSE_PAGE_BITS (6)
218#define FLECS_ENTITY_PAGE_BITS (6)
219#define FLECS_USE_OS_ALLOC
220#endif
221
232#ifndef FLECS_HI_COMPONENT_ID
233#define FLECS_HI_COMPONENT_ID (256)
234#endif
235
242#ifndef FLECS_HI_ID_RECORD_ID
243#define FLECS_HI_ID_RECORD_ID (1024)
244#endif
245
251#ifndef FLECS_SPARSE_PAGE_BITS
252#define FLECS_SPARSE_PAGE_BITS (12)
253#endif
254
257#ifndef FLECS_ENTITY_PAGE_BITS
258#define FLECS_ENTITY_PAGE_BITS (12)
259#endif
260
265// #define FLECS_USE_OS_ALLOC
266
269#ifndef FLECS_ID_DESC_MAX
270#define FLECS_ID_DESC_MAX (32)
271#endif
272
275#ifndef FLECS_EVENT_DESC_MAX
276#define FLECS_EVENT_DESC_MAX (8)
277#endif
278
281#define FLECS_VARIABLE_COUNT_MAX (64)
282
285#ifndef FLECS_TERM_COUNT_MAX
286#define FLECS_TERM_COUNT_MAX 32
287#endif
288
291#ifndef FLECS_TERM_ARG_COUNT_MAX
292#define FLECS_TERM_ARG_COUNT_MAX (16)
293#endif
294
297#ifndef FLECS_QUERY_VARIABLE_COUNT_MAX
298#define FLECS_QUERY_VARIABLE_COUNT_MAX (64)
299#endif
300
303#ifndef FLECS_QUERY_SCOPE_NESTING_MAX
304#define FLECS_QUERY_SCOPE_NESTING_MAX (8)
305#endif
306
309#include "flecs/private/api_defines.h"
310#include "flecs/datastructures/vec.h" /* Vector datatype */
311#include "flecs/datastructures/sparse.h" /* Sparse set */
312#include "flecs/datastructures/block_allocator.h" /* Block allocator */
313#include "flecs/datastructures/stack_allocator.h" /* Stack allocator */
314#include "flecs/datastructures/map.h" /* Map */
315#include "flecs/datastructures/switch_list.h" /* Switch list */
316#include "flecs/datastructures/allocator.h" /* Allocator */
317#include "flecs/datastructures/strbuf.h" /* String builder */
318#include "flecs/os_api.h" /* Abstraction for operating system functions */
319
320#ifdef __cplusplus
321extern "C" {
322#endif
323
340typedef uint64_t ecs_id_t;
341
348
364typedef struct {
366 int32_t count;
367} ecs_type_t;
368
392
395
398
400typedef struct ecs_term_t ecs_term_t;
401
404
423
428
433typedef struct ecs_iter_t ecs_iter_t;
434
443typedef struct ecs_ref_t ecs_ref_t;
444
449
454
457
460
480typedef void ecs_poly_t;
481
484
492
500
502typedef struct ecs_table_cache_hdr_t {
503 struct ecs_table_cache_t *cache;
506 bool empty;
508
519
538typedef void (*ecs_run_action_t)(
539 ecs_iter_t *it);
540
547typedef void (*ecs_iter_action_t)(
548 ecs_iter_t *it);
549
558 ecs_iter_t *it);
559
566 ecs_iter_t *it);
567
570 ecs_entity_t e1,
571 const void *ptr1,
572 ecs_entity_t e2,
573 const void *ptr2);
574
577 ecs_world_t* world,
578 ecs_table_t* table,
579 ecs_entity_t* entities,
580 void* ptr,
581 int32_t size,
582 int32_t lo,
583 int32_t hi,
584 ecs_order_by_action_t order_by);
585
587typedef uint64_t (*ecs_group_by_action_t)(
588 ecs_world_t *world,
589 ecs_table_t *table,
590 ecs_id_t group_id,
591 void *ctx);
592
594typedef void* (*ecs_group_create_action_t)(
595 ecs_world_t *world,
596 uint64_t group_id,
597 void *group_by_ctx); /* from ecs_query_desc_t */
598
601 ecs_world_t *world,
602 uint64_t group_id,
603 void *group_ctx, /* return value from ecs_group_create_action_t */
604 void *group_by_ctx); /* from ecs_query_desc_t */
605
607typedef void (*ecs_module_action_t)(
608 ecs_world_t *world);
609
611typedef void (*ecs_fini_action_t)(
612 ecs_world_t *world,
613 void *ctx);
614
616typedef void (*ecs_ctx_free_t)(
617 void *ctx);
618
620typedef int (*ecs_compare_action_t)(
621 const void *ptr1,
622 const void *ptr2);
623
625typedef uint64_t (*ecs_hash_value_action_t)(
626 const void *ptr);
627
629typedef void (*ecs_xtor_t)(
630 void *ptr,
631 int32_t count,
632 const ecs_type_info_t *type_info);
633
635typedef void (*ecs_copy_t)(
636 void *dst_ptr,
637 const void *src_ptr,
638 int32_t count,
639 const ecs_type_info_t *type_info);
640
642typedef void (*ecs_move_t)(
643 void *dst_ptr,
644 void *src_ptr,
645 int32_t count,
646 const ecs_type_info_t *type_info);
647
649typedef void (*flecs_poly_dtor_t)(
650 ecs_poly_t *poly);
651
670
681
689
690/* Term id flags */
691
696#define EcsSelf (1llu << 63)
697
702#define EcsUp (1llu << 62)
703
708#define EcsTrav (1llu << 61)
709
714#define EcsCascade (1llu << 60)
715
720#define EcsDesc (1llu << 59)
721
726#define EcsIsVariable (1llu << 58)
727
732#define EcsIsEntity (1llu << 57)
733
738#define EcsIsName (1llu << 56)
739
744#define EcsTraverseFlags (EcsSelf|EcsUp|EcsTrav|EcsCascade|EcsDesc)
745
750#define EcsTermRefFlags (EcsTraverseFlags|EcsIsVariable|EcsIsEntity|EcsIsName)
751
766
788
799 ecs_flags32_t flags;
800 int8_t var_count;
801 int8_t term_count;
802 int8_t field_count;
804 /* Bitmasks for quick field information lookups */
805 ecs_termset_t fixed_fields;
806 ecs_termset_t var_fields;
807 ecs_termset_t static_id_fields;
808 ecs_termset_t data_fields;
809 ecs_termset_t write_fields;
810 ecs_termset_t read_fields;
811 ecs_termset_t row_fields;
813 ecs_termset_t set_fields;
817 char **vars;
819 void *ctx;
826 int32_t eval_count;
827};
828
857
908
921
922#include "flecs/private/api_types.h" /* Supporting API types */
923#include "flecs/private/api_support.h" /* Supporting API functions */
924#include "flecs/datastructures/hashmap.h" /* Hashmap */
925
931
936typedef struct ecs_entity_desc_t {
937 int32_t _canary;
943 const char *name;
948 const char *sep;
952 const char *root_sep;
954 const char *symbol;
969 const ecs_id_t *add;
970
973
975 const char *add_expr;
977
1007
1021
1061 /* World */
1065 /* Matched data */
1067 const ecs_size_t *sizes;
1071 ecs_var_t *variables;
1074 ecs_flags64_t constrained_vars;
1075 uint64_t group_id;
1076 ecs_termset_t set_fields;
1077 ecs_termset_t ref_fields;
1078 ecs_termset_t row_fields;
1079 ecs_termset_t up_fields;
1081 /* Input information */
1085 int32_t event_cur;
1087 /* Query information */
1089 int8_t term_index;
1096 /* Context */
1097 void *param;
1098 void *ctx;
1101 void *run_ctx;
1103 /* Time */
1107 /* Iterator counters */
1109 int32_t offset;
1110 int32_t count;
1112 /* Misc */
1113 ecs_flags32_t flags;
1115 ecs_iter_private_t priv_;
1117 /* Chained iterators */
1122};
1123
1124
1129#define EcsQueryMatchPrefab (1u << 1u)
1130
1135#define EcsQueryMatchDisabled (1u << 2u)
1136
1141#define EcsQueryMatchEmptyTables (1u << 3u)
1142
1147#define EcsQueryAllowUnresolvedByName (1u << 6u)
1148
1153#define EcsQueryTableOnly (1u << 7u)
1154
1155
1229
1291
1296typedef struct ecs_event_desc_t {
1299
1304
1307
1311
1313 int32_t offset;
1314
1318 int32_t count;
1319
1322
1327 void *param;
1328
1332 const void *const_param;
1333
1336
1338 ecs_flags32_t flags;
1340
1341
1350typedef struct ecs_build_info_t {
1351 const char *compiler;
1352 const char **addons;
1353 const char *version;
1357 bool debug;
1361
1421
1428
1439typedef struct EcsIdentifier {
1440 char *value;
1441 ecs_size_t length;
1442 uint64_t hash;
1443 uint64_t index_hash;
1444 ecs_hashmap_t *index;
1446
1448typedef struct EcsComponent {
1449 ecs_size_t size;
1450 ecs_size_t alignment;
1452
1457
1466
1470/* Only include deprecated definitions if deprecated addon is required */
1471#ifdef FLECS_DEPRECATED
1473#endif
1474
1490FLECS_API extern const ecs_id_t ECS_PAIR;
1491
1493FLECS_API extern const ecs_id_t ECS_AUTO_OVERRIDE;
1494
1496FLECS_API extern const ecs_id_t ECS_TOGGLE;
1497
1505/* Builtin component ids */
1506
1508FLECS_API extern const ecs_entity_t ecs_id(EcsComponent);
1509
1511FLECS_API extern const ecs_entity_t ecs_id(EcsIdentifier);
1512
1514FLECS_API extern const ecs_entity_t ecs_id(EcsPoly);
1515
1517FLECS_API extern const ecs_entity_t ecs_id(EcsDefaultChildComponent);
1518
1520FLECS_API extern const ecs_entity_t EcsQuery;
1521
1523FLECS_API extern const ecs_entity_t EcsObserver;
1524
1526FLECS_API extern const ecs_entity_t EcsSystem;
1527
1529FLECS_API extern const ecs_entity_t ecs_id(EcsTickSource);
1530
1532FLECS_API extern const ecs_entity_t ecs_id(EcsPipelineQuery);
1533
1535FLECS_API extern const ecs_entity_t ecs_id(EcsTimer);
1536
1538FLECS_API extern const ecs_entity_t ecs_id(EcsRateFilter);
1539
1541FLECS_API extern const ecs_entity_t EcsFlecs;
1542
1544FLECS_API extern const ecs_entity_t EcsFlecsCore;
1545
1547FLECS_API extern const ecs_entity_t EcsWorld;
1548
1550FLECS_API extern const ecs_entity_t EcsWildcard;
1551
1553FLECS_API extern const ecs_entity_t EcsAny;
1554
1556FLECS_API extern const ecs_entity_t EcsThis;
1557
1559FLECS_API extern const ecs_entity_t EcsVariable;
1560
1562#define EcsSingleton EcsVariable
1563
1571FLECS_API extern const ecs_entity_t EcsTransitive;
1572
1580FLECS_API extern const ecs_entity_t EcsReflexive;
1581
1592FLECS_API extern const ecs_entity_t EcsFinal;
1593
1595FLECS_API extern const ecs_entity_t EcsOnInstantiate;
1596
1600FLECS_API extern const ecs_entity_t EcsOverride;
1601
1605FLECS_API extern const ecs_entity_t EcsInherit;
1606
1611FLECS_API extern const ecs_entity_t EcsDontInherit;
1612
1620FLECS_API extern const ecs_entity_t EcsSymmetric;
1621
1631FLECS_API extern const ecs_entity_t EcsExclusive;
1632
1634FLECS_API extern const ecs_entity_t EcsAcyclic;
1635
1638FLECS_API extern const ecs_entity_t EcsTraversable;
1639
1649FLECS_API extern const ecs_entity_t EcsWith;
1650
1660FLECS_API extern const ecs_entity_t EcsOneOf;
1661
1663FLECS_API extern const ecs_entity_t EcsCanToggle;
1664
1668FLECS_API extern const ecs_entity_t EcsTrait;
1669
1679FLECS_API extern const ecs_entity_t EcsRelationship;
1680
1690FLECS_API extern const ecs_entity_t EcsTarget;
1691
1694FLECS_API extern const ecs_entity_t EcsPairIsTag;
1695
1697FLECS_API extern const ecs_entity_t EcsName;
1698
1700FLECS_API extern const ecs_entity_t EcsSymbol;
1701
1703FLECS_API extern const ecs_entity_t EcsAlias;
1704
1706FLECS_API extern const ecs_entity_t EcsChildOf;
1707
1709FLECS_API extern const ecs_entity_t EcsIsA;
1710
1712FLECS_API extern const ecs_entity_t EcsDependsOn;
1713
1715FLECS_API extern const ecs_entity_t EcsSlotOf;
1716
1718FLECS_API extern const ecs_entity_t EcsModule;
1719
1721FLECS_API extern const ecs_entity_t EcsPrivate;
1722
1725FLECS_API extern const ecs_entity_t EcsPrefab;
1726
1729FLECS_API extern const ecs_entity_t EcsDisabled;
1730
1734FLECS_API extern const ecs_entity_t EcsNotQueryable;
1735
1737FLECS_API extern const ecs_entity_t EcsOnAdd;
1738
1740FLECS_API extern const ecs_entity_t EcsOnRemove;
1741
1743FLECS_API extern const ecs_entity_t EcsOnSet;
1744
1746FLECS_API extern const ecs_entity_t EcsMonitor;
1747
1749FLECS_API extern const ecs_entity_t EcsOnTableCreate;
1750
1752FLECS_API extern const ecs_entity_t EcsOnTableDelete;
1753
1755FLECS_API extern const ecs_entity_t EcsOnTableEmpty;
1756
1758FLECS_API extern const ecs_entity_t EcsOnTableFill;
1759
1761FLECS_API extern const ecs_entity_t EcsOnDelete;
1762
1765FLECS_API extern const ecs_entity_t EcsOnDeleteTarget;
1766
1769FLECS_API extern const ecs_entity_t EcsRemove;
1770
1773FLECS_API extern const ecs_entity_t EcsDelete;
1774
1777FLECS_API extern const ecs_entity_t EcsPanic;
1778
1780FLECS_API extern const ecs_entity_t EcsSparse;
1781
1783FLECS_API extern const ecs_entity_t EcsUnion;
1784
1786FLECS_API extern const ecs_entity_t EcsPredEq;
1787
1789FLECS_API extern const ecs_entity_t EcsPredMatch;
1790
1792FLECS_API extern const ecs_entity_t EcsPredLookup;
1793
1795FLECS_API extern const ecs_entity_t EcsScopeOpen;
1796
1798FLECS_API extern const ecs_entity_t EcsScopeClose;
1799
1804FLECS_API extern const ecs_entity_t EcsEmpty;
1805
1806FLECS_API extern const ecs_entity_t ecs_id(EcsPipeline);
1807FLECS_API extern const ecs_entity_t EcsOnStart;
1808FLECS_API extern const ecs_entity_t EcsPreFrame;
1809FLECS_API extern const ecs_entity_t EcsOnLoad;
1810FLECS_API extern const ecs_entity_t EcsPostLoad;
1811FLECS_API extern const ecs_entity_t EcsPreUpdate;
1812FLECS_API extern const ecs_entity_t EcsOnUpdate;
1813FLECS_API extern const ecs_entity_t EcsOnValidate;
1814FLECS_API extern const ecs_entity_t EcsPostUpdate;
1815FLECS_API extern const ecs_entity_t EcsPreStore;
1816FLECS_API extern const ecs_entity_t EcsOnStore;
1817FLECS_API extern const ecs_entity_t EcsPostFrame;
1818FLECS_API extern const ecs_entity_t EcsPhase;
1822#define EcsLastInternalComponentId (ecs_id(EcsPoly))
1823
1826#define EcsFirstUserComponentId (8)
1827
1830#define EcsFirstUserEntityId (FLECS_HI_COMPONENT_ID + 128)
1831
1832/* When visualized the reserved id ranges look like this:
1833 * - [1..8]: Builtin components
1834 * - [9..FLECS_HI_COMPONENT_ID]: Low ids reserved for application components
1835 * - [FLECS_HI_COMPONENT_ID + 1..EcsFirstUserEntityId]: Builtin entities
1836 */
1837
1859FLECS_API
1861
1868FLECS_API
1870
1878FLECS_API
1880 int argc,
1881 char *argv[]);
1882
1889FLECS_API
1891 ecs_world_t *world);
1892
1900FLECS_API
1902 const ecs_world_t *world);
1903
1911FLECS_API
1913 ecs_world_t *world,
1914 ecs_fini_action_t action,
1915 void *ctx);
1916
1923
1950FLECS_API
1952 const ecs_world_t *world);
1953
1979FLECS_API
1981 ecs_world_t *world,
1982 ecs_ftime_t delta_time);
1983
1990FLECS_API
1992 ecs_world_t *world);
1993
2001FLECS_API
2003 ecs_world_t *world,
2004 ecs_fini_action_t action,
2005 void *ctx);
2006
2013FLECS_API
2015 ecs_world_t *world);
2016
2023FLECS_API
2025 const ecs_world_t *world);
2026
2039 ecs_world_t *world,
2040 bool enable);
2041
2053 ecs_world_t *world,
2054 bool enable);
2055
2071FLECS_API
2073 ecs_world_t *world,
2074 ecs_ftime_t fps);
2075
2089FLECS_API
2091 ecs_world_t *world,
2092 ecs_flags32_t flags);
2093
2170FLECS_API
2172 ecs_world_t *world,
2173 bool multi_threaded);
2174
2182FLECS_API
2184 ecs_world_t *world);
2185
2196FLECS_API
2198 ecs_world_t *world);
2199
2215FLECS_API
2217 ecs_world_t *world);
2218
2229FLECS_API
2231 const ecs_world_t *world);
2232
2246FLECS_API
2248 ecs_world_t *world);
2249
2264FLECS_API
2266 ecs_world_t *world);
2267
2278FLECS_API
2280 ecs_world_t *world);
2281
2295FLECS_API
2297 ecs_world_t *world,
2298 int32_t stages);
2299
2306FLECS_API
2308 const ecs_world_t *world);
2309
2325FLECS_API
2327 const ecs_world_t *world,
2328 int32_t stage_id);
2329
2337FLECS_API
2339 const ecs_world_t *world);
2340
2348FLECS_API
2350 ecs_world_t *world);
2351
2356FLECS_API
2358 ecs_world_t *stage);
2359
2367FLECS_API
2369 const ecs_world_t *world);
2370
2386FLECS_API
2388 ecs_world_t *world,
2389 void *ctx,
2390 ecs_ctx_free_t ctx_free);
2391
2400FLECS_API
2402 ecs_world_t *world,
2403 void *ctx,
2404 ecs_ctx_free_t ctx_free);
2405
2413FLECS_API
2415 const ecs_world_t *world);
2416
2424FLECS_API
2426 const ecs_world_t *world);
2427
2433FLECS_API
2435
2441FLECS_API
2443 const ecs_world_t *world);
2444
2453FLECS_API
2455 ecs_world_t *world,
2456 int32_t entity_count);
2457
2473FLECS_API
2475 ecs_world_t *world,
2476 ecs_entity_t id_start,
2477 ecs_entity_t id_end);
2478
2489FLECS_API
2491 ecs_world_t *world,
2492 bool enable);
2493
2499FLECS_API
2501 const ecs_world_t *world);
2502
2516FLECS_API
2518 ecs_world_t *world,
2519 ecs_flags32_t flags);
2520
2554FLECS_API
2556 ecs_world_t *world,
2557 ecs_id_t id,
2558 uint16_t clear_generation,
2559 uint16_t delete_generation,
2560 int32_t min_id_count,
2561 double time_budget_seconds);
2562
2568FLECS_API
2570 const ecs_poly_t *poly);
2571
2577FLECS_API
2579 const ecs_poly_t *poly);
2580
2594FLECS_API
2596 const ecs_poly_t *object,
2597 int32_t type);
2598
2602#define flecs_poly_is(object, type)\
2603 flecs_poly_is_(object, type##_magic)
2604
2613FLECS_API
2615 ecs_entity_t first,
2616 ecs_entity_t second);
2617
2644FLECS_API
2646 ecs_world_t *world);
2647
2665FLECS_API
2667 ecs_world_t *world);
2668
2677FLECS_API
2679 ecs_world_t *world,
2680 ecs_id_t id);
2681
2689FLECS_API
2691 ecs_world_t *world,
2692 ecs_table_t *table);
2693
2712FLECS_API
2714 ecs_world_t *world,
2715 const ecs_entity_desc_t *desc);
2716
2743FLECS_API
2745 ecs_world_t *world,
2746 const ecs_bulk_desc_t *desc);
2747
2757FLECS_API
2759 ecs_world_t *world,
2760 ecs_id_t id,
2761 int32_t count);
2762
2778FLECS_API
2780 ecs_world_t *world,
2781 ecs_entity_t dst,
2782 ecs_entity_t src,
2783 bool copy_value);
2784
2793FLECS_API
2795 ecs_world_t *world,
2796 ecs_entity_t entity);
2797
2805FLECS_API
2807 ecs_world_t *world,
2808 ecs_id_t id);
2809
2827FLECS_API
2829 ecs_world_t *world,
2830 ecs_entity_t entity,
2831 ecs_id_t id);
2832
2841FLECS_API
2843 ecs_world_t *world,
2844 ecs_entity_t entity,
2845 ecs_id_t id);
2846
2898FLECS_API
2900 ecs_world_t *world,
2901 ecs_entity_t entity,
2902 ecs_id_t id);
2903
2910FLECS_API
2912 ecs_world_t *world,
2913 ecs_entity_t entity);
2914
2922FLECS_API
2924 ecs_world_t *world,
2925 ecs_id_t id);
2926
2934FLECS_API
2936 ecs_world_t *world,
2937 ecs_id_t id);
2938
2945FLECS_API
2947 const ecs_world_t *world);
2948
2967FLECS_API
2969 ecs_world_t *world,
2970 ecs_entity_t entity,
2971 bool enabled);
2972
2986FLECS_API
2988 ecs_world_t *world,
2989 ecs_entity_t entity,
2990 ecs_id_t id,
2991 bool enable);
2992
3003FLECS_API
3005 const ecs_world_t *world,
3006 ecs_entity_t entity,
3007 ecs_id_t id);
3008
3032FLECS_API
3033const void* ecs_get_id(
3034 const ecs_world_t *world,
3035 ecs_entity_t entity,
3036 ecs_id_t id);
3037
3049FLECS_API
3051 const ecs_world_t *world,
3052 ecs_entity_t entity,
3053 ecs_id_t id);
3054
3072FLECS_API
3074 ecs_world_t *world,
3075 ecs_entity_t entity,
3076 ecs_id_t id);
3077
3089FLECS_API
3091 ecs_world_t *world,
3092 ecs_entity_t entity,
3093 ecs_id_t id);
3094
3105FLECS_API
3107 const ecs_world_t *world,
3108 ecs_entity_t entity,
3109 ecs_id_t id);
3110
3119FLECS_API
3121 const ecs_world_t *world,
3122 ecs_ref_t *ref,
3123 ecs_id_t id);
3124
3132FLECS_API
3134 const ecs_world_t *world,
3135 ecs_ref_t *ref);
3136
3144FLECS_API
3146 const ecs_world_t *world,
3147 ecs_entity_t entity);
3148
3167FLECS_API
3169 ecs_world_t *world,
3170 ecs_entity_t entity);
3171
3178FLECS_API
3180 ecs_record_t *record);
3181
3201FLECS_API
3203 ecs_world_t *world,
3204 ecs_entity_t entity);
3205
3211FLECS_API
3213 const ecs_record_t *record);
3214
3221FLECS_API
3223 const ecs_record_t *record);
3224
3240FLECS_API
3242 const ecs_world_t *world,
3243 const ecs_record_t *record,
3244 ecs_id_t id);
3245
3254FLECS_API
3256 ecs_world_t *world,
3257 ecs_record_t *record,
3258 ecs_id_t id);
3259
3267FLECS_API
3269 ecs_world_t *world,
3270 const ecs_record_t *record,
3271 ecs_id_t id);
3272
3289FLECS_API
3291 const ecs_record_t *record,
3292 int32_t column,
3293 size_t size);
3294
3314FLECS_API
3316 ecs_world_t *world,
3317 ecs_entity_t entity,
3318 ecs_id_t id,
3319 bool *is_new);
3320
3330FLECS_API
3332 ecs_world_t *world,
3333 ecs_entity_t entity,
3334 ecs_id_t id);
3335
3351FLECS_API
3353 ecs_world_t *world,
3354 ecs_entity_t entity,
3355 ecs_id_t id,
3356 size_t size,
3357 const void *ptr);
3358
3386FLECS_API
3388 const ecs_world_t *world,
3389 ecs_entity_t e);
3390
3416FLECS_API
3418 const ecs_world_t *world,
3419 ecs_entity_t e);
3420
3426FLECS_API
3428 ecs_entity_t e);
3429
3446FLECS_API
3448 const ecs_world_t *world,
3449 ecs_entity_t e);
3450
3473FLECS_API
3475 ecs_world_t *world,
3476 ecs_entity_t entity);
3477
3496FLECS_API
3498 ecs_world_t *world,
3499 ecs_id_t id);
3500
3508FLECS_API
3510 const ecs_world_t *world,
3511 ecs_entity_t entity);
3512
3527FLECS_API
3529 ecs_world_t *world,
3530 ecs_entity_t entity);
3531
3547FLECS_API
3549 const ecs_world_t *world,
3550 ecs_entity_t entity);
3551
3558FLECS_API
3560 const ecs_world_t *world,
3561 ecs_entity_t entity);
3562
3570FLECS_API
3572 const ecs_world_t *world,
3573 const ecs_type_t* type);
3574
3586FLECS_API
3588 const ecs_world_t *world,
3589 const ecs_table_t *table);
3590
3605FLECS_API
3607 const ecs_world_t *world,
3608 ecs_entity_t entity);
3609
3620FLECS_API
3622 const ecs_world_t *world,
3623 ecs_entity_t entity,
3624 ecs_id_t id);
3625
3636FLECS_API
3638 const ecs_world_t *world,
3639 ecs_entity_t entity,
3640 ecs_id_t id);
3641
3656FLECS_API
3658 const ecs_world_t *world,
3659 ecs_entity_t entity,
3660 ecs_entity_t rel,
3661 int32_t index);
3662
3676FLECS_API
3678 const ecs_world_t *world,
3679 ecs_entity_t entity);
3680
3701FLECS_API
3703 const ecs_world_t *world,
3704 ecs_entity_t entity,
3705 ecs_entity_t rel,
3706 ecs_id_t id);
3707
3718FLECS_API
3720 const ecs_world_t *world,
3721 ecs_entity_t entity,
3722 ecs_entity_t rel);
3723
3731FLECS_API
3733 const ecs_world_t *world,
3734 ecs_id_t entity);
3735
3755FLECS_API
3756const char* ecs_get_name(
3757 const ecs_world_t *world,
3758 ecs_entity_t entity);
3759
3769FLECS_API
3770const char* ecs_get_symbol(
3771 const ecs_world_t *world,
3772 ecs_entity_t entity);
3773
3787FLECS_API
3789 ecs_world_t *world,
3790 ecs_entity_t entity,
3791 const char *name);
3792
3806FLECS_API
3808 ecs_world_t *world,
3809 ecs_entity_t entity,
3810 const char *symbol);
3811
3823FLECS_API
3825 ecs_world_t *world,
3826 ecs_entity_t entity,
3827 const char *alias);
3828
3844FLECS_API
3846 const ecs_world_t *world,
3847 const char *path);
3848
3863FLECS_API
3865 const ecs_world_t *world,
3866 ecs_entity_t parent,
3867 const char *name);
3868
3891FLECS_API
3893 const ecs_world_t *world,
3894 ecs_entity_t parent,
3895 const char *path,
3896 const char *sep,
3897 const char *prefix,
3898 bool recursive);
3899
3917FLECS_API
3919 const ecs_world_t *world,
3920 const char *symbol,
3921 bool lookup_as_path,
3922 bool recursive);
3923
3945FLECS_API
3947 const ecs_world_t *world,
3948 ecs_entity_t parent,
3949 ecs_entity_t child,
3950 const char *sep,
3951 const char *prefix);
3952
3966 const ecs_world_t *world,
3967 ecs_entity_t parent,
3968 ecs_entity_t child,
3969 const char *sep,
3970 const char *prefix,
3971 ecs_strbuf_t *buf);
3972
3988FLECS_API
3990 ecs_world_t *world,
3991 ecs_entity_t parent,
3992 const char *path,
3993 const char *sep,
3994 const char *prefix);
3995
4010FLECS_API
4012 ecs_world_t *world,
4013 ecs_entity_t entity,
4014 ecs_entity_t parent,
4015 const char *path,
4016 const char *sep,
4017 const char *prefix);
4018
4032FLECS_API
4034 ecs_world_t *world,
4035 ecs_entity_t scope);
4036
4044FLECS_API
4046 const ecs_world_t *world);
4047
4057FLECS_API
4059 ecs_world_t *world,
4060 const char *prefix);
4061
4088FLECS_API
4090 ecs_world_t *world,
4091 const ecs_entity_t *lookup_path);
4092
4099FLECS_API
4101 const ecs_world_t *world);
4102
4127FLECS_API
4129 ecs_world_t *world,
4130 const ecs_component_desc_t *desc);
4131
4141FLECS_API
4143 const ecs_world_t *world,
4144 ecs_id_t id);
4145
4157FLECS_API
4159 ecs_world_t *world,
4160 ecs_entity_t id,
4161 const ecs_type_hooks_t *hooks);
4162
4169FLECS_API
4171 const ecs_world_t *world,
4172 ecs_entity_t id);
4173
4197FLECS_API
4199 const ecs_world_t *world,
4200 ecs_id_t id);
4201
4210FLECS_API
4212 const ecs_world_t *world,
4213 ecs_id_t id);
4214
4234FLECS_API
4236 const ecs_world_t *world,
4237 ecs_id_t id);
4238
4247FLECS_API
4249 ecs_id_t id,
4250 ecs_id_t pattern);
4251
4257FLECS_API
4259 ecs_id_t id);
4260
4266FLECS_API
4268 ecs_id_t id);
4269
4283FLECS_API
4285 const ecs_world_t *world,
4286 ecs_id_t id);
4287
4296FLECS_API
4297ecs_flags32_t ecs_id_get_flags(
4298 const ecs_world_t *world,
4299 ecs_id_t id);
4300
4307FLECS_API
4309 ecs_id_t id_flags);
4310
4318FLECS_API
4320 const ecs_world_t *world,
4321 ecs_id_t id);
4322
4330FLECS_API
4332 const ecs_world_t *world,
4333 ecs_id_t id,
4334 ecs_strbuf_t *buf);
4335
4349FLECS_API
4351 const ecs_term_ref_t *id);
4352
4364FLECS_API
4366 const ecs_term_t *term);
4367
4382FLECS_API
4384 const ecs_term_t *term);
4385
4398FLECS_API
4400 const ecs_term_t *term);
4401
4410FLECS_API
4412 const ecs_world_t *world,
4413 const ecs_term_t *term);
4414
4422FLECS_API
4424 const ecs_query_t *query);
4425
4466FLECS_API
4468 const ecs_world_t *world,
4469 ecs_id_t id);
4470
4476FLECS_API
4478 ecs_iter_t *it);
4479
4492FLECS_API
4494 const ecs_world_t *world,
4495 ecs_entity_t parent);
4496
4502FLECS_API
4504 ecs_iter_t *it);
4505
4521FLECS_API
4523 ecs_world_t *world,
4524 const ecs_query_desc_t *desc);
4525
4530FLECS_API
4532 ecs_query_t *query);
4533
4542FLECS_API
4544 const ecs_query_t *query,
4545 const char *name);
4546
4554FLECS_API
4556 const ecs_query_t *query,
4557 int32_t var_id);
4558
4569FLECS_API
4571 const ecs_query_t *query,
4572 int32_t var_id);
4573
4642FLECS_API
4644 const ecs_world_t *world,
4645 const ecs_query_t *query);
4646
4654FLECS_API
4656 ecs_iter_t *it);
4657
4676FLECS_API
4678 ecs_query_t *query,
4679 ecs_entity_t entity,
4680 ecs_iter_t *it);
4681
4700FLECS_API
4702 ecs_query_t *query,
4703 ecs_table_t *table,
4704 ecs_iter_t *it);
4705
4732FLECS_API
4734 ecs_query_t *query,
4735 ecs_table_range_t *range,
4736 ecs_iter_t *it);
4737
4745FLECS_API
4747 const ecs_query_t *query);
4748
4758FLECS_API
4760 const ecs_query_t *query);
4761
4776FLECS_API
4778 const ecs_query_t *query,
4779 const ecs_iter_t *it);
4780
4798FLECS_API
4800 ecs_query_t *query,
4801 ecs_iter_t *it,
4802 const char *expr);
4803
4831FLECS_API
4833 ecs_query_t *query);
4834
4845FLECS_API
4847 ecs_iter_t *it);
4848
4871FLECS_API
4873 ecs_iter_t *it,
4874 uint64_t group_id);
4875
4884FLECS_API
4886 const ecs_query_t *query,
4887 uint64_t group_id);
4888
4897FLECS_API
4899 const ecs_query_t *query,
4900 uint64_t group_id);
4901
4909
4916FLECS_API
4918 const ecs_query_t *query);
4919
4925FLECS_API
4927 const ecs_query_t *query);
4928
4957FLECS_API
4959 ecs_world_t *world,
4960 ecs_event_desc_t *desc);
4961
4972FLECS_API
4974 ecs_world_t *world,
4975 ecs_event_desc_t *desc);
4976
4987FLECS_API
4989 ecs_world_t *world,
4990 const ecs_observer_desc_t *desc);
4991
5000FLECS_API
5002 const ecs_world_t *world,
5003 ecs_entity_t observer);
5004
5027FLECS_API
5029 ecs_iter_t *it);
5030
5040FLECS_API
5042 ecs_iter_t *it);
5043
5055FLECS_API
5057 ecs_iter_t *it);
5058
5071FLECS_API
5073 ecs_iter_t *it);
5074
5082FLECS_API
5084 ecs_iter_t *it);
5085
5124FLECS_API
5126 ecs_iter_t *it,
5127 int32_t var_id,
5128 ecs_entity_t entity);
5129
5140FLECS_API
5142 ecs_iter_t *it,
5143 int32_t var_id,
5144 const ecs_table_t *table);
5145
5156FLECS_API
5158 ecs_iter_t *it,
5159 int32_t var_id,
5160 const ecs_table_range_t *range);
5161
5174FLECS_API
5176 ecs_iter_t *it,
5177 int32_t var_id);
5178
5192FLECS_API
5194 ecs_iter_t *it,
5195 int32_t var_id);
5196
5210FLECS_API
5212 ecs_iter_t *it,
5213 int32_t var_id);
5214
5226FLECS_API
5228 ecs_iter_t *it,
5229 int32_t var_id);
5230
5242FLECS_API
5244 ecs_iter_t *it);
5245
5257FLECS_API
5259 const ecs_iter_t *it);
5260
5276FLECS_API
5278 const ecs_iter_t *it,
5279 int32_t offset,
5280 int32_t limit);
5281
5288FLECS_API
5290 ecs_iter_t *it);
5291
5312FLECS_API
5314 const ecs_iter_t *it,
5315 int32_t index,
5316 int32_t count);
5317
5324FLECS_API
5326 ecs_iter_t *it);
5327
5369FLECS_API
5371 const ecs_iter_t *it,
5372 size_t size,
5373 int8_t index);
5374
5396FLECS_API
5398 const ecs_iter_t *it,
5399 size_t size,
5400 int8_t index,
5401 int32_t row);
5402
5411FLECS_API
5413 const ecs_iter_t *it,
5414 int8_t index);
5415
5426FLECS_API
5428 const ecs_iter_t *it,
5429 int8_t index);
5430
5437FLECS_API
5439 const ecs_iter_t *it,
5440 int8_t index);
5441
5448FLECS_API
5450 const ecs_iter_t *it,
5451 int8_t index);
5452
5461FLECS_API
5463 const ecs_iter_t *it,
5464 int8_t index);
5465
5473FLECS_API
5475 const ecs_iter_t *it,
5476 int8_t index);
5477
5485FLECS_API
5487 const ecs_iter_t *it,
5488 int8_t index);
5489
5503FLECS_API
5505 const ecs_iter_t *it,
5506 int8_t index);
5507
5523FLECS_API
5525 const ecs_table_t *table);
5526
5537FLECS_API
5539 const ecs_world_t *world,
5540 const ecs_table_t *table,
5541 ecs_id_t id);
5542
5552FLECS_API
5554 const ecs_world_t *world,
5555 const ecs_table_t *table,
5556 ecs_id_t id);
5557
5565FLECS_API
5567 const ecs_table_t *table);
5568
5582FLECS_API
5584 const ecs_table_t *table,
5585 int32_t index);
5586
5595FLECS_API
5597 const ecs_table_t *table,
5598 int32_t index);
5599
5608FLECS_API
5610 const ecs_table_t *table,
5611 int32_t index,
5612 int32_t offset);
5613
5623FLECS_API
5625 const ecs_world_t *world,
5626 const ecs_table_t *table,
5627 ecs_id_t id,
5628 int32_t offset);
5629
5637FLECS_API
5639 const ecs_table_t *table,
5640 int32_t index);
5641
5648FLECS_API
5650 const ecs_table_t *table);
5651
5659FLECS_API
5661 const ecs_table_t *table);
5662
5669FLECS_API
5671 const ecs_table_t *table);
5672
5683FLECS_API
5685 const ecs_world_t *world,
5686 const ecs_table_t *table,
5687 ecs_id_t id);
5688
5699FLECS_API
5701 const ecs_world_t *world,
5702 const ecs_table_t *table,
5703 ecs_entity_t rel);
5704
5714FLECS_API
5716 ecs_world_t *world,
5717 ecs_table_t *table,
5718 ecs_id_t id);
5719
5730FLECS_API
5732 ecs_world_t *world,
5733 const ecs_id_t *ids,
5734 int32_t id_count);
5735
5745FLECS_API
5747 ecs_world_t *world,
5748 ecs_table_t *table,
5749 ecs_id_t id);
5750
5766FLECS_API
5768 ecs_world_t *world,
5769 ecs_table_t *table);
5770
5777FLECS_API
5779 ecs_world_t *world,
5780 ecs_table_t *table);
5781
5791FLECS_API
5793 ecs_table_t *table,
5794 ecs_flags32_t flags);
5795
5803FLECS_API
5805 ecs_world_t* world,
5806 ecs_table_t* table,
5807 int32_t row_1,
5808 int32_t row_2);
5809
5832FLECS_API
5834 ecs_world_t *world,
5835 ecs_entity_t entity,
5836 ecs_record_t *record,
5837 ecs_table_t *table,
5838 const ecs_type_t *added,
5839 const ecs_type_t *removed);
5840
5841
5860FLECS_API
5862 const ecs_world_t *world,
5863 const ecs_table_t *table,
5864 ecs_id_t id,
5865 ecs_id_t *id_out);
5866
5902FLECS_API
5904 const ecs_world_t *world,
5905 const ecs_table_t *table,
5906 int32_t offset,
5907 ecs_id_t id,
5908 ecs_id_t *id_out);
5909
5951FLECS_API
5953 const ecs_world_t *world,
5954 const ecs_table_t *table,
5955 int32_t offset,
5956 ecs_id_t id,
5957 ecs_entity_t rel,
5958 ecs_flags64_t flags, /* EcsSelf and/or EcsUp */
5959 ecs_entity_t *subject_out,
5960 ecs_id_t *id_out,
5961 struct ecs_table_record_t **tr_out);
5962
5979FLECS_API
5981 const ecs_world_t *world,
5982 ecs_entity_t type,
5983 void *ptr);
5984
5992FLECS_API
5994 const ecs_world_t *world,
5995 const ecs_type_info_t *ti,
5996 void *ptr);
5997
6004FLECS_API
6006 ecs_world_t *world,
6007 ecs_entity_t type);
6008
6016 ecs_world_t *world,
6017 const ecs_type_info_t *ti);
6018
6027 const ecs_world_t *world,
6028 const ecs_type_info_t *ti,
6029 void *ptr);
6030
6038FLECS_API
6040 const ecs_world_t *world,
6041 ecs_entity_t type,
6042 void* ptr);
6043
6051FLECS_API
6053 ecs_world_t *world,
6054 ecs_entity_t type,
6055 void* ptr);
6056
6065FLECS_API
6067 const ecs_world_t *world,
6068 const ecs_type_info_t *ti,
6069 void* dst,
6070 const void *src);
6071
6080FLECS_API
6082 const ecs_world_t *world,
6083 ecs_entity_t type,
6084 void* dst,
6085 const void *src);
6086
6096 const ecs_world_t *world,
6097 const ecs_type_info_t *ti,
6098 void* dst,
6099 void *src);
6100
6110 const ecs_world_t *world,
6111 ecs_entity_t type,
6112 void* dst,
6113 void *src);
6114
6124 const ecs_world_t *world,
6125 const ecs_type_info_t *ti,
6126 void* dst,
6127 void *src);
6128
6138 const ecs_world_t *world,
6139 ecs_entity_t type,
6140 void* dst,
6141 void *src);
6142
6156#include "flecs/addons/flecs_c.h"
6157
6158#ifdef __cplusplus
6159}
6160#endif
6161
6162#include "flecs/private/addons.h"
6163
6164#endif
The deprecated addon contains deprecated operations.
Extends the core API with convenience macros for C applications.
ecs_entity_t ecs_set_with(ecs_world_t *world, ecs_id_t id)
Set current with id.
void ecs_add_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Add a (component) id to an entity.
void ecs_remove_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Remove a (component) id from an entity.
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 current with id.
void ecs_remove_all(ecs_world_t *world, ecs_id_t id)
Remove all instances of the specified (component) id.
void ecs_auto_override_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Add auto override for (component) id.
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 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 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 EcsOnTableFill
Event that triggers when a table becomes non-empty.
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 EcsOnTableEmpty
Event that triggers when a table becomes empty (doesn't emit on creation).
const ecs_entity_t EcsWorld
Entity associated with world (used for "attaching" components to world)
const ecs_entity_t EcsPrivate
Tag to indicate an entity/component/system is private to a module.
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 EcsUnion
Mark relationship as union.
const ecs_entity_t EcsPostFrame
PostFrame pipeline phase.
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 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 ("$").
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 *world)
Merge world or 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.
ecs_entity_t ecs_component_init(ecs_world_t *world, const ecs_component_desc_t *desc)
Find or create a component.
void ecs_set_hooks_id(ecs_world_t *world, ecs_entity_t id, const ecs_type_hooks_t *hooks)
Register hooks for component.
struct ecs_component_desc_t ecs_component_desc_t
Used with ecs_component_init().
const ecs_type_info_t * ecs_get_type_info(const ecs_world_t *world, ecs_id_t id)
Get the type for an id.
const ecs_type_hooks_t * ecs_get_hooks_id(const ecs_world_t *world, ecs_entity_t id)
Get hooks for component.
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:394
struct ecs_ref_t ecs_ref_t
A ref is a fast way to fetch a component for a specific entity.
Definition flecs.h:443
ecs_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:347
struct ecs_table_record_t ecs_table_record_t
Metadata describing where a component id is stored in a table.
struct ecs_id_record_t ecs_id_record_t
Information about a (component) id, such as type info and tables with the id.
Definition flecs.h:459
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:391
struct ecs_mixins_t ecs_mixins_t
Type that stores poly mixins.
Definition flecs.h:483
uint64_t ecs_id_t
Ids are the things that can be added to an entity.
Definition flecs.h:340
struct ecs_observable_t ecs_observable_t
An observable produces events that can be listened for by an observer.
Definition flecs.h:427
struct ecs_table_t ecs_table_t
A table stores entities and components for a specific type.
Definition flecs.h:397
void ecs_poly_t
A poly object.
Definition flecs.h:480
struct ecs_table_cache_hdr_t ecs_table_cache_hdr_t
Header for table cache elements.
ecs_entity_t ecs_new_low_id(ecs_world_t *world)
Create new low id.
ecs_entity_t ecs_new_w_id(ecs_world_t *world, ecs_id_t id)
Create new entity with (component) id.
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.
const ecs_entity_t * ecs_bulk_new_w_id(ecs_world_t *world, ecs_id_t id, int32_t count)
Create N new entities.
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_with(ecs_world_t *world, ecs_id_t id)
Delete all entities with the specified id.
void ecs_delete(ecs_world_t *world, ecs_entity_t entity)
Delete an entity.
ecs_entity_t ecs_new_w_table(ecs_world_t *world, ecs_table_t *table)
Create new entity in table.
bool ecs_children_next(ecs_iter_t *it)
Progress an iterator created with ecs_children().
bool ecs_each_next(ecs_iter_t *it)
Progress an iterator created with ecs_each_id().
ecs_iter_t ecs_children(const ecs_world_t *world, ecs_entity_t parent)
Iterate children of parent.
ecs_iter_t ecs_each_id(const ecs_world_t *world, ecs_id_t id)
Iterate all entities with specified (component id).
bool ecs_is_enabled_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if component is enabled.
void ecs_enable_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id, bool enable)
Enable or disable component.
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.
const ecs_type_t * ecs_get_type(const ecs_world_t *world, ecs_entity_t entity)
Get the type of an entity.
bool ecs_has_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if an entity has an id.
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.
bool ecs_owns_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Test if an entity owns an id.
int32_t ecs_get_depth(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel)
Return depth for entity in tree for the specified relationship.
ecs_entity_t ecs_get_target_for_id(const ecs_world_t *world, ecs_entity_t entity, ecs_entity_t rel, ecs_id_t id)
Get the target of a relationship for a given id.
ecs_table_t * ecs_get_table(const ecs_world_t *world, ecs_entity_t entity)
Get the table of an entity.
void(* ecs_module_action_t)(ecs_world_t *world)
Initialization action for modules.
Definition flecs.h:607
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:587
uint64_t(* ecs_hash_value_action_t)(const void *ptr)
Callback used for hashing values.
Definition flecs.h:625
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:600
void(* ecs_iter_fini_action_t)(ecs_iter_t *it)
Function prototype for freeing an iterator.
Definition flecs.h:565
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:594
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:576
bool(* ecs_iter_next_action_t)(ecs_iter_t *it)
Function prototype for iterating an iterator.
Definition flecs.h:557
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:547
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:635
int(* ecs_compare_action_t)(const void *ptr1, const void *ptr2)
Callback used for sorting values.
Definition flecs.h:620
void(* ecs_fini_action_t)(ecs_world_t *world, void *ctx)
Action callback on world exit.
Definition flecs.h:611
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:642
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
Definition flecs.h:649
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
Definition flecs.h:538
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:616
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:569
void(* ecs_xtor_t)(void *ptr, int32_t count, const ecs_type_info_t *type_info)
Constructor/destructor callback.
Definition flecs.h:629
void * ecs_get_mut_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Get a mutable pointer to a component.
ecs_ref_t ecs_ref_init_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Create a component ref.
ecs_entity_t ecs_record_get_entity(const ecs_record_t *record)
Get entity corresponding with record.
void ecs_ref_update(const ecs_world_t *world, ecs_ref_t *ref)
Update ref.
const void * ecs_record_get_id(const ecs_world_t *world, const ecs_record_t *record, ecs_id_t id)
Get component from entity record.
void * ecs_record_get_by_column(const ecs_record_t *record, int32_t column, size_t size)
Get component pointer from column/record.
void ecs_read_end(const ecs_record_t *record)
End read access to entity.
void * ecs_emplace_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id, bool *is_new)
Emplace a component.
void * ecs_ensure_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Get a mutable pointer to a component.
void ecs_write_end(ecs_record_t *record)
End exclusive write access to entity.
void ecs_set_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id, size_t size, const void *ptr)
Set the value of a component.
void * ecs_ensure_modified_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Combines ensure + modified in single operation.
void * ecs_ref_get_id(const ecs_world_t *world, ecs_ref_t *ref, ecs_id_t id)
Get component from ref.
bool ecs_record_has_id(ecs_world_t *world, const ecs_record_t *record, ecs_id_t id)
Test if entity for record has a (component) id.
void * ecs_record_ensure_id(ecs_world_t *world, ecs_record_t *record, ecs_id_t id)
Same as ecs_record_get_id(), but returns a mutable pointer.
const void * ecs_get_id(const ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Get an immutable pointer to a component.
ecs_record_t * ecs_write_begin(ecs_world_t *world, ecs_entity_t entity)
Begin exclusive write access to entity.
void ecs_modified_id(ecs_world_t *world, ecs_entity_t entity, ecs_id_t id)
Signal that a component has been modified.
ecs_record_t * ecs_record_find(const ecs_world_t *world, ecs_entity_t entity)
Find record for entity.
const ecs_record_t * ecs_read_begin(ecs_world_t *world, ecs_entity_t entity)
Begin read access to entity.
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.
bool ecs_id_is_valid(const ecs_world_t *world, ecs_id_t id)
Utility to check if id is valid.
bool ecs_id_is_pair(ecs_id_t id)
Utility to check if id is a pair.
ecs_entity_t ecs_get_typeid(const ecs_world_t *world, ecs_id_t id)
Get the type for an id.
bool ecs_id_match(ecs_id_t id, ecs_id_t pattern)
Utility to match an id with a pattern.
const char * ecs_id_flag_str(ecs_id_t id_flags)
Convert id flag to string.
bool ecs_id_in_use(const ecs_world_t *world, ecs_id_t id)
Returns whether specified id is in use.
bool ecs_id_is_tag(const ecs_world_t *world, ecs_id_t id)
Returns whether specified id a tag.
void ecs_id_str_buf(const ecs_world_t *world, ecs_id_t id, ecs_strbuf_t *buf)
Write id string to buffer.
char * ecs_id_str(const ecs_world_t *world, ecs_id_t id)
Convert id to string.
bool ecs_id_is_wildcard(ecs_id_t id)
Utility to check if id is a wildcard.
ecs_flags32_t ecs_id_get_flags(const ecs_world_t *world, ecs_id_t id)
Get flags associated with id.
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.
bool ecs_field_is_readonly(const ecs_iter_t *it, int8_t index)
Test whether the field is readonly.
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.
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.
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.
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.
void ecs_make_alive_id(ecs_world_t *world, ecs_id_t id)
Same as ecs_make_alive(), but for (component) ids.
ecs_entity_t ecs_get_alive(const ecs_world_t *world, ecs_entity_t e)
Get alive identifier.
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:276
#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:270
#define FLECS_TERM_COUNT_MAX
Maximum number of terms in queries.
Definition flecs.h:286
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.
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)
Write path identifier to buffer.
ecs_entity_t ecs_get_scope(const ecs_world_t *world)
Get the current scope.
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.
void ecs_iter_set_group(ecs_iter_t *it, uint64_t group_id)
Set group to iterate for query iterator.
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_has(ecs_query_t *query, ecs_entity_t entity, ecs_iter_t *it)
Match entity with query.
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.
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.
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.
bool ecs_query_has_range(ecs_query_t *query, ecs_table_range_t *range, ecs_iter_t *it)
Match range with query.
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.
bool ecs_query_has_table(ecs_query_t *query, ecs_table_t *table, ecs_iter_t *it)
Match table with query.
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.
bool ecs_term_ref_is_set(const ecs_term_ref_t *id)
Test whether term id is set.
bool ecs_term_is_initialized(const ecs_term_t *term)
Test whether a term 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.
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:683
ecs_inout_kind_t
Specify read/write access for term.
Definition flecs.h:662
ecs_oper_kind_t
Specify operator for term.
Definition flecs.h:672
@ EcsQueryCacheAll
Require that all query terms can be cached.
Definition flecs.h:686
@ EcsQueryCacheDefault
Behavior determined by query creation context.
Definition flecs.h:684
@ EcsQueryCacheNone
No caching.
Definition flecs.h:687
@ EcsQueryCacheAuto
Cache query terms that are cacheable.
Definition flecs.h:685
@ EcsOut
Term is only written.
Definition flecs.h:668
@ EcsInOut
Term is both read and written.
Definition flecs.h:666
@ EcsInOutFilter
Same as InOutNone + prevents term from triggering observers.
Definition flecs.h:665
@ EcsInOutDefault
InOut for regular terms, In for shared terms.
Definition flecs.h:663
@ EcsInOutNone
Term is neither read nor written.
Definition flecs.h:664
@ EcsIn
Term is only read.
Definition flecs.h:667
@ EcsNot
The term must not match.
Definition flecs.h:675
@ EcsOptional
The term may match.
Definition flecs.h:676
@ EcsOr
One of the terms in an or chain must match.
Definition flecs.h:674
@ EcsOrFrom
Term must match at least one component from term id.
Definition flecs.h:678
@ EcsAnd
The term must match.
Definition flecs.h:673
@ EcsNotFrom
Term must match none of the components from term id.
Definition flecs.h:679
@ EcsAndFrom
Term must match all components from term id.
Definition flecs.h:677
ecs_table_t * ecs_table_add_id(ecs_world_t *world, ecs_table_t *table, ecs_id_t id)
Get table that has all components of current table plus the specified id.
int32_t ecs_search(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t id, ecs_id_t *id_out)
Search for component id in table type.
const ecs_type_t * ecs_table_get_type(const ecs_table_t *table)
Get type for table.
int32_t ecs_search_offset(const ecs_world_t *world, const ecs_table_t *table, int32_t offset, ecs_id_t id, ecs_id_t *id_out)
Search for component id in table type starting from an offset.
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.
void * ecs_table_get_column(const ecs_table_t *table, int32_t index, int32_t offset)
Get column from table by column index.
bool ecs_table_has_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t id)
Test if table has id.
ecs_table_t * ecs_table_remove_id(ecs_world_t *world, ecs_table_t *table, ecs_id_t id)
Get table that has all components of current table minus the specified id.
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.
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.
void * ecs_table_get_id(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t id, int32_t offset)
Get column from table by component id.
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.
int32_t ecs_table_get_column_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t id)
Get column index for id.
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.
int32_t ecs_table_get_type_index(const ecs_world_t *world, const ecs_table_t *table, ecs_id_t id)
Get type index for id.
size_t ecs_table_get_column_size(const ecs_table_t *table, int32_t index)
Get column size from table.
int32_t ecs_search_relation(const ecs_world_t *world, const ecs_table_t *table, int32_t offset, ecs_id_t id, ecs_entity_t rel, ecs_flags64_t flags, ecs_entity_t *subject_out, ecs_id_t *id_out, struct ecs_table_record_t **tr_out)
Search for component/relationship id in table type starting from an offset.
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_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_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.
int32_t ecs_delete_empty_tables(ecs_world_t *world, ecs_id_t id, uint16_t clear_generation, uint16_t delete_generation, int32_t min_id_count, double time_budget_seconds)
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.
bool ecs_enable_range_check(ecs_world_t *world, bool enable)
Enable/disable range limits.
void * ecs_get_ctx(const ecs_world_t *world)
Get the world context.
Operating system abstraction API.
Component information.
Definition flecs.h:1448
ecs_size_t size
Component size.
Definition flecs.h:1449
ecs_size_t alignment
Component alignment.
Definition flecs.h:1450
When added to an entity this informs serialization formats which component to use when a value is ass...
Definition flecs.h:1463
ecs_id_t component
Default component id.
Definition flecs.h:1464
A (string) identifier.
Definition flecs.h:1439
ecs_size_t length
Length of identifier.
Definition flecs.h:1441
char * value
Identifier string.
Definition flecs.h:1440
ecs_hashmap_t * index
Current index.
Definition flecs.h:1444
uint64_t hash
Hash of current value.
Definition flecs.h:1442
uint64_t index_hash
Hash of existing record in current index.
Definition flecs.h:1443
Component for storing a poly object.
Definition flecs.h:1454
ecs_poly_t * poly
Pointer to poly object.
Definition flecs.h:1455
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:1350
int16_t version_major
Major flecs version.
Definition flecs.h:1354
const char ** addons
Addons included in build.
Definition flecs.h:1352
const char * version
Stringified version.
Definition flecs.h:1353
const char * compiler
Compiler used to compile flecs.
Definition flecs.h:1351
bool sanitize
Is this a sanitize build.
Definition flecs.h:1358
bool perf_trace
Is this a perf tracing build.
Definition flecs.h:1359
int16_t version_minor
Minor flecs version.
Definition flecs.h:1355
bool debug
Is this a debug build.
Definition flecs.h:1357
int16_t version_patch
Patch flecs version.
Definition flecs.h:1356
Used with ecs_bulk_init().
Definition flecs.h:982
void ** data
Array with component data to insert.
Definition flecs.h:994
ecs_id_t ids[(32)]
Ids to create the entities with.
Definition flecs.h:992
int32_t count
Number of entities to create/populate.
Definition flecs.h:990
int32_t _canary
Used for validity testing.
Definition flecs.h:983
ecs_entity_t * entities
Entities to bulk insert.
Definition flecs.h:985
ecs_table_t * table
Table to insert the entities into.
Definition flecs.h:1001
Used with ecs_component_init().
Definition flecs.h:1012
int32_t _canary
Used for validity testing.
Definition flecs.h:1013
ecs_type_info_t type
Parameters for type (size, hooks, ...)
Definition flecs.h:1019
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1016
Type returned by ecs_get_entities().
Definition flecs.h:1918
int32_t alive_count
Number of alive entity ids.
Definition flecs.h:1921
int32_t count
Total number of entity ids.
Definition flecs.h:1920
const ecs_entity_t * ids
Array with all entity ids in the world.
Definition flecs.h:1919
Used with ecs_entity_init().
Definition flecs.h:936
const char * sep
Optional custom separator for hierarchical names.
Definition flecs.h:948
const char * root_sep
Optional, used for identifiers relative to root.
Definition flecs.h:952
const char * name
Name of the entity.
Definition flecs.h:943
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:964
const char * symbol
Optional entity symbol.
Definition flecs.h:954
int32_t _canary
Used for validity testing.
Definition flecs.h:937
const ecs_id_t * add
0-terminated array of ids to add to the entity.
Definition flecs.h:969
const char * add_expr
String expression with components to add.
Definition flecs.h:975
const ecs_value_t * set
0-terminated array of values to set on the entity.
Definition flecs.h:972
ecs_entity_t id
Set to modify existing entity (optional)
Definition flecs.h:939
ecs_entity_t parent
Parent entity.
Definition flecs.h:941
Used with ecs_emit().
Definition flecs.h:1296
ecs_entity_t entity
Single-entity alternative to setting table / offset / count.
Definition flecs.h:1321
const void * const_param
Same as param, but with the guarantee that the value won't be modified.
Definition flecs.h:1332
ecs_table_t * table
The table for which to notify.
Definition flecs.h:1306
int32_t count
Limit number of notified entities to count.
Definition flecs.h:1318
ecs_table_t * other_table
Optional 2nd table to notify.
Definition flecs.h:1310
int32_t offset
Limit notified entities to ones starting from offset (row) in table.
Definition flecs.h:1313
const ecs_type_t * ids
Component ids.
Definition flecs.h:1303
ecs_poly_t * observable
Observable (usually the world)
Definition flecs.h:1335
ecs_entity_t event
The event id.
Definition flecs.h:1298
ecs_flags32_t flags
Event flags.
Definition flecs.h:1338
void * param
Optional context.
Definition flecs.h:1327
Header for ecs_poly_t objects.
Definition flecs.h:486
int32_t magic
Magic number verifying it's a flecs object.
Definition flecs.h:487
int32_t type
Magic number indicating which type of flecs object.
Definition flecs.h:488
int32_t refcount
Refcount, to enable RAII handles.
Definition flecs.h:489
ecs_mixins_t * mixins
Table with offsets to (optional) mixins.
Definition flecs.h:490
Iterator.
Definition flecs.h:1060
ecs_world_t * real_world
Actual world.
Definition flecs.h:1063
void * param
Param passed to ecs_run.
Definition flecs.h:1097
ecs_entity_t event
The event (if applicable)
Definition flecs.h:1083
int32_t frame_offset
Offset relative to start of iteration.
Definition flecs.h:1108
char ** variable_names
Names of variables (if any)
Definition flecs.h:1094
ecs_flags32_t ref_fields
Bitset with fields that aren't component arrays.
Definition flecs.h:1077
int8_t variable_count
Number of variables for query.
Definition flecs.h:1092
ecs_entity_t interrupted_by
When set, system execution is interrupted.
Definition flecs.h:1114
ecs_flags32_t flags
Iterator flags.
Definition flecs.h:1113
ecs_iter_t * chain_it
Optional, allows for creating iterator chains.
Definition flecs.h:1121
void * ctx
System context.
Definition flecs.h:1098
void * run_ctx
Run language binding context.
Definition flecs.h:1101
ecs_table_t * table
Current table.
Definition flecs.h:1068
int32_t offset
Offset relative to current table.
Definition flecs.h:1109
ecs_id_t event_id
The (component) id for the event.
Definition flecs.h:1084
ecs_iter_fini_action_t fini
Function to cleanup iterator resources.
Definition flecs.h:1120
ecs_var_t * variables
Values of variables (if any)
Definition flecs.h:1071
ecs_iter_private_t priv_
Private data.
Definition flecs.h:1115
ecs_world_t * world
The world.
Definition flecs.h:1062
void * callback_ctx
Callback language binding context.
Definition flecs.h:1100
ecs_entity_t * sources
Entity on which the id was matched (0 if same as entities)
Definition flecs.h:1073
void * binding_ctx
System binding context.
Definition flecs.h:1099
ecs_flags32_t row_fields
Fields that must be obtained with field_at.
Definition flecs.h:1078
float delta_system_time
Time elapsed since last system invocation.
Definition flecs.h:1105
const ecs_query_t * query
Query being evaluated.
Definition flecs.h:1093
int8_t term_index
Index of term that emitted an event.
Definition flecs.h:1089
ecs_entity_t system
The system (if applicable)
Definition flecs.h:1082
ecs_flags32_t set_fields
Fields that are set.
Definition flecs.h:1076
const ecs_size_t * sizes
Component sizes.
Definition flecs.h:1067
float delta_time
Time elapsed since last frame.
Definition flecs.h:1104
ecs_flags32_t up_fields
Bitset with fields matched through up traversal.
Definition flecs.h:1079
ecs_iter_action_t callback
Callback of system or observer.
Definition flecs.h:1119
int8_t field_count
Number of fields in iterator.
Definition flecs.h:1088
ecs_table_t * other_table
Prev or next table when adding/removing.
Definition flecs.h:1069
int32_t event_cur
Unique event id.
Definition flecs.h:1085
const ecs_table_record_t ** trs
Info on where to find field in table.
Definition flecs.h:1072
int32_t count
Number of entities to iterate.
Definition flecs.h:1110
uint64_t group_id
Group id for table, if group_by is used.
Definition flecs.h:1075
ecs_iter_next_action_t next
Function to progress iterator.
Definition flecs.h:1118
const ecs_entity_t * entities
Entity identifiers.
Definition flecs.h:1066
ecs_id_t * ids
(Component) ids
Definition flecs.h:1070
ecs_flags64_t constrained_vars
Bitset that marks constrained variables.
Definition flecs.h:1074
Used with ecs_observer_init().
Definition flecs.h:1234
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition flecs.h:1278
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1266
void * run_ctx
Context associated with run (for language bindings).
Definition flecs.h:1275
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1239
ecs_entity_t events[(8)]
Events to observe (OnAdd, OnRemove, OnSet)
Definition flecs.h:1245
int32_t * last_event_id
Optional shared last event id for multiple observers.
Definition flecs.h:1285
void * callback_ctx
Context associated with callback (for language bindings).
Definition flecs.h:1269
void * ctx
User context to pass to callback.
Definition flecs.h:1263
ecs_query_desc_t query
Query for observer.
Definition flecs.h:1242
ecs_poly_t * observable
Observable with which to register the observer.
Definition flecs.h:1281
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition flecs.h:1272
int8_t term_index_
Used for internal purposes.
Definition flecs.h:1288
ecs_iter_action_t callback
Callback to invoke on an event, invoked when the observer matches.
Definition flecs.h:1252
bool yield_existing
When observer is created, generate events from existing data.
Definition flecs.h:1249
ecs_run_action_t run
Callback invoked on an event.
Definition flecs.h:1260
int32_t _canary
Used for validity testing.
Definition flecs.h:1236
An observer reacts to events matching a query.
Definition flecs.h:832
int32_t event_count
Number of events.
Definition flecs.h:839
ecs_iter_action_t callback
See ecs_observer_desc_t::callback.
Definition flecs.h:841
ecs_entity_t entity
Entity associated with observer.
Definition flecs.h:855
ecs_observable_t * observable
Observable for observer.
Definition flecs.h:852
ecs_run_action_t run
See ecs_observer_desc_t::run.
Definition flecs.h:842
ecs_header_t hdr
Object header.
Definition flecs.h:833
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:848
void * run_ctx
Run language binding context.
Definition flecs.h:846
ecs_world_t * world
The world.
Definition flecs.h:854
ecs_ctx_free_t run_ctx_free
Callback to free run_ctx.
Definition flecs.h:850
void * callback_ctx
Callback language binding context.
Definition flecs.h:845
void * ctx
Observer context.
Definition flecs.h:844
ecs_entity_t events[(8)]
Observer events.
Definition flecs.h:838
ecs_ctx_free_t callback_ctx_free
Callback to free callback_ctx.
Definition flecs.h:849
ecs_query_t * query
Observer query.
Definition flecs.h:835
Struct returned by ecs_query_count().
Definition flecs.h:4903
int32_t empty_tables
Number of empty tables returned by query.
Definition flecs.h:4907
int32_t entities
Number of entities returned by query.
Definition flecs.h:4905
int32_t results
Number of results returned by query.
Definition flecs.h:4904
int32_t tables
Number of tables returned by query.
Definition flecs.h:4906
Used with ecs_query_init().
Definition flecs.h:1160
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1221
ecs_id_t group_by
Component id to be used for grouping.
Definition flecs.h:1191
ecs_term_t terms[32]
Query terms.
Definition flecs.h:1165
int32_t _canary
Used for validity testing.
Definition flecs.h:1162
void * ctx
User context to pass to callback.
Definition flecs.h:1215
ecs_ctx_free_t group_by_ctx_free
Function to free group_by_ctx.
Definition flecs.h:1212
void * group_by_ctx
Context to pass to group_by.
Definition flecs.h:1209
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:1218
ecs_entity_t order_by
Component to sort on, used together with order_by_callback or order_by_table_callback.
Definition flecs.h:1187
ecs_order_by_action_t order_by_callback
Callback used for ordering query results.
Definition flecs.h:1179
ecs_group_create_action_t on_group_create
Callback that is invoked when a new group is created.
Definition flecs.h:1202
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:1227
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:1224
ecs_group_by_action_t group_by_callback
Callback used for grouping results.
Definition flecs.h:1198
ecs_group_delete_action_t on_group_delete
Callback that is invoked when an existing group is deleted.
Definition flecs.h:1206
ecs_sort_table_action_t order_by_table_callback
Callback used for ordering query results.
Definition flecs.h:1183
ecs_flags32_t flags
Flags for enabling query features.
Definition flecs.h:1174
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:1171
const char * expr
Query DSL expression (optional)
Definition flecs.h:1168
Type that contains information about a query group.
Definition flecs.h:1423
int32_t table_count
Number of tables in group.
Definition flecs.h:1425
void * ctx
Group context, returned by on_group_create.
Definition flecs.h:1426
int32_t match_count
How often tables have been matched/unmatched.
Definition flecs.h:1424
Queries are lists of constraints (terms) that match entities.
Definition flecs.h:792
ecs_flags32_t row_fields
Fields that must be acquired with field_at.
Definition flecs.h:811
ecs_flags32_t data_fields
Fields that have data.
Definition flecs.h:808
ecs_flags32_t read_fields
Fields that read data.
Definition flecs.h:810
ecs_header_t hdr
Object header.
Definition flecs.h:793
ecs_term_t terms[32]
Query terms.
Definition flecs.h:795
int8_t var_count
Number of query variables.
Definition flecs.h:800
ecs_flags32_t fixed_fields
Fields with a fixed source.
Definition flecs.h:805
ecs_flags32_t var_fields
Fields with non-$this variable source.
Definition flecs.h:806
ecs_flags32_t write_fields
Fields that write data.
Definition flecs.h:809
int32_t sizes[32]
Component sizes.
Definition flecs.h:796
int32_t eval_count
Number of times query is evaluated.
Definition flecs.h:826
ecs_world_t * world
World or stage query was created with.
Definition flecs.h:824
ecs_flags32_t static_id_fields
Fields with a static (component) id.
Definition flecs.h:807
ecs_world_t * real_world
Actual world.
Definition flecs.h:823
ecs_flags32_t set_fields
Fields that will be set.
Definition flecs.h:813
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:822
void * ctx
User context to pass to callback.
Definition flecs.h:819
ecs_flags32_t shared_readonly_fields
Fields that don't write shared data.
Definition flecs.h:812
ecs_id_t ids[32]
Component ids.
Definition flecs.h:797
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:815
int8_t term_count
Number of query terms.
Definition flecs.h:801
char ** vars
Array with variable names for iterator.
Definition flecs.h:817
int8_t field_count
Number of fields returned by query.
Definition flecs.h:802
ecs_flags32_t flags
Query flags.
Definition flecs.h:799
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:820
Record for entity index.
Definition flecs.h:494
ecs_table_t * table
Identifies a type (and table) in world.
Definition flecs.h:496
uint32_t row
Table row of the entity.
Definition flecs.h:497
ecs_id_record_t * idr
Id record to (*, entity) for target entities.
Definition flecs.h:495
int32_t dense
Index in dense array of entity index.
Definition flecs.h:498
Header for table cache elements.
Definition flecs.h:502
bool empty
Whether element is in empty list.
Definition flecs.h:506
struct ecs_table_cache_hdr_t * next
Next/previous elements for id in table cache.
Definition flecs.h:505
struct ecs_table_cache_t * cache
Table cache of element.
Definition flecs.h:503
ecs_table_t * table
Table associated with element.
Definition flecs.h:504
Metadata describing where a component id is stored in a table.
Definition flecs.h:513
ecs_table_cache_hdr_t hdr
Table cache header.
Definition flecs.h:514
int16_t index
First type index where id occurs in table.
Definition flecs.h:515
int16_t column
First column index where id occurs.
Definition flecs.h:517
int16_t count
Number of times id occurs in table.
Definition flecs.h:516
Type that describes a reference to an entity or variable in a term.
Definition flecs.h:753
const char * name
Name.
Definition flecs.h:760
ecs_entity_t id
Entity id.
Definition flecs.h:754
Type that describes a term (single element in a query).
Definition flecs.h:768
ecs_term_ref_t src
Source of term.
Definition flecs.h:774
int8_t field_index
Index of field for term in iterator.
Definition flecs.h:785
ecs_id_t id
Component id to be matched by term.
Definition flecs.h:769
int16_t oper
Operator of term.
Definition flecs.h:783
ecs_term_ref_t second
Second element of pair.
Definition flecs.h:776
ecs_flags16_t flags_
Flags that help eval, set by ecs_query_init()
Definition flecs.h:786
ecs_entity_t trav
Relationship to traverse when looking for the component.
Definition flecs.h:778
int16_t inout
Access to contents matched by term.
Definition flecs.h:782
ecs_term_ref_t first
Component or first element of pair.
Definition flecs.h:775
Type that contains component lifecycle callbacks.
Definition flecs.h:864
ecs_copy_t copy_ctor
Ctor + copy.
Definition flecs.h:871
void * ctx
User defined context.
Definition flecs.h:902
ecs_iter_action_t on_remove
Callback that is invoked when an instance of the component is removed.
Definition flecs.h:900
void * binding_ctx
Language binding context.
Definition flecs.h:903
ecs_move_t move_dtor
Move + dtor.
Definition flecs.h:886
ecs_copy_t copy
copy assignment
Definition flecs.h:867
ecs_iter_action_t on_set
Callback that is invoked when an instance of the component is set.
Definition flecs.h:895
ecs_move_t move
move assignment
Definition flecs.h:868
ecs_xtor_t ctor
ctor
Definition flecs.h:865
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:905
ecs_iter_action_t on_add
Callback that is invoked when an instance of a component is added.
Definition flecs.h:890
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:906
ecs_move_t move_ctor
Ctor + move.
Definition flecs.h:874
ecs_move_t ctor_move_dtor
Ctor + move + dtor (or move_ctor + dtor).
Definition flecs.h:880
ecs_xtor_t dtor
dtor
Definition flecs.h:866
Type that contains component information (passed to ctors/dtors/...)
Definition flecs.h:913
ecs_size_t alignment
Alignment of type.
Definition flecs.h:916
ecs_size_t size
Size of type.
Definition flecs.h:915
const char * name
Type name.
Definition flecs.h:919
ecs_entity_t component
Handle to component (do not set)
Definition flecs.h:918
ecs_type_hooks_t hooks
Type hooks.
Definition flecs.h:917
const ecs_world_t * world
World.
Definition flecs.h:914
A type is a list of (component) ids.
Definition flecs.h:364
ecs_id_t * array
Array with ids.
Definition flecs.h:365
int32_t count
Number of elements in array.
Definition flecs.h:366
Utility to hold a value of a dynamic type.
Definition flecs.h:927
void * ptr
Pointer to value.
Definition flecs.h:929
ecs_entity_t type
Type of value.
Definition flecs.h:928
Type that contains information about the world.
Definition flecs.h:1363
float delta_time
Time passed to or computed by ecs_progress()
Definition flecs.h:1369
ecs_entity_t min_id
First allowed entity id.
Definition flecs.h:1365
int64_t set_count
Set commands processed.
Definition flecs.h:1406
double world_time_total
Time elapsed in simulation.
Definition flecs.h:1377
int32_t tag_id_count
Number of tag (no data) ids in the world.
Definition flecs.h:1393
int32_t component_id_count
Number of component (data) ids in the world.
Definition flecs.h:1394
int64_t pipeline_build_count_total
Total number of pipeline builds.
Definition flecs.h:1389
int64_t eval_comp_monitors_total
Total number of monitor evaluations.
Definition flecs.h:1382
int32_t table_count
Number of tables.
Definition flecs.h:1397
float delta_time_raw
Raw delta time (no time scaling)
Definition flecs.h:1368
float frame_time_total
Total time spent processing a frame.
Definition flecs.h:1372
int64_t table_create_total
Total number of times a table was created.
Definition flecs.h:1387
int64_t observers_ran_frame
Total number of times observer was invoked.
Definition flecs.h:1391
float system_time_total
Total time spent in systems.
Definition flecs.h:1373
int64_t id_delete_total
Total number of times an id was deleted.
Definition flecs.h:1386
int64_t systems_ran_frame
Total number of systems ran in last frame.
Definition flecs.h:1390
float merge_time_total
Total time spent in merges.
Definition flecs.h:1375
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:1409
int64_t clear_count
Clear commands processed.
Definition flecs.h:1405
ecs_entity_t last_component_id
Last issued component entity id.
Definition flecs.h:1364
int32_t empty_table_count
Number of tables without entities.
Definition flecs.h:1398
int64_t frame_count_total
Total number of frames.
Definition flecs.h:1380
ecs_entity_t max_id
Last allowed entity id.
Definition flecs.h:1366
int64_t merge_count_total
Total number of merges.
Definition flecs.h:1381
int64_t other_count
Other commands processed.
Definition flecs.h:1411
int64_t batched_command_count
Commands batched.
Definition flecs.h:1413
int64_t table_delete_total
Total number of times a table was deleted.
Definition flecs.h:1388
int64_t delete_count
Selete commands processed.
Definition flecs.h:1404
int64_t rematch_count_total
Total number of rematches.
Definition flecs.h:1383
int64_t id_create_total
Total number of times a new id was created.
Definition flecs.h:1385
int64_t batched_entity_count
Entities for which commands were batched.
Definition flecs.h:1412
float time_scale
Time scale applied to delta_time.
Definition flecs.h:1370
int32_t pair_id_count
Number of pair ids in the world.
Definition flecs.h:1395
float rematch_time_total
Time spent on query rematching.
Definition flecs.h:1376
int64_t ensure_count
Ensure/emplace commands processed.
Definition flecs.h:1407
float target_fps
Target fps.
Definition flecs.h:1371
double world_time_total_raw
Time elapsed in simulation (no scaling)
Definition flecs.h:1378
float emit_time_total
Total time spent notifying observers.
Definition flecs.h:1374
int64_t modified_count
Modified commands processed.
Definition flecs.h:1408
const char * name_prefix
Value set by ecs_set_name_prefix().
Definition flecs.h:1416
int64_t event_count
Enqueued custom events.
Definition flecs.h:1410
int64_t add_count
Add commands processed.
Definition flecs.h:1402
int64_t remove_count
Remove commands processed.
Definition flecs.h:1403