Flecs: include/flecs/addons/system.h Source File
Description: A fast entity component system (ECS) for C & C++

| Flecs v4.0 A fast entity component system (ECS) for C & C++

Loading...
Searching...
No Matches
system.h
Go to the documentation of this file.
1
9
10#ifdef FLECS_SYSTEM
11
19
20#ifndef FLECS_MODULE
21#define FLECS_MODULE
22#endif
23
24#ifndef FLECS_SYSTEM_H
25#define FLECS_SYSTEM_H
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
32 typedef struct EcsTickSource {
33 bool tick;
34 ecs_ftime_t time_elapsed;
35} EcsTickSource;
36
38 typedef struct ecs_system_desc_t {
39 int32_t _canary;
40
42 ecs_entity_t entity;
43
45 ecs_query_desc_t query;
46
50 ecs_iter_action_t callback;
51
63 ecs_run_action_t run;
64
66 void *ctx;
67
69 ecs_ctx_free_t ctx_free;
70
72 void *callback_ctx;
73
75 ecs_ctx_free_t callback_ctx_free;
76
78 void *run_ctx;
79
81 ecs_ctx_free_t run_ctx_free;
82
84 ecs_ftime_t interval;
85
87 int32_t rate;
88
90 ecs_entity_t tick_source;
91
93 bool multi_threaded;
94
97 bool immediate;
98} ecs_system_desc_t;
99
101FLECS_API
102 ecs_entity_t ecs_system_init(
103 ecs_world_t *world,
104 const ecs_system_desc_t *desc);
105
107 typedef struct ecs_system_t {
108 ecs_header_t hdr;
109
111 ecs_run_action_t run;
112
114 ecs_iter_action_t action;
115
117 ecs_query_t *query;
118
120 ecs_entity_t query_entity;
121
123 ecs_entity_t tick_source;
124
126 bool multi_threaded;
127
129 bool immediate;
130
132 const char *name;
133
135 void *ctx;
136
138 void *callback_ctx;
139
141 void *run_ctx;
142
144 ecs_ctx_free_t ctx_free;
145
147 ecs_ctx_free_t callback_ctx_free;
148
150 ecs_ctx_free_t run_ctx_free;
151
153 ecs_ftime_t time_spent;
154
156 ecs_ftime_t time_passed;
157
159 int64_t last_frame;
160
161 /* Mixins */
162 ecs_world_t *world;
163 ecs_entity_t entity;
164 flecs_poly_dtor_t dtor;
165} ecs_system_t;
166
175FLECS_API
176 const ecs_system_t* ecs_system_get(
177 const ecs_world_t *world,
178 ecs_entity_t system);
179
180#ifndef FLECS_LEGACY
181
183#define ECS_SYSTEM_DECLARE(id) ecs_entity_t ecs_id(id)
184
193#define ECS_SYSTEM_DEFINE(world, id_, phase, ...) \
194 { \
195 ecs_system_desc_t desc = {0}; \
196 ecs_entity_desc_t edesc = {0}; \
197 ecs_id_t add_ids[3] = {\
198 ((phase) ? ecs_pair(EcsDependsOn, (phase)) : 0), \
199 (phase), \
200 0 \
201 };\
202 edesc.id = ecs_id(id_);\
203 edesc.name = #id_;\
204 edesc.add = add_ids;\
205 desc.entity = ecs_entity_init(world, &edesc);\
206 desc.query.expr = #__VA_ARGS__; \
207 desc.callback = id_; \
208 ecs_id(id_) = ecs_system_init(world, &desc); \
209 } \
210 ecs_assert(ecs_id(id_) != 0, ECS_INVALID_PARAMETER, "failed to create system %s", #id_)
211
220#define ECS_SYSTEM(world, id, phase, ...) \
221 ecs_entity_t ecs_id(id) = 0; ECS_SYSTEM_DEFINE(world, id, phase, __VA_ARGS__);\
222 ecs_entity_t id = ecs_id(id);\
223 (void)ecs_id(id);\
224 (void)id
225
244#define ecs_system(world, ...)\
245 ecs_system_init(world, &(ecs_system_desc_t) __VA_ARGS__ )
246
247#endif
248
276FLECS_API
277 ecs_entity_t ecs_run(
278 ecs_world_t *world,
279 ecs_entity_t system,
280 ecs_ftime_t delta_time,
281 void *param);
282
293FLECS_API
294 ecs_entity_t ecs_run_worker(
295 ecs_world_t *world,
296 ecs_entity_t system,
297 int32_t stage_current,
298 int32_t stage_count,
299 ecs_ftime_t delta_time,
300 void *param);
301
310FLECS_API
311 void FlecsSystemImport(
312 ecs_world_t *world);
313
314#ifdef __cplusplus
315}
316#endif
317
318#endif
319
321
322#endif
ecs_system_get
FLECS_API const ecs_system_t * ecs_system_get(const ecs_world_t *world, ecs_entity_t system)
Get system object.
FlecsSystemImport
FLECS_API void FlecsSystemImport(ecs_world_t *world)
System module import function.
ecs_run
FLECS_API ecs_entity_t ecs_run(ecs_world_t *world, ecs_entity_t system, ecs_ftime_t delta_time, void *param)
Run a specific system manually.
ecs_system_init
FLECS_API ecs_entity_t ecs_system_init(ecs_world_t *world, const ecs_system_desc_t *desc)
Create a system.
ecs_run_worker
FLECS_API ecs_entity_t ecs_run_worker(ecs_world_t *world, ecs_entity_t system, int32_t stage_current, int32_t stage_count, ecs_ftime_t delta_time, void *param)
Same as ecs_run(), but subdivides entities across number of provided stages.
ecs_entity_t
ecs_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:346
ecs_world_t
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:390
ecs_iter_action_t
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:545
flecs_poly_dtor_t
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
Definition flecs.h:647
ecs_run_action_t
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
Definition flecs.h:536
ecs_ctx_free_t
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:614
ecs_ftime_t
#define ecs_ftime_t
Customizable precision for scalar time values.
Definition flecs.h:59
EcsTickSource
Component used to provide a tick source to systems.
Definition system.h:32
EcsTickSource::time_elapsed
ecs_ftime_t time_elapsed
Time elapsed since last tick.
Definition system.h:34
EcsTickSource::tick
bool tick
True if providing tick.
Definition system.h:33
ecs_header_t
Header for ecs_poly_t objects.
Definition flecs.h:485
ecs_query_desc_t
Used with ecs_query_init().
Definition flecs.h:1199
ecs_query_t
Queries are lists of constraints (terms) that match entities.
Definition flecs.h:790
ecs_system_desc_t
Use with ecs_system_init() to create or update a system.
Definition system.h:38
ecs_system_desc_t::rate
int32_t rate
Rate at which the system should run.
Definition system.h:87
ecs_system_desc_t::ctx
void * ctx
Context to be passed to callback (as ecs_iter_t::param)
Definition system.h:66
ecs_system_desc_t::run_ctx_free
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition system.h:81
ecs_system_desc_t::ctx_free
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition system.h:69
ecs_system_desc_t::multi_threaded
bool multi_threaded
If true, system will be ran on multiple threads.
Definition system.h:93
ecs_system_desc_t::immediate
bool immediate
If true, system will have access to the actual world.
Definition system.h:97
ecs_system_desc_t::callback_ctx
void * callback_ctx
Context associated with callback (for language bindings).
Definition system.h:72
ecs_system_desc_t::run_ctx
void * run_ctx
Context associated with run (for language bindings).
Definition system.h:78
ecs_system_desc_t::interval
ecs_ftime_t interval
Interval in seconds at which the system should run.
Definition system.h:84
ecs_system_desc_t::callback
ecs_iter_action_t callback
Callback that is ran for each result returned by the system's query.
Definition system.h:50
ecs_system_desc_t::entity
ecs_entity_t entity
Existing entity to associate with system (optional)
Definition system.h:42
ecs_system_desc_t::query
ecs_query_desc_t query
System query parameters.
Definition system.h:45
ecs_system_desc_t::callback_ctx_free
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition system.h:75
ecs_system_desc_t::run
ecs_run_action_t run
Callback that is invoked when a system is ran.
Definition system.h:63
ecs_system_desc_t::tick_source
ecs_entity_t tick_source
External tick source that determines when system ticks.
Definition system.h:90
ecs_system_t
System type, get with ecs_system_get()
Definition system.h:107
ecs_system_t::action
ecs_iter_action_t action
See ecs_system_desc_t.
Definition system.h:114
ecs_system_t::query
ecs_query_t * query
System query.
Definition system.h:117
ecs_system_t::ctx_free
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition system.h:144
ecs_system_t::run_ctx
void * run_ctx
Run language binding context.
Definition system.h:141
ecs_system_t::run
ecs_run_action_t run
See ecs_system_desc_t.
Definition system.h:111
ecs_system_t::time_passed
ecs_ftime_t time_passed
Time passed since last invocation.
Definition system.h:156
ecs_system_t::last_frame
int64_t last_frame
Last frame for which the system was considered.
Definition system.h:159
ecs_system_t::time_spent
ecs_ftime_t time_spent
Time spent on running system.
Definition system.h:153
ecs_system_t::name
const char * name
Cached system name (for perf tracing)
Definition system.h:132
ecs_system_t::run_ctx_free
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition system.h:150
ecs_system_t::immediate
bool immediate
Is system ran in immediate mode.
Definition system.h:129
ecs_system_t::multi_threaded
bool multi_threaded
Is system multithreaded.
Definition system.h:126
ecs_system_t::ctx
void * ctx
Userdata for system.
Definition system.h:135
ecs_system_t::callback_ctx_free
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition system.h:147
ecs_system_t::query_entity
ecs_entity_t query_entity
Entity associated with query.
Definition system.h:120
ecs_system_t::tick_source
ecs_entity_t tick_source
Tick source associated with system.
Definition system.h:123
ecs_system_t::callback_ctx
void * callback_ctx
Callback language binding context.
Definition system.h:138