Flecs v4.1
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
system.h
Go to the documentation of this file.
1
10#ifdef FLECS_SYSTEM
11
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
36
103
105FLECS_API
107 ecs_world_t *world,
108 const ecs_system_desc_t *desc);
109
165
174FLECS_API
176 const ecs_world_t *world,
177 ecs_entity_t system);
178
179#ifndef FLECS_LEGACY
180
182#define ECS_SYSTEM_DECLARE(id) ecs_entity_t ecs_id(id)
183
192#define ECS_SYSTEM_DEFINE(world, id_, phase_, ...) \
193 { \
194 ecs_system_desc_t desc = {0}; \
195 ecs_entity_desc_t edesc = {0}; \
196 edesc.id = ecs_id(id_);\
197 edesc.name = #id_;\
198 desc.entity = ecs_entity_init(world, &edesc);\
199 desc.query.expr = #__VA_ARGS__; \
200 desc.phase = phase_; \
201 desc.callback = id_; \
202 ecs_id(id_) = ecs_system_init(world, &desc); \
203 } \
204 ecs_assert(ecs_id(id_) != 0, ECS_INVALID_PARAMETER, "failed to create system %s", #id_)
205
214#define ECS_SYSTEM(world, id, phase, ...) \
215 ecs_entity_t ecs_id(id) = 0; ECS_SYSTEM_DEFINE(world, id, phase, __VA_ARGS__);\
216 ecs_entity_t id = ecs_id(id);\
217 (void)ecs_id(id);\
218 (void)id
219
238#define ecs_system(world, ...)\
239 ecs_system_init(world, &(ecs_system_desc_t) __VA_ARGS__ )
240
241#endif
242
270FLECS_API
272 ecs_world_t *world,
273 ecs_entity_t system,
274 ecs_ftime_t delta_time,
275 void *param);
276
287FLECS_API
289 ecs_world_t *world,
290 ecs_entity_t system,
291 int32_t stage_current,
292 int32_t stage_count,
293 ecs_ftime_t delta_time,
294 void *param);
295
304FLECS_API
306 ecs_world_t *world);
307
308#ifdef __cplusplus
309}
310#endif
311
312#endif
313
316#endif
struct EcsTickSource EcsTickSource
Component used to provide a tick source to systems.
FLECS_API const ecs_system_t * ecs_system_get(const ecs_world_t *world, ecs_entity_t system)
Get system object.
FLECS_API void FlecsSystemImport(ecs_world_t *world)
System module import function.
struct ecs_system_desc_t ecs_system_desc_t
Use with ecs_system_init() to create or update a system.
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.
FLECS_API ecs_entity_t ecs_system_init(ecs_world_t *world, const ecs_system_desc_t *desc)
Create a system.
struct ecs_system_t ecs_system_t
System type, get with ecs_system_get()
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_id_t ecs_entity_t
An entity identifier.
Definition flecs.h:381
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
Definition flecs.h:425
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:576
void(* flecs_poly_dtor_t)(ecs_poly_t *poly)
Destructor function for poly objects.
Definition flecs.h:690
void(* ecs_run_action_t)(ecs_iter_t *it)
Function prototype for runnables (systems, observers).
Definition flecs.h:567
void(* ecs_ctx_free_t)(void *ctx)
Function to cleanup context data.
Definition flecs.h:645
#define ecs_ftime_t
Customizable precision for scalar time values.
Definition flecs.h:59
Component used to provide a tick source to systems.
Definition system.h:32
ecs_ftime_t time_elapsed
Time elapsed since last tick.
Definition system.h:34
bool tick
True if providing tick.
Definition system.h:33
Header for ecs_poly_t objects.
Definition flecs.h:520
Used with ecs_query_init().
Definition flecs.h:1271
Queries are lists of constraints (terms) that match entities.
Definition flecs.h:833
Use with ecs_system_init() to create or update a system.
Definition system.h:38
int32_t rate
Rate at which the system should run.
Definition system.h:91
void * ctx
Context to be passed to callback (as ecs_iter_t::param)
Definition system.h:70
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition system.h:85
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition system.h:73
ecs_entity_t phase
Optional pipeline phase for the system to run in.
Definition system.h:49
bool multi_threaded
If true, system will be ran on multiple threads.
Definition system.h:97
bool immediate
If true, system will have access to the actual world.
Definition system.h:101
void * callback_ctx
Context associated with callback (for language bindings).
Definition system.h:76
void * run_ctx
Context associated with run (for language bindings).
Definition system.h:82
ecs_ftime_t interval
Interval in seconds at which the system should run.
Definition system.h:88
ecs_iter_action_t callback
Callback that is ran for each result returned by the system's query.
Definition system.h:54
ecs_entity_t entity
Existing entity to associate with system (optional)
Definition system.h:42
ecs_query_desc_t query
System query parameters.
Definition system.h:45
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition system.h:79
ecs_run_action_t run
Callback that is invoked when a system is ran.
Definition system.h:67
ecs_entity_t tick_source
External tick source that determines when system ticks.
Definition system.h:94
System type, get with ecs_system_get()
Definition system.h:111
ecs_iter_action_t action
See ecs_system_desc_t.
Definition system.h:118
ecs_query_t * query
System query.
Definition system.h:121
ecs_ctx_free_t ctx_free
Callback to free ctx.
Definition system.h:145
void * run_ctx
Run language binding context.
Definition system.h:142
ecs_run_action_t run
See ecs_system_desc_t.
Definition system.h:115
ecs_ftime_t time_passed
Time passed since last invocation.
Definition system.h:157
int64_t last_frame
Last frame for which the system was considered.
Definition system.h:160
ecs_ftime_t time_spent
Time spent on running system.
Definition system.h:154
const char * name
Cached system name (for perf tracing)
Definition system.h:133
ecs_ctx_free_t run_ctx_free
Callback to free run ctx.
Definition system.h:151
bool immediate
Is system ran in immediate mode.
Definition system.h:130
bool multi_threaded
Is system multithreaded.
Definition system.h:127
void * ctx
Userdata for system.
Definition system.h:136
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition system.h:148
ecs_entity_t tick_source
Tick source associated with system.
Definition system.h:124
void * callback_ctx
Callback language binding context.
Definition system.h:139