From 3d0eea353671b425f9c94f81ad538f9e2c9e5c95 Mon Sep 17 00:00:00 2001 From: Kelwan Date: Mon, 16 Sep 2024 15:07:33 -0700 Subject: [PATCH 01/11] feat: API for streaming components --- ecsact/runtime/async.h | 15 +++++++++++++- ecsact/runtime/common.h | 43 +++++++++++++++++++++++++++++++++++++++- ecsact/runtime/core.h | 14 +++++++++++++ ecsact/runtime/dynamic.h | 6 ++++++ ecsact/runtime/meta.h | 11 +++++++++- 5 files changed, 86 insertions(+), 3 deletions(-) diff --git a/ecsact/runtime/async.h b/ecsact/runtime/async.h index 210a549f..003f60d7 100644 --- a/ecsact/runtime/async.h +++ b/ecsact/runtime/async.h @@ -205,12 +205,25 @@ ECSACT_ASYNC_API_FN(void, ecsact_async_disconnect)(void); */ ECSACT_ASYNC_API_FN(int32_t, ecsact_async_get_current_tick)(void); +/** + * Sends Ecsact stream data to the specified registry. Stream data will be + * applied on the next ecsact_execute_systems call. + */ +ECSACT_CORE_API_FN(ecsact_async_request_id, ecsact_async_stream) +( // + int32_t count, + const ecsact_entity_id* entities, + const ecsact_component_id* component_ids, + const void* components_data +); + #define FOR_EACH_ECSACT_ASYNC_API_FN(fn, ...) \ fn(ecsact_async_enqueue_execution_options, __VA_ARGS__); \ fn(ecsact_async_flush_events, __VA_ARGS__); \ fn(ecsact_async_connect, __VA_ARGS__); \ fn(ecsact_async_disconnect, __VA_ARGS__); \ - fn(ecsact_async_get_current_tick, __VA_ARGS__); + fn(ecsact_async_get_current_tick, __VA_ARGS__); \ + fn(ecsact_async_stream, __VA_ARGS__) #undef ECSACT_ASYNC_API #undef ECSACT_ASYNC_API_FN diff --git a/ecsact/runtime/common.h b/ecsact/runtime/common.h index 44521d5f..1dc4d349 100644 --- a/ecsact/runtime/common.h +++ b/ecsact/runtime/common.h @@ -274,6 +274,15 @@ typedef enum { ECSACT_EXEC_SYS_ERR_ACTION_ENTITY_CONSTRAINT_BROKEN = 2, } ecsact_execute_systems_error; +typedef enum { + ECSACT_STREAM_OK = 0, + + /** + * An invalid or non-stream component ID was passed into the stream. + */ + ECSACT_STREAM_INVALID_COMPONENT_ID = 1, +} ecsact_stream_error; + typedef enum { /** * System has no capabilities for this component. @@ -287,7 +296,8 @@ typedef enum { /** * System may only write to component. - * NOTE: This flag is only valid if accompanied by `ECSACT_SYS_CAP_READONLY`. + * NOTE: This flag is only valid if accompanied by + * `ECSACT_SYS_CAP_READONLY`. */ ECSACT_SYS_CAP_WRITEONLY = 2, @@ -342,6 +352,11 @@ typedef enum { * `ECSACT_SYS_CAP_INCLUDE` */ ECSACT_SYS_CAP_REMOVES = 64 | ECSACT_SYS_CAP_INCLUDE, + + /** + * System may enable or disable streaming data for this component. + */ + ECSACT_SYS_CAP_STREAM_TOGGLE = 128, } ecsact_system_capability; /** @@ -661,6 +676,32 @@ typedef enum { ECSACT_EVENT_DESTROY_ENTITY = 4, } ecsact_event; +typedef enum ecsact_component_type { + /** + * The component has no unique type + */ + ECSACT_COMPONENT_TYPE_NONE = 0, + + /* + * The component takes in a continuous feed of data. Look at stream toggle to + * see how you can set the component to receive updates from either + * ecsact_stream or systems. + */ + ECSACT_COMPONENT_TYPE_STREAM = 1, + + /* + * The component is a stream component (@see ECSACT_COMPONENT_TYPE_STREAM) but + * may be updated overtime instead of all at once. + */ + ECSACT_COMPONENT_TYPE_LAZY_STREAM = 2, + + /** + * The component only lives during system execution and is automatically + * removed. + */ + ECSACT_COMPONENT_TYPE_TRANSIENT = 3 +} ecsact_component_stream; + /** * Component event callback */ diff --git a/ecsact/runtime/core.h b/ecsact/runtime/core.h index 9666e010..9166b660 100644 --- a/ecsact/runtime/core.h +++ b/ecsact/runtime/core.h @@ -264,6 +264,19 @@ ECSACT_CORE_API_FN(ecsact_ees, ecsact_get_entity_execution_status) ecsact_system_like_id system_like_id ); +/** + * Sends Ecsact stream data to the specified registry. Stream data will be + * applied on the next ecsact_execute_systems call. + */ +ECSACT_CORE_API_FN(ecsact_stream_error, ecsact_stream) +( // + ecsact_registry_id registry_id, + int32_t count, + const ecsact_entity_id* entities, + const ecsact_component_id* component_ids, + const void* components_data +); + // # BEGIN FOR_EACH_ECSACT_CORE_API_FN #ifdef ECSACT_MSVC_TRADITIONAL # define FOR_EACH_ECSACT_CORE_API_FN(fn, ...) ECSACT_MSVC_TRADITIONAL_ERROR() @@ -287,6 +300,7 @@ ECSACT_CORE_API_FN(ecsact_ees, ecsact_get_entity_execution_status) fn(ecsact_update_component, __VA_ARGS__); \ fn(ecsact_remove_component, __VA_ARGS__); \ fn(ecsact_execute_systems, __VA_ARGS__); \ + fn(ecsact_stream, __VA_ARGS__); \ fn(ecsact_get_entity_execution_status, __VA_ARGS__) #endif diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index 04499d71..a05a9be9 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -515,6 +515,12 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_notify_component_setting) ecsact_system_notify_setting setting ); +ECSACT_DYNAMIC_API_FN(void, ecsact_set_component_type) +( // + ecsact_component_id comopnent_id, + ecsact_component_type component_type +); + // # BEGIN FOR_EACH_ECSACT_DYNAMIC_API_FN #ifdef ECSACT_MSVC_TRADITIONAL # define FOR_EACH_ECSACT_DYNAMIC_API_FN(fn, ...) \ diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index c5d5dc02..a4d6dc22 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -511,6 +511,14 @@ ECSACT_META_API_FN(void, ecsact_meta_system_notify_settings) int32_t* out_notifies_count ); +/** + * Check the type of a component. + */ +ECSACT_META_API_FN(ecsact_component_type, ecsact_meta_component_type) +( // + ecsact_component_id component_id +); + // # BEGIN FOR_EACH_ECSACT_META_API_FN #ifdef ECSACT_MSVC_TRADITIONAL # define FOR_EACH_ECSACT_META_API_FN(fn, ...) ECSACT_MSVC_TRADITIONAL_ERROR() @@ -575,7 +583,8 @@ ECSACT_META_API_FN(void, ecsact_meta_system_notify_settings) fn(ecsact_meta_get_lazy_iteration_rate, __VA_ARGS__); \ fn(ecsact_meta_get_system_parallel_execution, __VA_ARGS__); \ fn(ecsact_meta_system_notify_settings_count, __VA_ARGS__); \ - fn(ecsact_meta_system_notify_settings, __VA_ARGS__) + fn(ecsact_meta_system_notify_settings, __VA_ARGS__); \ + fn(ecsact_meta_component_stream, __VA_ARGS__) #endif #endif // ECSACT_RUNTIME_META_H From 4c88c6f09f24ecb031e9ee582f951f1712d93ce0 Mon Sep 17 00:00:00 2001 From: Kelwan Date: Mon, 16 Sep 2024 15:11:12 -0700 Subject: [PATCH 02/11] chore: typo --- ecsact/runtime/dynamic.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index a05a9be9..1e5691ee 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -515,9 +515,12 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_notify_component_setting) ecsact_system_notify_setting setting ); +/** + * Sets a components type + */ ECSACT_DYNAMIC_API_FN(void, ecsact_set_component_type) ( // - ecsact_component_id comopnent_id, + ecsact_component_id component_id, ecsact_component_type component_type ); @@ -576,7 +579,8 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_component_type) fn(ecsact_system_generates_unset_component, __VA_ARGS__); \ fn(ecsact_set_entity_execution_status, __VA_ARGS__); \ fn(ecsact_set_system_parallel_execution, __VA_ARGS__); \ - fn(ecsact_set_system_notify_component_setting, __VA_ARGS__) + fn(ecsact_set_system_notify_component_setting, __VA_ARGS__); \ + fn(ecsact_set_component_type, __VA_ARGS__); \ #endif #endif // ECSACT_RUNTIME_DYNAMIC_H From 8bf4f9ef73edea736c185b1411c187a4700b036c Mon Sep 17 00:00:00 2001 From: Kelwan Date: Mon, 16 Sep 2024 15:13:00 -0700 Subject: [PATCH 03/11] fix: small mistake --- ecsact/runtime/meta.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index a4d6dc22..cb0452b3 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -584,7 +584,7 @@ ECSACT_META_API_FN(ecsact_component_type, ecsact_meta_component_type) fn(ecsact_meta_get_system_parallel_execution, __VA_ARGS__); \ fn(ecsact_meta_system_notify_settings_count, __VA_ARGS__); \ fn(ecsact_meta_system_notify_settings, __VA_ARGS__); \ - fn(ecsact_meta_component_stream, __VA_ARGS__) + fn(ecsact_meta_component_type, __VA_ARGS__) #endif #endif // ECSACT_RUNTIME_META_H From 9339750aa32c3fc9c84c88a8fa448232bb01f5d9 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 15:21:03 -0700 Subject: [PATCH 04/11] fix: set component type --- ecsact/runtime/dynamic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index 1e5691ee..5c8b65c1 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -580,7 +580,7 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_component_type) fn(ecsact_set_entity_execution_status, __VA_ARGS__); \ fn(ecsact_set_system_parallel_execution, __VA_ARGS__); \ fn(ecsact_set_system_notify_component_setting, __VA_ARGS__); \ - fn(ecsact_set_component_type, __VA_ARGS__); \ + fn(ecsact_set_component_type, __VA_ARGS__) #endif #endif // ECSACT_RUNTIME_DYNAMIC_H From 87a814aa1ef658de30af68fb1d7c536004d4323d Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 16:17:42 -0700 Subject: [PATCH 05/11] feat: add new context fn for stream toggle --- ecsact/runtime/dynamic.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index 5c8b65c1..f784af08 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -135,6 +135,19 @@ ECSACT_DYNAMIC_API_FN(bool, ecsact_system_execution_context_has) ... ); +/** + * Enable or disable streaming data for the given component. + * @param ... if the component has indexed fields then those fields must be + * supplied to the variadic arguments in declaration order. + */ +ECSACT_DYNAMIC_API_FN(void, ecsact_system_execution_context_stream_toggle) +( // + struct ecsact_system_execution_context* context, + ecsact_component_id component_id, + bool streaming_enabled, + ... +); + /** * Generate a new entity with specified components. * From 48d081f5c10e85103259de763c481f811fff34fe Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 16:26:32 -0700 Subject: [PATCH 06/11] fix: use component like id for now --- ecsact/runtime/meta.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index cb0452b3..d6639988 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -516,7 +516,7 @@ ECSACT_META_API_FN(void, ecsact_meta_system_notify_settings) */ ECSACT_META_API_FN(ecsact_component_type, ecsact_meta_component_type) ( // - ecsact_component_id component_id + ecsact_component_like_id component_id ); // # BEGIN FOR_EACH_ECSACT_META_API_FN From c6c05f6140e6f682ff2f9f5dac80fa52bf6b9dea Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 17:29:12 -0700 Subject: [PATCH 07/11] fix: double pointer that thang --- ecsact/runtime/async.h | 2 +- ecsact/runtime/core.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ecsact/runtime/async.h b/ecsact/runtime/async.h index 003f60d7..2a324155 100644 --- a/ecsact/runtime/async.h +++ b/ecsact/runtime/async.h @@ -214,7 +214,7 @@ ECSACT_CORE_API_FN(ecsact_async_request_id, ecsact_async_stream) int32_t count, const ecsact_entity_id* entities, const ecsact_component_id* component_ids, - const void* components_data + const void** components_data ); #define FOR_EACH_ECSACT_ASYNC_API_FN(fn, ...) \ diff --git a/ecsact/runtime/core.h b/ecsact/runtime/core.h index 9166b660..e88ac008 100644 --- a/ecsact/runtime/core.h +++ b/ecsact/runtime/core.h @@ -274,7 +274,7 @@ ECSACT_CORE_API_FN(ecsact_stream_error, ecsact_stream) int32_t count, const ecsact_entity_id* entities, const ecsact_component_id* component_ids, - const void* components_data + const void** components_data ); // # BEGIN FOR_EACH_ECSACT_CORE_API_FN From cf9e3aed16c937440975f9ff1df43d61eca92fe3 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 17:48:30 -0700 Subject: [PATCH 08/11] feat: switched to single component for stream data --- ecsact/runtime/async.h | 10 ++++++---- ecsact/runtime/core.h | 15 +++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ecsact/runtime/async.h b/ecsact/runtime/async.h index 2a324155..2aed297c 100644 --- a/ecsact/runtime/async.h +++ b/ecsact/runtime/async.h @@ -208,13 +208,15 @@ ECSACT_ASYNC_API_FN(int32_t, ecsact_async_get_current_tick)(void); /** * Sends Ecsact stream data to the specified registry. Stream data will be * applied on the next ecsact_execute_systems call. + * + * @param ... if the component has indexed fields then those fields must be + * supplied to the variadic arguments in declaration order. */ ECSACT_CORE_API_FN(ecsact_async_request_id, ecsact_async_stream) ( // - int32_t count, - const ecsact_entity_id* entities, - const ecsact_component_id* component_ids, - const void** components_data + ecsact_entity_id entity, + ecsact_component_id component_id, + const void* component_data ); #define FOR_EACH_ECSACT_ASYNC_API_FN(fn, ...) \ diff --git a/ecsact/runtime/core.h b/ecsact/runtime/core.h index e88ac008..81fd5a2a 100644 --- a/ecsact/runtime/core.h +++ b/ecsact/runtime/core.h @@ -266,15 +266,18 @@ ECSACT_CORE_API_FN(ecsact_ees, ecsact_get_entity_execution_status) /** * Sends Ecsact stream data to the specified registry. Stream data will be - * applied on the next ecsact_execute_systems call. + * applied on the next ecsact_execute_systems call. The last set of stream data + * is always used. + * + * @param ... if the component has indexed fields then those fields must be + * supplied to the variadic arguments in declaration order. */ ECSACT_CORE_API_FN(ecsact_stream_error, ecsact_stream) ( // - ecsact_registry_id registry_id, - int32_t count, - const ecsact_entity_id* entities, - const ecsact_component_id* component_ids, - const void** components_data + ecsact_registry_id registry_id, + ecsact_entity_id entity, + ecsact_component_id component_id, + const void* component_data ); // # BEGIN FOR_EACH_ECSACT_CORE_API_FN From 1808bf04d75e21c4b0e8d049d4455191cb639617 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 16 Sep 2024 17:50:32 -0700 Subject: [PATCH 09/11] fix: add missing index field params --- ecsact/runtime/async.h | 3 ++- ecsact/runtime/core.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ecsact/runtime/async.h b/ecsact/runtime/async.h index 2aed297c..9dc72452 100644 --- a/ecsact/runtime/async.h +++ b/ecsact/runtime/async.h @@ -216,7 +216,8 @@ ECSACT_CORE_API_FN(ecsact_async_request_id, ecsact_async_stream) ( // ecsact_entity_id entity, ecsact_component_id component_id, - const void* component_data + const void* component_data, + ... ); #define FOR_EACH_ECSACT_ASYNC_API_FN(fn, ...) \ diff --git a/ecsact/runtime/core.h b/ecsact/runtime/core.h index 81fd5a2a..c8a1614c 100644 --- a/ecsact/runtime/core.h +++ b/ecsact/runtime/core.h @@ -277,7 +277,8 @@ ECSACT_CORE_API_FN(ecsact_stream_error, ecsact_stream) ecsact_registry_id registry_id, ecsact_entity_id entity, ecsact_component_id component_id, - const void* component_data + const void* component_data, + ... ); // # BEGIN FOR_EACH_ECSACT_CORE_API_FN From 2d822febac174c5557bd6e88117a955886064a73 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 14 Oct 2024 11:49:28 -0700 Subject: [PATCH 10/11] fix: wrong order --- ecsact/runtime/core.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/ecsact/runtime/core.h b/ecsact/runtime/core.h index c8a1614c..af4a05d1 100644 --- a/ecsact/runtime/core.h +++ b/ecsact/runtime/core.h @@ -285,27 +285,27 @@ ECSACT_CORE_API_FN(ecsact_stream_error, ecsact_stream) #ifdef ECSACT_MSVC_TRADITIONAL # define FOR_EACH_ECSACT_CORE_API_FN(fn, ...) ECSACT_MSVC_TRADITIONAL_ERROR() #else -# define FOR_EACH_ECSACT_CORE_API_FN(fn, ...) \ - fn(ecsact_create_registry, __VA_ARGS__); \ - fn(ecsact_destroy_registry, __VA_ARGS__); \ - fn(ecsact_clear_registry, __VA_ARGS__); \ - fn(ecsact_create_entity, __VA_ARGS__); \ - fn(ecsact_ensure_entity, __VA_ARGS__); \ - fn(ecsact_entity_exists, __VA_ARGS__); \ - fn(ecsact_destroy_entity, __VA_ARGS__); \ - fn(ecsact_count_entities, __VA_ARGS__); \ - fn(ecsact_get_entities, __VA_ARGS__); \ - fn(ecsact_add_component, __VA_ARGS__); \ - fn(ecsact_has_component, __VA_ARGS__); \ - fn(ecsact_get_component, __VA_ARGS__); \ - fn(ecsact_count_components, __VA_ARGS__); \ - fn(ecsact_get_components, __VA_ARGS__); \ - fn(ecsact_each_component, __VA_ARGS__); \ - fn(ecsact_update_component, __VA_ARGS__); \ - fn(ecsact_remove_component, __VA_ARGS__); \ - fn(ecsact_execute_systems, __VA_ARGS__); \ - fn(ecsact_stream, __VA_ARGS__); \ - fn(ecsact_get_entity_execution_status, __VA_ARGS__) +# define FOR_EACH_ECSACT_CORE_API_FN(fn, ...) \ + fn(ecsact_create_registry, __VA_ARGS__); \ + fn(ecsact_destroy_registry, __VA_ARGS__); \ + fn(ecsact_clear_registry, __VA_ARGS__); \ + fn(ecsact_create_entity, __VA_ARGS__); \ + fn(ecsact_ensure_entity, __VA_ARGS__); \ + fn(ecsact_entity_exists, __VA_ARGS__); \ + fn(ecsact_destroy_entity, __VA_ARGS__); \ + fn(ecsact_count_entities, __VA_ARGS__); \ + fn(ecsact_get_entities, __VA_ARGS__); \ + fn(ecsact_add_component, __VA_ARGS__); \ + fn(ecsact_has_component, __VA_ARGS__); \ + fn(ecsact_get_component, __VA_ARGS__); \ + fn(ecsact_count_components, __VA_ARGS__); \ + fn(ecsact_get_components, __VA_ARGS__); \ + fn(ecsact_each_component, __VA_ARGS__); \ + fn(ecsact_update_component, __VA_ARGS__); \ + fn(ecsact_remove_component, __VA_ARGS__); \ + fn(ecsact_execute_systems, __VA_ARGS__); \ + fn(ecsact_get_entity_execution_status, __VA_ARGS__); \ + fn(ecsact_stream, __VA_ARGS__) #endif #endif // ECSACT_RUNTIME_CORE_H From 64b4587acf52e2613242fe01c623e63cf2f67a10 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Mon, 14 Oct 2024 12:06:25 -0700 Subject: [PATCH 11/11] fix: add missing method --- ecsact/runtime/dynamic.h | 103 ++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index f784af08..a3aabae9 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -542,57 +542,58 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_component_type) # define FOR_EACH_ECSACT_DYNAMIC_API_FN(fn, ...) \ ECSACT_MSVC_TRADITIONAL_ERROR() #else -# define FOR_EACH_ECSACT_DYNAMIC_API_FN(fn, ...) \ - fn(ecsact_system_execution_context_action, __VA_ARGS__); \ - fn(ecsact_system_execution_context_add, __VA_ARGS__); \ - fn(ecsact_system_execution_context_remove, __VA_ARGS__); \ - fn(ecsact_system_execution_context_get, __VA_ARGS__); \ - fn(ecsact_system_execution_context_update, __VA_ARGS__); \ - fn(ecsact_system_execution_context_has, __VA_ARGS__); \ - fn(ecsact_system_execution_context_generate, __VA_ARGS__); \ - fn(ecsact_system_execution_context_parent, __VA_ARGS__); \ - fn(ecsact_system_execution_context_same, __VA_ARGS__); \ - fn(ecsact_system_execution_context_other, __VA_ARGS__); \ - fn(ecsact_system_execution_context_entity, __VA_ARGS__); \ - fn(ecsact_system_execution_context_id, __VA_ARGS__); \ - fn(ecsact_create_package, __VA_ARGS__); \ - fn(ecsact_set_package_source_file_path, __VA_ARGS__); \ - fn(ecsact_add_dependency, __VA_ARGS__); \ - fn(ecsact_remove_dependency, __VA_ARGS__); \ - fn(ecsact_destroy_package, __VA_ARGS__); \ - fn(ecsact_create_system, __VA_ARGS__); \ - fn(ecsact_set_system_lazy_iteration_rate, __VA_ARGS__); \ - fn(ecsact_add_child_system, __VA_ARGS__); \ - fn(ecsact_remove_child_system, __VA_ARGS__); \ - fn(ecsact_reorder_system, __VA_ARGS__); \ - fn(ecsact_set_system_execution_impl, __VA_ARGS__); \ - fn(ecsact_create_action, __VA_ARGS__); \ - fn(ecsact_create_component, __VA_ARGS__); \ - fn(ecsact_create_transient, __VA_ARGS__); \ - fn(ecsact_add_field, __VA_ARGS__); \ - fn(ecsact_remove_field, __VA_ARGS__); \ - fn(ecsact_destroy_component, __VA_ARGS__); \ - fn(ecsact_destroy_transient, __VA_ARGS__); \ - fn(ecsact_create_enum, __VA_ARGS__); \ - fn(ecsact_destroy_enum, __VA_ARGS__); \ - fn(ecsact_add_enum_value, __VA_ARGS__); \ - fn(ecsact_remove_enum_value, __VA_ARGS__); \ - fn(ecsact_set_system_capability, __VA_ARGS__); \ - fn(ecsact_unset_system_capability, __VA_ARGS__); \ - fn(ecsact_add_system_assoc, __VA_ARGS__); \ - fn(ecsact_remove_system_assoc, __VA_ARGS__); \ - fn(ecsact_add_system_assoc_field, __VA_ARGS__); \ - fn(ecsact_remove_system_assoc_field, __VA_ARGS__); \ - fn(ecsact_set_system_assoc_capability, __VA_ARGS__); \ - fn(ecsact_set_system_association_capability, __VA_ARGS__); \ - fn(ecsact_unset_system_association_capability, __VA_ARGS__); \ - fn(ecsact_add_system_generates, __VA_ARGS__); \ - fn(ecsact_remove_system_generates, __VA_ARGS__); \ - fn(ecsact_system_generates_set_component, __VA_ARGS__); \ - fn(ecsact_system_generates_unset_component, __VA_ARGS__); \ - fn(ecsact_set_entity_execution_status, __VA_ARGS__); \ - fn(ecsact_set_system_parallel_execution, __VA_ARGS__); \ - fn(ecsact_set_system_notify_component_setting, __VA_ARGS__); \ +# define FOR_EACH_ECSACT_DYNAMIC_API_FN(fn, ...) \ + fn(ecsact_system_execution_context_action, __VA_ARGS__); \ + fn(ecsact_system_execution_context_add, __VA_ARGS__); \ + fn(ecsact_system_execution_context_remove, __VA_ARGS__); \ + fn(ecsact_system_execution_context_get, __VA_ARGS__); \ + fn(ecsact_system_execution_context_update, __VA_ARGS__); \ + fn(ecsact_system_execution_context_has, __VA_ARGS__); \ + fn(ecsact_system_execution_context_stream_toggle, __VA_ARGS__); \ + fn(ecsact_system_execution_context_generate, __VA_ARGS__); \ + fn(ecsact_system_execution_context_parent, __VA_ARGS__); \ + fn(ecsact_system_execution_context_same, __VA_ARGS__); \ + fn(ecsact_system_execution_context_other, __VA_ARGS__); \ + fn(ecsact_system_execution_context_entity, __VA_ARGS__); \ + fn(ecsact_system_execution_context_id, __VA_ARGS__); \ + fn(ecsact_create_package, __VA_ARGS__); \ + fn(ecsact_set_package_source_file_path, __VA_ARGS__); \ + fn(ecsact_add_dependency, __VA_ARGS__); \ + fn(ecsact_remove_dependency, __VA_ARGS__); \ + fn(ecsact_destroy_package, __VA_ARGS__); \ + fn(ecsact_create_system, __VA_ARGS__); \ + fn(ecsact_set_system_lazy_iteration_rate, __VA_ARGS__); \ + fn(ecsact_add_child_system, __VA_ARGS__); \ + fn(ecsact_remove_child_system, __VA_ARGS__); \ + fn(ecsact_reorder_system, __VA_ARGS__); \ + fn(ecsact_set_system_execution_impl, __VA_ARGS__); \ + fn(ecsact_create_action, __VA_ARGS__); \ + fn(ecsact_create_component, __VA_ARGS__); \ + fn(ecsact_create_transient, __VA_ARGS__); \ + fn(ecsact_add_field, __VA_ARGS__); \ + fn(ecsact_remove_field, __VA_ARGS__); \ + fn(ecsact_destroy_component, __VA_ARGS__); \ + fn(ecsact_destroy_transient, __VA_ARGS__); \ + fn(ecsact_create_enum, __VA_ARGS__); \ + fn(ecsact_destroy_enum, __VA_ARGS__); \ + fn(ecsact_add_enum_value, __VA_ARGS__); \ + fn(ecsact_remove_enum_value, __VA_ARGS__); \ + fn(ecsact_set_system_capability, __VA_ARGS__); \ + fn(ecsact_unset_system_capability, __VA_ARGS__); \ + fn(ecsact_add_system_assoc, __VA_ARGS__); \ + fn(ecsact_remove_system_assoc, __VA_ARGS__); \ + fn(ecsact_add_system_assoc_field, __VA_ARGS__); \ + fn(ecsact_remove_system_assoc_field, __VA_ARGS__); \ + fn(ecsact_set_system_assoc_capability, __VA_ARGS__); \ + fn(ecsact_set_system_association_capability, __VA_ARGS__); \ + fn(ecsact_unset_system_association_capability, __VA_ARGS__); \ + fn(ecsact_add_system_generates, __VA_ARGS__); \ + fn(ecsact_remove_system_generates, __VA_ARGS__); \ + fn(ecsact_system_generates_set_component, __VA_ARGS__); \ + fn(ecsact_system_generates_unset_component, __VA_ARGS__); \ + fn(ecsact_set_entity_execution_status, __VA_ARGS__); \ + fn(ecsact_set_system_parallel_execution, __VA_ARGS__); \ + fn(ecsact_set_system_notify_component_setting, __VA_ARGS__); \ fn(ecsact_set_component_type, __VA_ARGS__) #endif