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 0
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
74/* Make sure provided configuration is valid */
75#if defined(FLECS_DEBUG) && defined(FLECS_NDEBUG)
76#error "invalid configuration: cannot both define FLECS_DEBUG and FLECS_NDEBUG"
77#endif
78#if defined(FLECS_DEBUG) && defined(NDEBUG)
79#error "invalid configuration: cannot both define FLECS_DEBUG and NDEBUG"
80#endif
81
86#if !defined(FLECS_DEBUG) && !defined(FLECS_NDEBUG)
87#if defined(NDEBUG)
88#define FLECS_NDEBUG
89#else
90#define FLECS_DEBUG
91#endif
92#endif
93
98#ifdef FLECS_SANITIZE
99#ifndef FLECS_DEBUG
100#define FLECS_DEBUG /* If sanitized mode is enabled, so is debug mode */
101#endif
102#endif
103
104/* Tip: if you see weird behavior that you think might be a bug, make sure to
105 * test with the FLECS_DEBUG or FLECS_SANITIZE flags enabled. There's a good
106 * chance that this gives you more information about the issue! */
107
121// #define FLECS_SOFT_ASSERT
122
128// #define FLECS_KEEP_ASSERT
129
138// #define FLECS_CPP_NO_AUTO_REGISTRATION
139
167// #define FLECS_CUSTOM_BUILD
168
177// #define FLECS_CPP_NO_AUTO_REGISTRATION
178
179#ifndef FLECS_CUSTOM_BUILD
180// #define FLECS_C /**< C API convenience macros, always enabled */
181#define FLECS_CPP
182#define FLECS_MODULE
183#define FLECS_SCRIPT
184#define FLECS_STATS
185#define FLECS_METRICS
186#define FLECS_ALERTS
187#define FLECS_SYSTEM
188#define FLECS_PIPELINE
189#define FLECS_TIMER
190#define FLECS_META
191#define FLECS_UNITS
192#define FLECS_JSON
193#define FLECS_DOC
194#define FLECS_LOG
195#define FLECS_APP
196#define FLECS_OS_API_IMPL
197#define FLECS_HTTP
198#define FLECS_REST
199// #define FLECS_JOURNAL /**< Journaling addon (disabled by default) */
200#endif // ifndef FLECS_CUSTOM_BUILD
201
205// #define FLECS_LOW_FOOTPRINT
206#ifdef FLECS_LOW_FOOTPRINT
207#define FLECS_HI_COMPONENT_ID (16)
208#define FLECS_HI_ID_RECORD_ID (16)
209#define FLECS_SPARSE_PAGE_BITS (6)
210#define FLECS_ENTITY_PAGE_BITS (6)
211#define FLECS_USE_OS_ALLOC
212#endif
213
224#ifndef FLECS_HI_COMPONENT_ID
225#define FLECS_HI_COMPONENT_ID (256)
226#endif
227
234#ifndef FLECS_HI_ID_RECORD_ID
235#define FLECS_HI_ID_RECORD_ID (1024)
236#endif
237
243#ifndef FLECS_SPARSE_PAGE_BITS
244#define FLECS_SPARSE_PAGE_BITS (12)
245#endif
246
249#ifndef FLECS_ENTITY_PAGE_BITS
250#define FLECS_ENTITY_PAGE_BITS (12)
251#endif
252
257// #define FLECS_USE_OS_ALLOC
258
261#ifndef FLECS_ID_DESC_MAX
262#define FLECS_ID_DESC_MAX (32)
263#endif
264
267#ifndef FLECS_EVENT_DESC_MAX
268#define FLECS_EVENT_DESC_MAX (8)
269#endif
270
273#define FLECS_VARIABLE_COUNT_MAX (64)
274
277#ifndef FLECS_TERM_COUNT_MAX
278#define FLECS_TERM_COUNT_MAX 32
279#endif
280
283#ifndef FLECS_TERM_ARG_COUNT_MAX
284#define FLECS_TERM_ARG_COUNT_MAX (16)
285#endif
286
289#ifndef FLECS_QUERY_VARIABLE_COUNT_MAX
290#define FLECS_QUERY_VARIABLE_COUNT_MAX (64)
291#endif
292
295#ifndef FLECS_QUERY_SCOPE_NESTING_MAX
296#define FLECS_QUERY_SCOPE_NESTING_MAX (8)
297#endif
298
301#include "flecs/private/api_defines.h"
302#include "flecs/datastructures/vec.h" /* Vector datatype */
303#include "flecs/datastructures/sparse.h" /* Sparse set */
304#include "flecs/datastructures/block_allocator.h" /* Block allocator */
305#include "flecs/datastructures/stack_allocator.h" /* Stack allocator */
306#include "flecs/datastructures/map.h" /* Map */
307#include "flecs/datastructures/switch_list.h" /* Switch list */
308#include "flecs/datastructures/allocator.h" /* Allocator */
309#include "flecs/datastructures/strbuf.h" /* String builder */
310#include "flecs/os_api.h" /* Abstraction for operating system functions */
311
312#ifdef __cplusplus
313extern "C" {
314#endif
315
332typedef uint64_t ecs_id_t;
333
340
356typedef struct {
358 int32_t count;
359} ecs_type_t;
360
384
387
390
392typedef struct ecs_term_t ecs_term_t;
393
396
415
420
425typedef struct ecs_iter_t ecs_iter_t;
426
435typedef struct ecs_ref_t ecs_ref_t;
436
441
446
449
452
455
475typedef void ecs_poly_t;
476
479
487
506typedef void (*ecs_run_action_t)(
507 ecs_iter_t *it);
508
515typedef void (*ecs_iter_action_t)(
516 ecs_iter_t *it);
517
526 ecs_iter_t *it);
527
534 ecs_iter_t *it);
535
538 ecs_entity_t e1,
539 const void *ptr1,
540 ecs_entity_t e2,
541 const void *ptr2);
542
545 ecs_world_t* world,
546 ecs_table_t* table,
547 ecs_entity_t* entities,
548 void* ptr,
549 int32_t size,
550 int32_t lo,
551 int32_t hi,
552 ecs_order_by_action_t order_by);
553
555typedef uint64_t (*ecs_group_by_action_t)(
556 ecs_world_t *world,
557 ecs_table_t *table,
558 ecs_id_t group_id,
559 void *ctx);
560
562typedef void* (*ecs_group_create_action_t)(
563 ecs_world_t *world,
564 uint64_t group_id,
565 void *group_by_ctx); /* from ecs_query_desc_t */
566
569 ecs_world_t *world,
570 uint64_t group_id,
571 void *group_ctx, /* return value from ecs_group_create_action_t */
572 void *group_by_ctx); /* from ecs_query_desc_t */
573
575typedef void (*ecs_module_action_t)(
576 ecs_world_t *world);
577
579typedef void (*ecs_fini_action_t)(
580 ecs_world_t *world,
581 void *ctx);
582
584typedef void (*ecs_ctx_free_t)(
585 void *ctx);
586
588typedef int (*ecs_compare_action_t)(
589 const void *ptr1,
590 const void *ptr2);
591
593typedef uint64_t (*ecs_hash_value_action_t)(
594 const void *ptr);
595
597typedef void (*ecs_xtor_t)(
598 void *ptr,
599 int32_t count,
600 const ecs_type_info_t *type_info);
601
603typedef void (*ecs_copy_t)(
604 void *dst_ptr,
605 const void *src_ptr,
606 int32_t count,
607 const ecs_type_info_t *type_info);
608
610typedef void (*ecs_move_t)(
611 void *dst_ptr,
612 void *src_ptr,
613 int32_t count,
614 const ecs_type_info_t *type_info);
615
617typedef void (*flecs_poly_dtor_t)(
618 ecs_poly_t *poly);
619
638
649
657
658/* Term id flags */
659
664#define EcsSelf (1llu << 63)
665
670#define EcsUp (1llu << 62)
671
676#define EcsTrav (1llu << 61)
677
682#define EcsCascade (1llu << 60)
683
688#define EcsDesc (1llu << 59)
689
694#define EcsIsVariable (1llu << 58)
695
700#define EcsIsEntity (1llu << 57)
701
706#define EcsIsName (1llu << 56)
707
712#define EcsTraverseFlags (EcsSelf|EcsUp|EcsTrav|EcsCascade|EcsDesc)
713
718#define EcsTermRefFlags (EcsTraverseFlags|EcsIsVariable|EcsIsEntity|EcsIsName)
719
734
756
794
823
874
886
887#include "flecs/private/api_types.h" /* Supporting API types */
888#include "flecs/private/api_support.h" /* Supporting API functions */
889#include "flecs/datastructures/hashmap.h" /* Hashmap */
890
896
901typedef struct ecs_entity_desc_t {
902 int32_t _canary;
908 const char *name;
913 const char *sep;
917 const char *root_sep;
919 const char *symbol;
934 const ecs_id_t *add;
935
938
940 const char *add_expr;
942
972
986
1026 /* World */
1030 /* Matched data */
1032 void **ptrs;
1033 const ecs_size_t *sizes;
1037 ecs_var_t *variables;
1038 int32_t *columns;
1040 ecs_flags64_t constrained_vars;
1041 uint64_t group_id;
1042 int32_t field_count;
1043 ecs_termset_t set_fields;
1044 ecs_termset_t shared_fields;
1045 ecs_termset_t up_fields;
1047 /* Input information */
1051 int32_t event_cur;
1053 /* Query information */
1055 int32_t term_index;
1061 /* Context */
1062 void *param;
1063 void *ctx;
1066 void *run_ctx;
1068 /* Time */
1072 /* Iterator counters */
1074 int32_t offset;
1075 int32_t count;
1078 /* Misc */
1079 ecs_flags32_t flags;
1081 ecs_iter_private_t priv_;
1083 /* Chained iterators */
1088};
1089
1090
1095#define EcsQueryMatchPrefab (1u << 1u)
1096
1101#define EcsQueryMatchDisabled (1u << 2u)
1102
1107#define EcsQueryMatchEmptyTables (1u << 3u)
1108
1113#define EcsQueryNoData (1u << 4u)
1114
1119#define EcsQueryIsInstanced (1u << 5u)
1120
1125#define EcsQueryAllowUnresolvedByName (1u << 6u)
1126
1131#define EcsQueryTableOnly (1u << 7u)
1132
1133
1207
1269
1274typedef struct ecs_event_desc_t {
1277
1282
1285
1289
1291 int32_t offset;
1292
1296 int32_t count;
1297
1300
1305 void *param;
1306
1310 const void *const_param;
1311
1314
1316 ecs_flags32_t flags;
1318
1319
1328typedef struct ecs_build_info_t {
1329 const char *compiler;
1330 const char **addons;
1331 const char *version;
1335 bool debug;
1339
1398
1405
1416typedef struct EcsIdentifier {
1417 char *value;
1418 ecs_size_t length;
1419 uint64_t hash;
1420 uint64_t index_hash;
1421 ecs_hashmap_t *index;
1423
1425typedef struct EcsComponent {
1426 ecs_size_t size;
1427 ecs_size_t alignment;
1429
1434
1443
1447/* Only include deprecated definitions if deprecated addon is required */
1448#ifdef FLECS_DEPRECATED
1450#endif
1451
1467FLECS_API extern const ecs_id_t ECS_PAIR;
1468
1470FLECS_API extern const ecs_id_t ECS_AUTO_OVERRIDE;
1471
1473FLECS_API extern const ecs_id_t ECS_TOGGLE;
1474
1482/* Builtin component ids */
1483
1485FLECS_API extern const ecs_entity_t ecs_id(EcsComponent);
1486
1488FLECS_API extern const ecs_entity_t ecs_id(EcsIdentifier);
1489
1491FLECS_API extern const ecs_entity_t ecs_id(EcsPoly);
1492
1494FLECS_API extern const ecs_entity_t ecs_id(EcsDefaultChildComponent);
1495
1497FLECS_API extern const ecs_entity_t EcsQuery;
1498
1500FLECS_API extern const ecs_entity_t EcsObserver;
1501
1503FLECS_API extern const ecs_entity_t EcsSystem;
1504
1506FLECS_API extern const ecs_entity_t ecs_id(EcsTickSource);
1507
1509FLECS_API extern const ecs_entity_t ecs_id(EcsPipelineQuery);
1510
1512FLECS_API extern const ecs_entity_t ecs_id(EcsTimer);
1513
1515FLECS_API extern const ecs_entity_t ecs_id(EcsRateFilter);
1516
1518FLECS_API extern const ecs_entity_t EcsFlecs;
1519
1521FLECS_API extern const ecs_entity_t EcsFlecsCore;
1522
1524FLECS_API extern const ecs_entity_t EcsWorld;
1525
1527FLECS_API extern const ecs_entity_t EcsWildcard;
1528
1530FLECS_API extern const ecs_entity_t EcsAny;
1531
1533FLECS_API extern const ecs_entity_t EcsThis;
1534
1536FLECS_API extern const ecs_entity_t EcsVariable;
1537
1545FLECS_API extern const ecs_entity_t EcsTransitive;
1546
1554FLECS_API extern const ecs_entity_t EcsReflexive;
1555
1566FLECS_API extern const ecs_entity_t EcsFinal;
1567
1569FLECS_API extern const ecs_entity_t EcsOnInstantiate;
1570
1574FLECS_API extern const ecs_entity_t EcsOverride;
1575
1579FLECS_API extern const ecs_entity_t EcsInherit;
1580
1585FLECS_API extern const ecs_entity_t EcsDontInherit;
1586
1594FLECS_API extern const ecs_entity_t EcsSymmetric;
1595
1605FLECS_API extern const ecs_entity_t EcsExclusive;
1606
1608FLECS_API extern const ecs_entity_t EcsAcyclic;
1609
1612FLECS_API extern const ecs_entity_t EcsTraversable;
1613
1623FLECS_API extern const ecs_entity_t EcsWith;
1624
1634FLECS_API extern const ecs_entity_t EcsOneOf;
1635
1637FLECS_API extern const ecs_entity_t EcsCanToggle;
1638
1642FLECS_API extern const ecs_entity_t EcsTrait;
1643
1653FLECS_API extern const ecs_entity_t EcsRelationship;
1654
1664FLECS_API extern const ecs_entity_t EcsTarget;
1665
1668FLECS_API extern const ecs_entity_t EcsPairIsTag;
1669
1671FLECS_API extern const ecs_entity_t EcsName;
1672
1674FLECS_API extern const ecs_entity_t EcsSymbol;
1675
1677FLECS_API extern const ecs_entity_t EcsAlias;
1678
1680FLECS_API extern const ecs_entity_t EcsChildOf;
1681
1683FLECS_API extern const ecs_entity_t EcsIsA;
1684
1686FLECS_API extern const ecs_entity_t EcsDependsOn;
1687
1689FLECS_API extern const ecs_entity_t EcsSlotOf;
1690
1692FLECS_API extern const ecs_entity_t EcsModule;
1693
1695FLECS_API extern const ecs_entity_t EcsPrivate;
1696
1699FLECS_API extern const ecs_entity_t EcsPrefab;
1700
1703FLECS_API extern const ecs_entity_t EcsDisabled;
1704
1708FLECS_API extern const ecs_entity_t EcsNotQueryable;
1709
1711FLECS_API extern const ecs_entity_t EcsOnAdd;
1712
1714FLECS_API extern const ecs_entity_t EcsOnRemove;
1715
1717FLECS_API extern const ecs_entity_t EcsOnSet;
1718
1720FLECS_API extern const ecs_entity_t EcsMonitor;
1721
1723FLECS_API extern const ecs_entity_t EcsOnTableCreate;
1724
1726FLECS_API extern const ecs_entity_t EcsOnTableDelete;
1727
1729FLECS_API extern const ecs_entity_t EcsOnTableEmpty;
1730
1732FLECS_API extern const ecs_entity_t EcsOnTableFill;
1733
1735FLECS_API extern const ecs_entity_t EcsOnDelete;
1736
1739FLECS_API extern const ecs_entity_t EcsOnDeleteTarget;
1740
1743FLECS_API extern const ecs_entity_t EcsRemove;
1744
1747FLECS_API extern const ecs_entity_t EcsDelete;
1748
1751FLECS_API extern const ecs_entity_t EcsPanic;
1752
1754FLECS_API extern const ecs_entity_t EcsSparse;
1755
1757FLECS_API extern const ecs_entity_t EcsUnion;
1758
1760FLECS_API extern const ecs_entity_t EcsPredEq;
1761
1763FLECS_API extern const ecs_entity_t EcsPredMatch;
1764
1766FLECS_API extern const ecs_entity_t EcsPredLookup;
1767
1769FLECS_API extern const ecs_entity_t EcsScopeOpen;
1770
1772FLECS_API extern const ecs_entity_t EcsScopeClose;
1773
1778FLECS_API extern const ecs_entity_t EcsEmpty;
1779
1780FLECS_API extern const ecs_entity_t ecs_id(EcsPipeline);
1781FLECS_API extern const ecs_entity_t EcsOnStart;
1782FLECS_API extern const ecs_entity_t EcsPreFrame;
1783FLECS_API extern const ecs_entity_t EcsOnLoad;
1784FLECS_API extern const ecs_entity_t EcsPostLoad;
1785FLECS_API extern const ecs_entity_t EcsPreUpdate;
1786FLECS_API extern const ecs_entity_t EcsOnUpdate;
1787FLECS_API extern const ecs_entity_t EcsOnValidate;
1788FLECS_API extern const ecs_entity_t EcsPostUpdate;
1789FLECS_API extern const ecs_entity_t EcsPreStore;
1790FLECS_API extern const ecs_entity_t EcsOnStore;
1791FLECS_API extern const ecs_entity_t EcsPostFrame;
1792FLECS_API extern const ecs_entity_t EcsPhase;
1796#define EcsLastInternalComponentId (ecs_id(EcsPoly))
1797
1800#define EcsFirstUserComponentId (8)
1801
1804#define EcsFirstUserEntityId (FLECS_HI_COMPONENT_ID + 128)
1805
1806/* When visualized the reserved id ranges look like this:
1807 * - [1..8]: Builtin components
1808 * - [9..FLECS_HI_COMPONENT_ID]: Low ids reserved for application components
1809 * - [FLECS_HI_COMPONENT_ID + 1..EcsFirstUserEntityId]: Builtin entities
1810 */
1811
1833FLECS_API
1835
1842FLECS_API
1844
1852FLECS_API
1854 int argc,
1855 char *argv[]);
1856
1863FLECS_API
1865 ecs_world_t *world);
1866
1874FLECS_API
1876 const ecs_world_t *world);
1877
1885FLECS_API
1887 ecs_world_t *world,
1888 ecs_fini_action_t action,
1889 void *ctx);
1890
1897
1924FLECS_API
1926 const ecs_world_t *world);
1927
1953FLECS_API
1955 ecs_world_t *world,
1956 ecs_ftime_t delta_time);
1957
1964FLECS_API
1966 ecs_world_t *world);
1967
1975FLECS_API
1977 ecs_world_t *world,
1978 ecs_fini_action_t action,
1979 void *ctx);
1980
1987FLECS_API
1989 ecs_world_t *world);
1990
1997FLECS_API
1999 const ecs_world_t *world);
2000
2013 ecs_world_t *world,
2014 bool enable);
2015
2027 ecs_world_t *world,
2028 bool enable);
2029
2045FLECS_API
2047 ecs_world_t *world,
2048 ecs_ftime_t fps);
2049
2064FLECS_API
2066 ecs_world_t *world,
2067 ecs_flags32_t flags);
2068
2145FLECS_API
2147 ecs_world_t *world,
2148 bool multi_threaded);
2149
2157FLECS_API
2159 ecs_world_t *world);
2160
2171FLECS_API
2173 ecs_world_t *world);
2174
2190FLECS_API
2192 ecs_world_t *world);
2193
2204FLECS_API
2206 const ecs_world_t *world);
2207
2221FLECS_API
2223 ecs_world_t *world);
2224
2239FLECS_API
2241 ecs_world_t *world);
2242
2253FLECS_API
2255 ecs_world_t *world);
2256
2270FLECS_API
2272 ecs_world_t *world,
2273 int32_t stages);
2274
2281FLECS_API
2283 const ecs_world_t *world);
2284
2300FLECS_API
2302 const ecs_world_t *world,
2303 int32_t stage_id);
2304
2312FLECS_API
2314 const ecs_world_t *world);
2315
2323FLECS_API
2325 ecs_world_t *world);
2326
2331FLECS_API
2333 ecs_world_t *stage);
2334
2342FLECS_API
2344 const ecs_world_t *world);
2345
2361FLECS_API
2363 ecs_world_t *world,
2364 void *ctx,
2365 ecs_ctx_free_t ctx_free);
2366
2375FLECS_API
2377 ecs_world_t *world,
2378 void *ctx,
2379 ecs_ctx_free_t ctx_free);
2380
2388FLECS_API
2390 const ecs_world_t *world);
2391
2399FLECS_API
2401 const ecs_world_t *world);
2402
2408FLECS_API
2410
2416FLECS_API
2418 const ecs_world_t *world);
2419
2428FLECS_API
2430 ecs_world_t *world,
2431 int32_t entity_count);
2432
2448FLECS_API
2450 ecs_world_t *world,
2451 ecs_entity_t id_start,
2452 ecs_entity_t id_end);
2453
2464FLECS_API
2466 ecs_world_t *world,
2467 bool enable);
2468
2474FLECS_API
2476 const ecs_world_t *world);
2477
2491FLECS_API
2493 ecs_world_t *world,
2494 ecs_flags32_t flags);
2495
2529FLECS_API
2531 ecs_world_t *world,
2532 ecs_id_t id,
2533 uint16_t clear_generation,
2534 uint16_t delete_generation,
2535 int32_t min_id_count,
2536 double time_budget_seconds);
2537
2543FLECS_API
2545 const ecs_poly_t *poly);
2546
2552FLECS_API
2554 const ecs_poly_t *poly);
2555
2569FLECS_API
2571 const ecs_poly_t *object,
2572 int32_t type);
2573
2577#define flecs_poly_is(object, type)\
2578 flecs_poly_is_(object, type##_magic)
2579
2588FLECS_API
2590 ecs_entity_t first,
2591 ecs_entity_t second);
2592
2619FLECS_API
2621 ecs_world_t *world);
2622
2640FLECS_API
2642 ecs_world_t *world);
2643
2652FLECS_API
2654 ecs_world_t *world,
2655 ecs_id_t id);
2656
2664FLECS_API
2666 ecs_world_t *world,
2667 ecs_table_t *table);
2668
2687FLECS_API
2689 ecs_world_t *world,
2690 const ecs_entity_desc_t *desc);
2691
2718FLECS_API
2720 ecs_world_t *world,
2721 const ecs_bulk_desc_t *desc);
2722
2732FLECS_API
2734 ecs_world_t *world,
2735 ecs_id_t id,
2736 int32_t count);
2737
2753FLECS_API
2755 ecs_world_t *world,
2756 ecs_entity_t dst,
2757 ecs_entity_t src,
2758 bool copy_value);
2759
2768FLECS_API
2770 ecs_world_t *world,
2771 ecs_entity_t entity);
2772
2780FLECS_API
2782 ecs_world_t *world,
2783 ecs_id_t id);
2784
2802FLECS_API
2804 ecs_world_t *world,
2805 ecs_entity_t entity,
2806 ecs_id_t id);
2807
2816FLECS_API
2818 ecs_world_t *world,
2819 ecs_entity_t entity,
2820 ecs_id_t id);
2821
2873FLECS_API
2875 ecs_world_t *world,
2876 ecs_entity_t entity,
2877 ecs_id_t id);
2878
2885FLECS_API
2887 ecs_world_t *world,
2888 ecs_entity_t entity);
2889
2897FLECS_API
2899 ecs_world_t *world,
2900 ecs_id_t id);
2901
2909FLECS_API
2911 ecs_world_t *world,
2912 ecs_id_t id);
2913
2920FLECS_API
2922 const ecs_world_t *world);
2923
2942FLECS_API
2944 ecs_world_t *world,
2945 ecs_entity_t entity,
2946 bool enabled);
2947
2961FLECS_API
2963 ecs_world_t *world,
2964 ecs_entity_t entity,
2965 ecs_id_t id,
2966 bool enable);
2967
2978FLECS_API
2980 const ecs_world_t *world,
2981 ecs_entity_t entity,
2982 ecs_id_t id);
2983
3007FLECS_API
3008const void* ecs_get_id(
3009 const ecs_world_t *world,
3010 ecs_entity_t entity,
3011 ecs_id_t id);
3012
3024FLECS_API
3026 const ecs_world_t *world,
3027 ecs_entity_t entity,
3028 ecs_id_t id);
3029
3047FLECS_API
3049 ecs_world_t *world,
3050 ecs_entity_t entity,
3051 ecs_id_t id);
3052
3064FLECS_API
3066 ecs_world_t *world,
3067 ecs_entity_t entity,
3068 ecs_id_t id);
3069
3080FLECS_API
3082 const ecs_world_t *world,
3083 ecs_entity_t entity,
3084 ecs_id_t id);
3085
3094FLECS_API
3096 const ecs_world_t *world,
3097 ecs_ref_t *ref,
3098 ecs_id_t id);
3099
3107FLECS_API
3109 const ecs_world_t *world,
3110 ecs_ref_t *ref);
3111
3119FLECS_API
3121 const ecs_world_t *world,
3122 ecs_entity_t entity);
3123
3142FLECS_API
3144 ecs_world_t *world,
3145 ecs_entity_t entity);
3146
3153FLECS_API
3155 ecs_record_t *record);
3156
3176FLECS_API
3178 ecs_world_t *world,
3179 ecs_entity_t entity);
3180
3186FLECS_API
3188 const ecs_record_t *record);
3189
3196FLECS_API
3198 const ecs_record_t *record);
3199
3215FLECS_API
3217 const ecs_world_t *world,
3218 const ecs_record_t *record,
3219 ecs_id_t id);
3220
3229FLECS_API
3231 ecs_world_t *world,
3232 ecs_record_t *record,
3233 ecs_id_t id);
3234
3242FLECS_API
3244 ecs_world_t *world,
3245 const ecs_record_t *record,
3246 ecs_id_t id);
3247
3264FLECS_API
3266 const ecs_record_t *record,
3267 int32_t column,
3268 size_t size);
3269
3289FLECS_API
3291 ecs_world_t *world,
3292 ecs_entity_t entity,
3293 ecs_id_t id,
3294 bool *is_new);
3295
3305FLECS_API
3307 ecs_world_t *world,
3308 ecs_entity_t entity,
3309 ecs_id_t id);
3310
3326FLECS_API
3328 ecs_world_t *world,
3329 ecs_entity_t entity,
3330 ecs_id_t id,
3331 size_t size,
3332 const void *ptr);
3333
3361FLECS_API
3363 const ecs_world_t *world,
3364 ecs_entity_t e);
3365
3391FLECS_API
3393 const ecs_world_t *world,
3394 ecs_entity_t e);
3395
3401FLECS_API
3403 ecs_entity_t e);
3404
3421FLECS_API
3423 const ecs_world_t *world,
3424 ecs_entity_t e);
3425
3448FLECS_API
3450 ecs_world_t *world,
3451 ecs_entity_t entity);
3452
3471FLECS_API
3473 ecs_world_t *world,
3474 ecs_id_t id);
3475
3483FLECS_API
3485 const ecs_world_t *world,
3486 ecs_entity_t entity);
3487
3502FLECS_API
3504 ecs_world_t *world,
3505 ecs_entity_t entity);
3506
3522FLECS_API
3524 const ecs_world_t *world,
3525 ecs_entity_t entity);
3526
3533FLECS_API
3535 const ecs_world_t *world,
3536 ecs_entity_t entity);
3537
3545FLECS_API
3547 const ecs_world_t *world,
3548 const ecs_type_t* type);
3549
3561FLECS_API
3563 const ecs_world_t *world,
3564 const ecs_table_t *table);
3565
3580FLECS_API
3582 const ecs_world_t *world,
3583 ecs_entity_t entity);
3584
3595FLECS_API
3597 const ecs_world_t *world,
3598 ecs_entity_t entity,
3599 ecs_id_t id);
3600
3611FLECS_API
3613 const ecs_world_t *world,
3614 ecs_entity_t entity,
3615 ecs_id_t id);
3616
3631FLECS_API
3633 const ecs_world_t *world,
3634 ecs_entity_t entity,
3635 ecs_entity_t rel,
3636 int32_t index);
3637
3651FLECS_API
3653 const ecs_world_t *world,
3654 ecs_entity_t entity);
3655
3676FLECS_API
3678 const ecs_world_t *world,
3679 ecs_entity_t entity,
3680 ecs_entity_t rel,
3681 ecs_id_t id);
3682
3693FLECS_API
3695 const ecs_world_t *world,
3696 ecs_entity_t entity,
3697 ecs_entity_t rel);
3698
3706FLECS_API
3708 const ecs_world_t *world,
3709 ecs_id_t entity);
3710
3730FLECS_API
3731const char* ecs_get_name(
3732 const ecs_world_t *world,
3733 ecs_entity_t entity);
3734
3744FLECS_API
3745const char* ecs_get_symbol(
3746 const ecs_world_t *world,
3747 ecs_entity_t entity);
3748
3762FLECS_API
3764 ecs_world_t *world,
3765 ecs_entity_t entity,
3766 const char *name);
3767
3781FLECS_API
3783 ecs_world_t *world,
3784 ecs_entity_t entity,
3785 const char *symbol);
3786
3798FLECS_API
3800 ecs_world_t *world,
3801 ecs_entity_t entity,
3802 const char *alias);
3803
3819FLECS_API
3821 const ecs_world_t *world,
3822 const char *path);
3823
3838FLECS_API
3840 const ecs_world_t *world,
3841 ecs_entity_t parent,
3842 const char *name);
3843
3866FLECS_API
3868 const ecs_world_t *world,
3869 ecs_entity_t parent,
3870 const char *path,
3871 const char *sep,
3872 const char *prefix,
3873 bool recursive);
3874
3892FLECS_API
3894 const ecs_world_t *world,
3895 const char *symbol,
3896 bool lookup_as_path,
3897 bool recursive);
3898
3920FLECS_API
3922 const ecs_world_t *world,
3923 ecs_entity_t parent,
3924 ecs_entity_t child,
3925 const char *sep,
3926 const char *prefix);
3927
3941 const ecs_world_t *world,
3942 ecs_entity_t parent,
3943 ecs_entity_t child,
3944 const char *sep,
3945 const char *prefix,
3946 ecs_strbuf_t *buf);
3947
3963FLECS_API
3965 ecs_world_t *world,
3966 ecs_entity_t parent,
3967 const char *path,
3968 const char *sep,
3969 const char *prefix);
3970
3985FLECS_API
3987 ecs_world_t *world,
3988 ecs_entity_t entity,
3989 ecs_entity_t parent,
3990 const char *path,
3991 const char *sep,
3992 const char *prefix);
3993
4007FLECS_API
4009 ecs_world_t *world,
4010 ecs_entity_t scope);
4011
4019FLECS_API
4021 const ecs_world_t *world);
4022
4032FLECS_API
4034 ecs_world_t *world,
4035 const char *prefix);
4036
4063FLECS_API
4065 ecs_world_t *world,
4066 const ecs_entity_t *lookup_path);
4067
4074FLECS_API
4076 const ecs_world_t *world);
4077
4102FLECS_API
4104 ecs_world_t *world,
4105 const ecs_component_desc_t *desc);
4106
4116FLECS_API
4118 const ecs_world_t *world,
4119 ecs_id_t id);
4120
4132FLECS_API
4134 ecs_world_t *world,
4135 ecs_entity_t id,
4136 const ecs_type_hooks_t *hooks);
4137
4144FLECS_API
4146 const ecs_world_t *world,
4147 ecs_entity_t id);
4148
4172FLECS_API
4174 const ecs_world_t *world,
4175 ecs_id_t id);
4176
4185FLECS_API
4187 const ecs_world_t *world,
4188 ecs_id_t id);
4189
4209FLECS_API
4211 const ecs_world_t *world,
4212 ecs_id_t id);
4213
4222FLECS_API
4224 ecs_id_t id,
4225 ecs_id_t pattern);
4226
4232FLECS_API
4234 ecs_id_t id);
4235
4241FLECS_API
4243 ecs_id_t id);
4244
4258FLECS_API
4260 const ecs_world_t *world,
4261 ecs_id_t id);
4262
4271FLECS_API
4272ecs_flags32_t ecs_id_get_flags(
4273 const ecs_world_t *world,
4274 ecs_id_t id);
4275
4282FLECS_API
4284 ecs_id_t id_flags);
4285
4293FLECS_API
4295 const ecs_world_t *world,
4296 ecs_id_t id);
4297
4305FLECS_API
4307 const ecs_world_t *world,
4308 ecs_id_t id,
4309 ecs_strbuf_t *buf);
4310
4324FLECS_API
4326 const ecs_term_ref_t *id);
4327
4339FLECS_API
4341 const ecs_term_t *term);
4342
4357FLECS_API
4359 const ecs_term_t *term);
4360
4373FLECS_API
4375 const ecs_term_t *term);
4376
4385FLECS_API
4387 const ecs_world_t *world,
4388 const ecs_term_t *term);
4389
4397FLECS_API
4399 const ecs_query_t *query);
4400
4441FLECS_API
4443 const ecs_world_t *world,
4444 ecs_id_t id);
4445
4451FLECS_API
4453 ecs_iter_t *it);
4454
4467FLECS_API
4469 const ecs_world_t *world,
4470 ecs_entity_t parent);
4471
4477FLECS_API
4479 ecs_iter_t *it);
4480
4496FLECS_API
4498 ecs_world_t *world,
4499 const ecs_query_desc_t *desc);
4500
4505FLECS_API
4507 ecs_query_t *query);
4508
4517FLECS_API
4519 const ecs_query_t *query,
4520 const char *name);
4521
4529FLECS_API
4531 const ecs_query_t *query,
4532 int32_t var_id);
4533
4544FLECS_API
4546 const ecs_query_t *query,
4547 int32_t var_id);
4548
4617FLECS_API
4619 const ecs_world_t *world,
4620 const ecs_query_t *query);
4621
4629FLECS_API
4631 ecs_iter_t *it);
4632
4651FLECS_API
4653 ecs_query_t *query,
4654 ecs_entity_t entity,
4655 ecs_iter_t *it);
4656
4675FLECS_API
4677 ecs_query_t *query,
4678 ecs_table_t *table,
4679 ecs_iter_t *it);
4680
4707FLECS_API
4709 ecs_query_t *query,
4710 ecs_table_range_t *range,
4711 ecs_iter_t *it);
4712
4720FLECS_API
4722 const ecs_query_t *query);
4723
4733FLECS_API
4735 const ecs_query_t *query);
4736
4751FLECS_API
4753 const ecs_query_t *query,
4754 const ecs_iter_t *it);
4755
4773FLECS_API
4775 ecs_query_t *query,
4776 ecs_iter_t *it,
4777 const char *expr);
4778
4807FLECS_API
4809 ecs_query_t *query);
4810
4821FLECS_API
4823 ecs_iter_t *it);
4824
4847FLECS_API
4849 ecs_iter_t *it,
4850 uint64_t group_id);
4851
4860FLECS_API
4862 const ecs_query_t *query,
4863 uint64_t group_id);
4864
4873FLECS_API
4875 const ecs_query_t *query,
4876 uint64_t group_id);
4877
4885
4892FLECS_API
4894 const ecs_query_t *query);
4895
4901FLECS_API
4903 const ecs_query_t *query);
4904
4933FLECS_API
4935 ecs_world_t *world,
4936 ecs_event_desc_t *desc);
4937
4948FLECS_API
4950 ecs_world_t *world,
4951 ecs_event_desc_t *desc);
4952
4963FLECS_API
4965 ecs_world_t *world,
4966 const ecs_observer_desc_t *desc);
4967
4976FLECS_API
4978 const ecs_world_t *world,
4979 ecs_entity_t observer);
4980
5003FLECS_API
5005 ecs_iter_t *it);
5006
5016FLECS_API
5018 ecs_iter_t *it);
5019
5031FLECS_API
5033 ecs_iter_t *it);
5034
5047FLECS_API
5049 ecs_iter_t *it);
5050
5058FLECS_API
5060 ecs_iter_t *it);
5061
5100FLECS_API
5102 ecs_iter_t *it,
5103 int32_t var_id,
5104 ecs_entity_t entity);
5105
5116FLECS_API
5118 ecs_iter_t *it,
5119 int32_t var_id,
5120 const ecs_table_t *table);
5121
5132FLECS_API
5134 ecs_iter_t *it,
5135 int32_t var_id,
5136 const ecs_table_range_t *range);
5137
5150FLECS_API
5152 ecs_iter_t *it,
5153 int32_t var_id);
5154
5168FLECS_API
5170 ecs_iter_t *it,
5171 int32_t var_id);
5172
5186FLECS_API
5188 ecs_iter_t *it,
5189 int32_t var_id);
5190
5202FLECS_API
5204 ecs_iter_t *it,
5205 int32_t var_id);
5206
5218FLECS_API
5220 ecs_iter_t *it);
5221
5233FLECS_API
5235 const ecs_iter_t *it);
5236
5252FLECS_API
5254 const ecs_iter_t *it,
5255 int32_t offset,
5256 int32_t limit);
5257
5264FLECS_API
5266 ecs_iter_t *it);
5267
5288FLECS_API
5290 const ecs_iter_t *it,
5291 int32_t index,
5292 int32_t count);
5293
5300FLECS_API
5302 ecs_iter_t *it);
5303
5327FLECS_API
5329 const ecs_iter_t *it,
5330 size_t size,
5331 int32_t index);
5332
5341FLECS_API
5343 const ecs_iter_t *it,
5344 int32_t index);
5345
5356FLECS_API
5358 const ecs_iter_t *it,
5359 int32_t index);
5360
5367FLECS_API
5369 const ecs_iter_t *it,
5370 int32_t index);
5371
5378FLECS_API
5380 const ecs_iter_t *it,
5381 int32_t index);
5382
5391FLECS_API
5393 const ecs_iter_t *it,
5394 int32_t index);
5395
5403FLECS_API
5405 const ecs_iter_t *it,
5406 int32_t index);
5407
5415FLECS_API
5417 const ecs_iter_t *it,
5418 int32_t index);
5419
5433FLECS_API
5435 const ecs_iter_t *it,
5436 int32_t index);
5437
5453FLECS_API
5455 const ecs_table_t *table);
5456
5467FLECS_API
5469 const ecs_world_t *world,
5470 const ecs_table_t *table,
5471 ecs_id_t id);
5472
5482FLECS_API
5484 const ecs_world_t *world,
5485 const ecs_table_t *table,
5486 ecs_id_t id);
5487
5495FLECS_API
5497 const ecs_table_t *table);
5498
5512FLECS_API
5514 const ecs_table_t *table,
5515 int32_t index);
5516
5525FLECS_API
5527 const ecs_table_t *table,
5528 int32_t index);
5529
5538FLECS_API
5540 const ecs_table_t *table,
5541 int32_t index,
5542 int32_t offset);
5543
5553FLECS_API
5555 const ecs_world_t *world,
5556 const ecs_table_t *table,
5557 ecs_id_t id,
5558 int32_t offset);
5559
5567FLECS_API
5569 const ecs_table_t *table,
5570 int32_t index);
5571
5580FLECS_API
5582 const ecs_table_t *table);
5583
5594FLECS_API
5596 const ecs_world_t *world,
5597 const ecs_table_t *table,
5598 ecs_id_t id);
5599
5610FLECS_API
5612 const ecs_world_t *world,
5613 const ecs_table_t *table,
5614 ecs_entity_t rel);
5615
5625FLECS_API
5627 ecs_world_t *world,
5628 ecs_table_t *table,
5629 ecs_id_t id);
5630
5641FLECS_API
5643 ecs_world_t *world,
5644 const ecs_id_t *ids,
5645 int32_t id_count);
5646
5656FLECS_API
5658 ecs_world_t *world,
5659 ecs_table_t *table,
5660 ecs_id_t id);
5661
5677FLECS_API
5679 ecs_world_t *world,
5680 ecs_table_t *table);
5681
5688FLECS_API
5690 ecs_world_t *world,
5691 ecs_table_t *table);
5692
5702FLECS_API
5704 ecs_table_t *table,
5705 ecs_flags32_t flags);
5706
5714FLECS_API
5716 ecs_world_t* world,
5717 ecs_table_t* table,
5718 int32_t row_1,
5719 int32_t row_2);
5720
5743FLECS_API
5745 ecs_world_t *world,
5746 ecs_entity_t entity,
5747 ecs_record_t *record,
5748 ecs_table_t *table,
5749 const ecs_type_t *added,
5750 const ecs_type_t *removed);
5751
5752
5771FLECS_API
5773 const ecs_world_t *world,
5774 const ecs_table_t *table,
5775 ecs_id_t id,
5776 ecs_id_t *id_out);
5777
5813FLECS_API
5815 const ecs_world_t *world,
5816 const ecs_table_t *table,
5817 int32_t offset,
5818 ecs_id_t id,
5819 ecs_id_t *id_out);
5820
5862FLECS_API
5864 const ecs_world_t *world,
5865 const ecs_table_t *table,
5866 int32_t offset,
5867 ecs_id_t id,
5868 ecs_entity_t rel,
5869 ecs_flags64_t flags, /* EcsSelf and/or EcsUp */
5870 ecs_entity_t *subject_out,
5871 ecs_id_t *id_out,
5872 struct ecs_table_record_t **tr_out);
5873
5890FLECS_API
5892 const ecs_world_t *world,
5893 ecs_entity_t type,
5894 void *ptr);
5895
5903FLECS_API
5905 const ecs_world_t *world,
5906 const ecs_type_info_t *ti,
5907 void *ptr);
5908
5915FLECS_API
5917 ecs_world_t *world,
5918 ecs_entity_t type);
5919
5927 ecs_world_t *world,
5928 const ecs_type_info_t *ti);
5929
5938 const ecs_world_t *world,
5939 const ecs_type_info_t *ti,
5940 void *ptr);
5941
5949FLECS_API
5951 const ecs_world_t *world,
5952 ecs_entity_t type,
5953 void* ptr);
5954
5962FLECS_API
5964 ecs_world_t *world,
5965 ecs_entity_t type,
5966 void* ptr);
5967
5976FLECS_API
5978 const ecs_world_t *world,
5979 const ecs_type_info_t *ti,
5980 void* dst,
5981 const void *src);
5982
5991FLECS_API
5993 const ecs_world_t *world,
5994 ecs_entity_t type,
5995 void* dst,
5996 const void *src);
5997
6007 const ecs_world_t *world,
6008 const ecs_type_info_t *ti,
6009 void* dst,
6010 void *src);
6011
6021 const ecs_world_t *world,
6022 ecs_entity_t type,
6023 void* dst,
6024 void *src);
6025
6035 const ecs_world_t *world,
6036 const ecs_type_info_t *ti,
6037 void* dst,
6038 void *src);
6039
6049 const ecs_world_t *world,
6050 ecs_entity_t type,
6051 void* dst,
6052 void *src);
6053
6067#include "flecs/addons/flecs_c.h"
6068
6069#ifdef __cplusplus
6070}
6071#endif
6072
6073#include "flecs/private/addons.h"
6074
6075#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:386
struct ecs_ref_t ecs_ref_t
A ref is a fast way to fetch a component for a specific entity.
Definition flecs.h:435
ecs_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:339
struct ecs_table_record_t ecs_table_record_t
Information about where in a table a specific (component) id is stored.
Definition flecs.h:454
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:451
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:383
struct ecs_mixins_t ecs_mixins_t
Type that stores poly mixins.
Definition flecs.h:478
uint64_t ecs_id_t
Ids are the things that can be added to an entity.
Definition flecs.h:332
struct ecs_observable_t ecs_observable_t
An observable produces events that can be listened for by an observer.
Definition flecs.h:419
struct ecs_record_t ecs_record_t
Information about an entity, like its table and row.
Definition flecs.h:448
struct ecs_table_t ecs_table_t
A table stores entities and components for a specific type.
Definition flecs.h:389
void ecs_poly_t
A poly object.
Definition flecs.h:475
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:575
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:555
uint64_t(* ecs_hash_value_action_t)(const void *ptr)
Callback used for hashing values.
Definition flecs.h:593
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:568
void(* ecs_iter_fini_action_t)(ecs_iter_t *it)
Function prototype for freeing an iterator.
Definition flecs.h:533
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:562
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:544
bool(* ecs_iter_next_action_t)(ecs_iter_t *it)
Function prototype for iterating an iterator.
Definition flecs.h:525
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:515
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:603
int(* ecs_compare_action_t)(const void *ptr1, const void *ptr2)
Callback used for sorting values.
Definition flecs.h:588
void(* ecs_fini_action_t)(ecs_world_t *world, void *ctx)
Action callback on world exit.
Definition flecs.h:579
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:610
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
Definition flecs.h:617
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
Definition flecs.h:506
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:584
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:537
void(* ecs_xtor_t)(void *ptr, int32_t count, const ecs_type_info_t *type_info)
Constructor/destructor callback.
Definition flecs.h:597
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.
bool ecs_field_is_set(const ecs_iter_t *it, int32_t index)
Test whether field is set.
bool ecs_iter_changed(ecs_iter_t *it)
Returns whether current iterator result has changed.
int32_t ecs_field_column(const ecs_iter_t *it, int32_t index)
Return index of matched table column.
bool ecs_field_is_writeonly(const ecs_iter_t *it, int32_t index)
Test whether the field is writeonly.
bool ecs_field_is_self(const ecs_iter_t *it, int32_t index)
Test whether the field is matched on self.
void * ecs_field_w_size(const ecs_iter_t *it, size_t size, int32_t index)
Obtain data for a query field.
ecs_iter_t ecs_worker_iter(const ecs_iter_t *it, int32_t index, int32_t count)
Create a worker iterator.
size_t ecs_field_size(const ecs_iter_t *it, int32_t index)
Return field type size.
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.
ecs_id_t ecs_field_id(const ecs_iter_t *it, int32_t index)
Return id matched for field.
bool ecs_field_is_readonly(const ecs_iter_t *it, int32_t index)
Test whether the field is readonly.
void ecs_iter_set_var(ecs_iter_t *it, int32_t var_id, ecs_entity_t entity)
Set value for iterator variable.
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.
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.
ecs_entity_t ecs_field_src(const ecs_iter_t *it, int32_t index)
Return field source.
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...
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:268
#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:262
#define FLECS_TERM_COUNT_MAX
Maximum number of terms in queries.
Definition flecs.h:278
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:651
ecs_inout_kind_t
Specify read/write access for term.
Definition flecs.h:630
ecs_oper_kind_t
Specify operator for term.
Definition flecs.h:640
@ EcsQueryCacheAll
Require that all query terms can be cached.
Definition flecs.h:654
@ EcsQueryCacheDefault
Behavior determined by query creation context.
Definition flecs.h:652
@ EcsQueryCacheNone
No caching.
Definition flecs.h:655
@ EcsQueryCacheAuto
Cache query terms that are cacheable.
Definition flecs.h:653
@ EcsOut
Term is only written.
Definition flecs.h:636
@ EcsInOut
Term is both read and written.
Definition flecs.h:634
@ EcsInOutFilter
Same as InOutNone + prevents term from triggering observers.
Definition flecs.h:633
@ EcsInOutDefault
InOut for regular terms, In for shared terms.
Definition flecs.h:631
@ EcsInOutNone
Term is neither read nor written.
Definition flecs.h:632
@ EcsIn
Term is only read.
Definition flecs.h:635
@ EcsNot
The term must not match.
Definition flecs.h:643
@ EcsOptional
The term may match.
Definition flecs.h:644
@ EcsOr
One of the terms in an or chain must match.
Definition flecs.h:642
@ EcsOrFrom
Term must match at least one component from term id.
Definition flecs.h:646
@ EcsAnd
The term must match.
Definition flecs.h:641
@ EcsNotFrom
Term must match none of the components from term id.
Definition flecs.h:647
@ EcsAndFrom
Term must match all components from term id.
Definition flecs.h:645
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.
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 records in the 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:1425
ecs_size_t size
Component size.
Definition flecs.h:1426
ecs_size_t alignment
Component alignment.
Definition flecs.h:1427
When added to an entity this informs serialization formats which component to use when a value is ass...
Definition flecs.h:1440
ecs_id_t component
Default component id.
Definition flecs.h:1441
A (string) identifier.
Definition flecs.h:1416
ecs_size_t length
Length of identifier.
Definition flecs.h:1418
char * value
Identifier string.
Definition flecs.h:1417
ecs_hashmap_t * index
Current index.
Definition flecs.h:1421
uint64_t hash
Hash of current value.
Definition flecs.h:1419
uint64_t index_hash
Hash of existing record in current index.
Definition flecs.h:1420
Component for storing a poly object.
Definition flecs.h:1431
ecs_poly_t * poly
Pointer to poly object.
Definition flecs.h:1432
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:1328
int16_t version_major
Major flecs version.
Definition flecs.h:1332
const char ** addons
Addons included in build.
Definition flecs.h:1330
const char * version
Stringified version.
Definition flecs.h:1331
const char * compiler
Compiler used to compile flecs.
Definition flecs.h:1329
bool sanitize
Is this a sanitize build.
Definition flecs.h:1336
bool perf_trace
Is this a perf tracing build.
Definition flecs.h:1337
int16_t version_minor
Minor flecs version.
Definition flecs.h:1333
bool debug
Is this a debug build.
Definition flecs.h:1335
int16_t version_patch
Patch flecs version.
Definition flecs.h:1334
Used with ecs_bulk_init().
Definition flecs.h:947
void ** data
Array with component data to insert.
Definition flecs.h:959
ecs_id_t ids[(32)]
Ids to create the entities with.
Definition flecs.h:957
int32_t count
Number of entities to create/populate.
Definition flecs.h:955
int32_t _canary
Used for validity testing.
Definition flecs.h:948
ecs_entity_t * entities
Entities to bulk insert.
Definition flecs.h:950
ecs_table_t * table
Table to insert the entities into.
Definition flecs.h:966
Used with ecs_component_init().
Definition flecs.h:977
int32_t _canary
Used for validity testing.
Definition flecs.h:978
ecs_type_info_t type
Parameters for type (size, hooks, ...)
Definition flecs.h:984
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:981
Type returned by ecs_get_entities().
Definition flecs.h:1892
int32_t alive_count
Number of alive entity ids.
Definition flecs.h:1895
int32_t count
Total number of entity ids.
Definition flecs.h:1894
const ecs_entity_t * ids
Array with all entity ids in the world.
Definition flecs.h:1893
Used with ecs_entity_init().
Definition flecs.h:901
const char * sep
Optional custom separator for hierarchical names.
Definition flecs.h:913
const char * root_sep
Optional, used for identifiers relative to root.
Definition flecs.h:917
const char * name
Name of the entity.
Definition flecs.h:908
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:929
const char * symbol
Optional entity symbol.
Definition flecs.h:919
int32_t _canary
Used for validity testing.
Definition flecs.h:902
const ecs_id_t * add
0-terminated array of ids to add to the entity.
Definition flecs.h:934
const char * add_expr
String expression with components to add.
Definition flecs.h:940
const ecs_value_t * set
0-terminated array of values to set on the entity.
Definition flecs.h:937
ecs_entity_t id
Set to modify existing entity (optional)
Definition flecs.h:904
ecs_entity_t parent
Parent entity.
Definition flecs.h:906
Used with ecs_emit().
Definition flecs.h:1274
ecs_entity_t entity
Single-entity alternative to setting table / offset / count.
Definition flecs.h:1299
const void * const_param
Same as param, but with the guarantee that the value won't be modified.
Definition flecs.h:1310
ecs_table_t * table
The table for which to notify.
Definition flecs.h:1284
int32_t count
Limit number of notified entities to count.
Definition flecs.h:1296
ecs_table_t * other_table
Optional 2nd table to notify.
Definition flecs.h:1288
int32_t offset
Limit notified entities to ones starting from offset (row) in table.
Definition flecs.h:1291
const ecs_type_t * ids
Component ids.
Definition flecs.h:1281
ecs_poly_t * observable
Observable (usually the world)
Definition flecs.h:1313
ecs_entity_t event
The event id.
Definition flecs.h:1276
ecs_flags32_t flags
Event flags.
Definition flecs.h:1316
void * param
Optional context.
Definition flecs.h:1305
Header for ecs_poly_t objects.
Definition flecs.h:481
int32_t magic
Magic number verifying it's a flecs object.
Definition flecs.h:482
int32_t type
Magic number indicating which type of flecs object.
Definition flecs.h:483
int32_t refcount
Refcount, to enable RAII handles.
Definition flecs.h:484
ecs_mixins_t * mixins
Table with offsets to (optional) mixins.
Definition flecs.h:485
Iterator.
Definition flecs.h:1025
ecs_world_t * real_world
Actual world.
Definition flecs.h:1028
void * param
Param passed to ecs_run.
Definition flecs.h:1062
ecs_entity_t event
The event (if applicable)
Definition flecs.h:1049
int32_t frame_offset
Offset relative to start of iteration.
Definition flecs.h:1073
char ** variable_names
Names of variables (if any)
Definition flecs.h:1059
int32_t instance_count
Number of entities to iterate before next table.
Definition flecs.h:1076
ecs_entity_t interrupted_by
When set, system execution is interrupted.
Definition flecs.h:1080
ecs_flags32_t flags
Iterator flags.
Definition flecs.h:1079
ecs_iter_t * chain_it
Optional, allows for creating iterator chains.
Definition flecs.h:1087
ecs_flags32_t shared_fields
Bitset with shared fields.
Definition flecs.h:1044
void * ctx
System context.
Definition flecs.h:1063
void * run_ctx
Run language binding context.
Definition flecs.h:1066
ecs_table_t * table
Current table.
Definition flecs.h:1034
int32_t offset
Offset relative to current table.
Definition flecs.h:1074
ecs_id_t event_id
The (component) id for the event.
Definition flecs.h:1050
ecs_iter_fini_action_t fini
Function to cleanup iterator resources.
Definition flecs.h:1086
ecs_var_t * variables
Values of variables (if any)
Definition flecs.h:1037
ecs_iter_private_t priv_
Private data.
Definition flecs.h:1081
ecs_world_t * world
The world.
Definition flecs.h:1027
void * callback_ctx
Callback language binding context.
Definition flecs.h:1065
ecs_entity_t * sources
Entity on which the id was matched (0 if same as entities)
Definition flecs.h:1039
void * binding_ctx
System binding context.
Definition flecs.h:1064
float delta_system_time
Time elapsed since last system invocation.
Definition flecs.h:1070
const ecs_query_t * query
Query being evaluated.
Definition flecs.h:1054
int32_t field_count
Number of fields in iterator.
Definition flecs.h:1042
ecs_entity_t system
The system (if applicable)
Definition flecs.h:1048
ecs_flags32_t set_fields
Fields that are set.
Definition flecs.h:1043
const ecs_size_t * sizes
Component sizes.
Definition flecs.h:1033
float delta_time
Time elapsed since last frame.
Definition flecs.h:1069
ecs_flags32_t up_fields
Bitset with fields matched through up traversal.
Definition flecs.h:1045
ecs_iter_action_t callback
Callback of system or observer.
Definition flecs.h:1085
int32_t term_index
Index of term that emitted an event.
Definition flecs.h:1055
ecs_entity_t * entities
Entity identifiers.
Definition flecs.h:1031
ecs_table_t * other_table
Prev or next table when adding/removing.
Definition flecs.h:1035
int32_t * columns
Query term to table column mapping.
Definition flecs.h:1038
int32_t variable_count
Number of variables for query.
Definition flecs.h:1058
int32_t event_cur
Unique event id.
Definition flecs.h:1051
int32_t count
Number of entities to iterate.
Definition flecs.h:1075
void ** ptrs
Pointers to components.
Definition flecs.h:1032
uint64_t group_id
Group id for table, if group_by is used.
Definition flecs.h:1041
ecs_iter_next_action_t next
Function to progress iterator.
Definition flecs.h:1084
ecs_id_t * ids
(Component) ids
Definition flecs.h:1036
ecs_flags64_t constrained_vars
Bitset that marks constrained variables.
Definition flecs.h:1040
Used with ecs_observer_init().
Definition flecs.h:1212
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition flecs.h:1256
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1244
void * run_ctx
Context associated with run (for language bindings).
Definition flecs.h:1253
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1217
ecs_entity_t events[(8)]
Events to observe (OnAdd, OnRemove, OnSet)
Definition flecs.h:1223
int32_t * last_event_id
Optional shared last event id for multiple observers.
Definition flecs.h:1263
void * callback_ctx
Context associated with callback (for language bindings).
Definition flecs.h:1247
void * ctx
User context to pass to callback.
Definition flecs.h:1241
ecs_query_desc_t query
Query for observer.
Definition flecs.h:1220
ecs_poly_t * observable
Observable with which to register the observer.
Definition flecs.h:1259
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition flecs.h:1250
ecs_iter_action_t callback
Callback to invoke on an event, invoked when the observer matches.
Definition flecs.h:1230
int32_t term_index_
Used for internal purposes.
Definition flecs.h:1266
bool yield_existing
When observer is created, generate events from existing data.
Definition flecs.h:1227
ecs_run_action_t run
Callback invoked on an event.
Definition flecs.h:1238
int32_t _canary
Used for validity testing.
Definition flecs.h:1214
An observer reacts to events matching a query.
Definition flecs.h:798
int32_t event_count
Number of events.
Definition flecs.h:805
ecs_iter_action_t callback
See ecs_observer_desc_t::callback.
Definition flecs.h:807
ecs_entity_t entity
Entity associated with observer.
Definition flecs.h:821
ecs_observable_t * observable
Observable for observer.
Definition flecs.h:818
ecs_run_action_t run
See ecs_observer_desc_t::run.
Definition flecs.h:808
ecs_header_t hdr
Object header.
Definition flecs.h:799
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:814
void * run_ctx
Run language binding context.
Definition flecs.h:812
ecs_world_t * world
The world.
Definition flecs.h:820
ecs_ctx_free_t run_ctx_free
Callback to free run_ctx.
Definition flecs.h:816
void * callback_ctx
Callback language binding context.
Definition flecs.h:811
void * ctx
Observer context.
Definition flecs.h:810
ecs_entity_t events[(8)]
Observer events.
Definition flecs.h:804
ecs_ctx_free_t callback_ctx_free
Callback to free callback_ctx.
Definition flecs.h:815
ecs_query_t * query
Observer query.
Definition flecs.h:801
Struct returned by ecs_query_count().
Definition flecs.h:4879
int32_t empty_tables
Number of empty tables returned by query.
Definition flecs.h:4883
int32_t entities
Number of entities returned by query.
Definition flecs.h:4881
int32_t results
Number of results returned by query.
Definition flecs.h:4880
int32_t tables
Number of tables returned by query.
Definition flecs.h:4882
Used with ecs_query_init().
Definition flecs.h:1138
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:1199
ecs_id_t group_by
Component id to be used for grouping.
Definition flecs.h:1169
ecs_term_t terms[32]
Query terms.
Definition flecs.h:1143
int32_t _canary
Used for validity testing.
Definition flecs.h:1140
void * ctx
User context to pass to callback.
Definition flecs.h:1193
ecs_ctx_free_t group_by_ctx_free
Function to free group_by_ctx.
Definition flecs.h:1190
void * group_by_ctx
Context to pass to group_by.
Definition flecs.h:1187
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:1196
ecs_entity_t order_by
Component to sort on, used together with order_by_callback or order_by_table_callback.
Definition flecs.h:1165
ecs_order_by_action_t order_by_callback
Callback used for ordering query results.
Definition flecs.h:1157
ecs_group_create_action_t on_group_create
Callback that is invoked when a new group is created.
Definition flecs.h:1180
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:1205
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:1202
ecs_group_by_action_t group_by_callback
Callback used for grouping results.
Definition flecs.h:1176
ecs_group_delete_action_t on_group_delete
Callback that is invoked when an existing group is deleted.
Definition flecs.h:1184
ecs_sort_table_action_t order_by_table_callback
Callback used for ordering query results.
Definition flecs.h:1161
ecs_flags32_t flags
Flags for enabling query features.
Definition flecs.h:1152
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:1149
const char * expr
Query DSL expression (optional)
Definition flecs.h:1146
Type that contains information about a query group.
Definition flecs.h:1400
int32_t table_count
Number of tables in group.
Definition flecs.h:1402
void * ctx
Group context, returned by on_group_create.
Definition flecs.h:1403
int32_t match_count
How often tables have been matched/unmatched.
Definition flecs.h:1401
Queries are lists of constraints (terms) that match entities.
Definition flecs.h:760
ecs_flags32_t data_fields
Fields that have data.
Definition flecs.h:775
ecs_flags32_t read_fields
Fields that read data.
Definition flecs.h:777
ecs_header_t hdr
Object header.
Definition flecs.h:761
ecs_term_t terms[32]
Query terms.
Definition flecs.h:763
ecs_flags32_t fixed_fields
Fields with a fixed source.
Definition flecs.h:773
ecs_flags32_t write_fields
Fields that write data.
Definition flecs.h:776
int32_t sizes[32]
Component sizes.
Definition flecs.h:764
int32_t eval_count
Number of times query is evaluated.
Definition flecs.h:792
ecs_world_t * world
World or stage query was created with.
Definition flecs.h:790
ecs_flags32_t static_id_fields
Fields with a static (component) id.
Definition flecs.h:774
ecs_world_t * real_world
Actual world.
Definition flecs.h:789
ecs_flags32_t set_fields
Fields that will be set.
Definition flecs.h:779
int16_t var_count
Number of query variables.
Definition flecs.h:768
ecs_entity_t entity
Entity associated with query (optional)
Definition flecs.h:788
void * ctx
User context to pass to callback.
Definition flecs.h:785
ecs_flags32_t shared_readonly_fields
Fields that don't write shared data.
Definition flecs.h:778
ecs_id_t ids[32]
Component ids.
Definition flecs.h:765
ecs_query_cache_kind_t cache_kind
Caching policy of query.
Definition flecs.h:781
int8_t term_count
Number of query terms.
Definition flecs.h:769
char ** vars
Array with variable names for iterator.
Definition flecs.h:783
int8_t field_count
Number of fields returned by query.
Definition flecs.h:770
ecs_flags32_t flags
Query flags.
Definition flecs.h:767
void * binding_ctx
Context to be used for language bindings.
Definition flecs.h:786
Type that describes a reference to an entity or variable in a term.
Definition flecs.h:721
const char * name
Name.
Definition flecs.h:728
ecs_entity_t id
Entity id.
Definition flecs.h:722
Type that describes a term (single element in a query).
Definition flecs.h:736
ecs_term_ref_t src
Source of term.
Definition flecs.h:742
ecs_id_t id
Component id to be matched by term.
Definition flecs.h:737
int16_t field_index
Index of field for term in iterator.
Definition flecs.h:753
int16_t oper
Operator of term.
Definition flecs.h:751
ecs_term_ref_t second
Second element of pair.
Definition flecs.h:744
ecs_flags16_t flags_
Flags that help eval, set by ecs_query_init()
Definition flecs.h:754
ecs_entity_t trav
Relationship to traverse when looking for the component.
Definition flecs.h:746
int16_t inout
Access to contents matched by term.
Definition flecs.h:750
ecs_term_ref_t first
Component or first element of pair.
Definition flecs.h:743
Type that contains component lifecycle callbacks.
Definition flecs.h:830
ecs_copy_t copy_ctor
Ctor + copy.
Definition flecs.h:837
void * ctx
User defined context.
Definition flecs.h:868
ecs_iter_action_t on_remove
Callback that is invoked when an instance of the component is removed.
Definition flecs.h:866
void * binding_ctx
Language binding context.
Definition flecs.h:869
ecs_move_t move_dtor
Move + dtor.
Definition flecs.h:852
ecs_copy_t copy
copy assignment
Definition flecs.h:833
ecs_iter_action_t on_set
Callback that is invoked when an instance of the component is set.
Definition flecs.h:861
ecs_move_t move
move assignment
Definition flecs.h:834
ecs_xtor_t ctor
ctor
Definition flecs.h:831
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition flecs.h:871
ecs_iter_action_t on_add
Callback that is invoked when an instance of a component is added.
Definition flecs.h:856
ecs_ctx_free_t binding_ctx_free
Callback to free binding_ctx.
Definition flecs.h:872
ecs_move_t move_ctor
Ctor + move.
Definition flecs.h:840
ecs_move_t ctor_move_dtor
Ctor + move + dtor (or move_ctor + dtor).
Definition flecs.h:846
ecs_xtor_t dtor
dtor
Definition flecs.h:832
Type that contains component information (passed to ctors/dtors/...)
Definition flecs.h:879
ecs_size_t alignment
Alignment of type.
Definition flecs.h:881
ecs_size_t size
Size of type.
Definition flecs.h:880
const char * name
Type name.
Definition flecs.h:884
ecs_entity_t component
Handle to component (do not set)
Definition flecs.h:883
ecs_type_hooks_t hooks
Type hooks.
Definition flecs.h:882
A type is a list of (component) ids.
Definition flecs.h:356
ecs_id_t * array
Array with ids.
Definition flecs.h:357
int32_t count
Number of elements in array.
Definition flecs.h:358
Utility to hold a value of a dynamic type.
Definition flecs.h:892
void * ptr
Pointer to value.
Definition flecs.h:894
ecs_entity_t type
Type of value.
Definition flecs.h:893
Type that contains information about the world.
Definition flecs.h:1341
float delta_time
Time passed to or computed by ecs_progress()
Definition flecs.h:1347
ecs_entity_t min_id
First allowed entity id.
Definition flecs.h:1343
int64_t set_count
Set commands processed.
Definition flecs.h:1383
double world_time_total
Time elapsed in simulation.
Definition flecs.h:1355
int32_t tag_id_count
Number of tag (no data) ids in the world.
Definition flecs.h:1370
int32_t component_id_count
Number of component (data) ids in the world.
Definition flecs.h:1371
int64_t pipeline_build_count_total
Total number of pipeline builds.
Definition flecs.h:1366
int32_t table_count
Number of tables.
Definition flecs.h:1374
float delta_time_raw
Raw delta time (no time scaling)
Definition flecs.h:1346
float frame_time_total
Total time spent processing a frame.
Definition flecs.h:1350
int64_t table_create_total
Total number of times a table was created.
Definition flecs.h:1364
int64_t observers_ran_frame
Total number of times observer was invoked.
Definition flecs.h:1368
float system_time_total
Total time spent in systems.
Definition flecs.h:1351
int64_t id_delete_total
Total number of times an id was deleted.
Definition flecs.h:1363
int64_t systems_ran_frame
Total number of systems ran in last frame.
Definition flecs.h:1367
float merge_time_total
Total time spent in merges.
Definition flecs.h:1353
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:1386
int64_t clear_count
Clear commands processed.
Definition flecs.h:1382
ecs_entity_t last_component_id
Last issued component entity id.
Definition flecs.h:1342
int32_t empty_table_count
Number of tables without entities.
Definition flecs.h:1375
int64_t frame_count_total
Total number of frames.
Definition flecs.h:1358
ecs_entity_t max_id
Last allowed entity id.
Definition flecs.h:1344
int64_t merge_count_total
Total number of merges.
Definition flecs.h:1359
int64_t other_count
Other commands processed.
Definition flecs.h:1388
int64_t batched_command_count
Commands batched.
Definition flecs.h:1390
int64_t table_delete_total
Total number of times a table was deleted.
Definition flecs.h:1365
int64_t delete_count
Selete commands processed.
Definition flecs.h:1381
int64_t rematch_count_total
Total number of rematches.
Definition flecs.h:1360
int64_t id_create_total
Total number of times a new id was created.
Definition flecs.h:1362
int64_t batched_entity_count
Entities for which commands were batched.
Definition flecs.h:1389
float time_scale
Time scale applied to delta_time.
Definition flecs.h:1348
int32_t pair_id_count
Number of pair ids in the world.
Definition flecs.h:1372
float rematch_time_total
Time spent on query rematching.
Definition flecs.h:1354
int64_t ensure_count
Ensure/emplace commands processed.
Definition flecs.h:1384
float target_fps
Target fps.
Definition flecs.h:1349
double world_time_total_raw
Time elapsed in simulation (no scaling)
Definition flecs.h:1356
float emit_time_total
Total time spent notifying observers.
Definition flecs.h:1352
int64_t modified_count
Modified commands processed.
Definition flecs.h:1385
const char * name_prefix
Value set by ecs_set_name_prefix().
Definition flecs.h:1393
int64_t event_count
Enqueued custom events.
Definition flecs.h:1387
int64_t add_count
Add commands processed.
Definition flecs.h:1379
int64_t remove_count
Remove commands processed.
Definition flecs.h:1380