6#ifdef FLECS_SCRIPT_ASYNC
20#ifndef FLECS_SCRIPT_ASYNC_H
21#define FLECS_SCRIPT_ASYNC_H
37typedef struct ecs_script_future_t ecs_script_future_t;
45typedef struct ecs_script_task_t ecs_script_task_t;
53typedef void(*ecs_async_function_callback_t)(
57 ecs_script_future_t *future);
64typedef void(*ecs_async_function_cancel_t)(
66 ecs_script_future_t *future);
85typedef struct EcsScriptTask {
90typedef enum ecs_script_task_status_t {
94 EcsScriptTaskCancelled
95} ecs_script_task_status_t;
98typedef enum ecs_script_future_status_t {
99 EcsScriptFuturePending,
100 EcsScriptFutureResolved,
101 EcsScriptFutureRejected,
102 EcsScriptFutureCancelled
103} ecs_script_future_status_t;
106typedef enum ecs_script_task_loop_t {
107 EcsScriptTaskLoopOnce,
108 EcsScriptTaskLoopCount,
109 EcsScriptTaskLoopForever
110} ecs_script_task_loop_t;
113typedef struct ecs_script_task_desc_t {
121 ecs_script_task_loop_t loop;
124} ecs_script_task_desc_t;
140ecs_script_task_t* ecs_script_task_new(
142 const ecs_script_task_desc_t *desc);
165ecs_script_task_status_t ecs_script_task_resume(
166 ecs_script_task_t *task,
180bool ecs_script_task_is_ready(
181 const ecs_script_task_t *task);
192void ecs_script_task_cancel(
193 ecs_script_task_t *task);
202void ecs_script_task_free(
203 ecs_script_task_t *task);
225int32_t ecs_script_tasks_progress(
242int ecs_script_future_resolve(
243 ecs_script_future_t *future,
259int ecs_script_future_reject(
260 ecs_script_future_t *future,
292int ecs_script_future_reject_id(
293 ecs_script_future_t *future,
309ecs_script_future_status_t ecs_script_future_status(
310 const ecs_script_future_t *future);
323 const ecs_script_future_t *future);
335const char* ecs_script_future_get_error(
336 const ecs_script_future_t *future);
350 const ecs_script_future_t *future);
364void ecs_script_future_cancel(
365 ecs_script_future_t *future);
383ecs_script_future_t* ecs_script_future_retain(
384 ecs_script_future_t *future);
395void ecs_script_future_release(
396 ecs_script_future_t *future);
410void ecs_script_future_set_ctx(
411 ecs_script_future_t *future,
422void* ecs_script_future_get_ctx(
423 const ecs_script_future_t *future);
426typedef struct ecs_async_function_desc_t {
441 ecs_async_function_callback_t callback;
445 ecs_async_function_cancel_t cancel;
449} ecs_async_function_desc_t;
467 const ecs_async_function_desc_t *desc);
469#define ecs_async_function(world, ...)\
470 ecs_async_function_init(world, &(ecs_async_function_desc_t)__VA_ARGS__)
483 const ecs_async_function_desc_t *desc);
485#define ecs_async_method(world, ...)\
486 ecs_async_method_init(world, &(ecs_async_function_desc_t)__VA_ARGS__)
508ecs_script_future_t* ecs_async_function_call(
struct ecs_script_parameter_t ecs_script_parameter_t
Function argument type.
ecs_id_t ecs_entity_t
An entity identifier.
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.
script_builder script(const char *name=nullptr) const
Build a script.
#define ECS_COMPONENT_DECLARE(id)
Forward declare a component.
void(*) ecs_ctx_free_t(void *ctx)
Function to clean up context data.
Used to capture error output from script evaluation.
flecs::entity entity(Args &&... args) const
Create an entity.