From 299887c82caf2f90732d36dc58a83397a3dc8071 Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Thu, 23 May 2024 15:51:12 -0700 Subject: [PATCH 1/3] feat: multi field association API --- ecsact/runtime/common.h | 12 +++++++++ ecsact/runtime/definitions.h | 7 ++++++ ecsact/runtime/dynamic.h | 39 +++++++++++++++++++++++++++++ ecsact/runtime/meta.h | 48 ++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+) diff --git a/ecsact/runtime/common.h b/ecsact/runtime/common.h index b4ddbdd8..adb24584 100644 --- a/ecsact/runtime/common.h +++ b/ecsact/runtime/common.h @@ -33,6 +33,12 @@ # define ECSACT_ALWAYS_INLINE inline __attribute__((always_inline)) #endif +#ifdef __cplusplus +# define ECSACT_DEPRECATED(Reason) [[deprecated(Reason)]] +#else +# define ECSACT_DEPRECATED(Reason) +#endif + ECSACT_TYPED_ID(ecsact_package_id); ECSACT_TYPED_ID(ecsact_system_id); ECSACT_TYPED_ID(ecsact_action_id); @@ -41,6 +47,7 @@ ECSACT_TYPED_ID(ecsact_transient_id); ECSACT_TYPED_ID(ecsact_enum_id); ECSACT_TYPED_ID(ecsact_enum_value_id); ECSACT_TYPED_ID(ecsact_field_id); +ECSACT_TYPED_ID(ecsact_system_assoc_id); ECSACT_TYPED_ID(ecsact_variant_id); ECSACT_TYPED_ID(ecsact_registry_id); ECSACT_TYPED_ID(ecsact_entity_id); @@ -222,6 +229,11 @@ typedef enum { } ecsact_execute_systems_error; typedef enum { + /** + * System has no capabilities for this component. + */ + ECSACT_SYS_CAP_NONE = 0, + /** * System may read component */ diff --git a/ecsact/runtime/definitions.h b/ecsact/runtime/definitions.h index b6e6353f..bf8200e0 100644 --- a/ecsact/runtime/definitions.h +++ b/ecsact/runtime/definitions.h @@ -78,6 +78,13 @@ typedef struct ecsact_field_definitions { ecsact_field_type type; } ecsact_field_definition; +typedef struct ecsact_system_assoc_info { + ecsact_composite_id composite_id; + int32_t field_count; + ecsact_field_id field_ids[32]; + +} ecsact_system_assoc_info; + typedef struct ecsact_component_definition { /** * Name of component. Null-terminated string. May be empty. diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index f2dc24c9..b5808889 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -378,7 +378,43 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_unset_system_capability) ecsact_component_like_id ); +ECSACT_DYNAMIC_API_FN(ecsact_system_assoc_id, ecsact_add_system_assoc) +( // + ecsact_system_like_id +); + +ECSACT_DYNAMIC_API_FN(void, ecsact_remove_system_assoc) +( // + ecsact_system_like_id, + ecsact_system_assoc_id +); + +ECSACT_DYNAMIC_API_FN(void, ecsact_add_system_assoc_field) +( // + ecsact_system_like_id, + ecsact_system_assoc_id, + ecsact_component_like_id, + ecsact_field_id +); + +ECSACT_DYNAMIC_API_FN(void, ecsact_remove_system_assoc_field) +( // + ecsact_system_like_id, + ecsact_system_assoc_id, + ecsact_component_like_id, + ecsact_field_id +); + +ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_assoc_capbility) +( // + ecsact_system_like_id, + ecsact_system_assoc_id, + ecsact_component_like_id, + ecsact_system_capability +); + ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability) +ECSACT_DEPRECATED("use ecsact_set_system_assoc_capbility instead") ( // ecsact_system_like_id, ecsact_component_like_id, @@ -388,6 +424,9 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability) ); ECSACT_DYNAMIC_API_FN(void, ecsact_unset_system_association_capability) +ECSACT_DEPRECATED( + "use ecsact_set_system_assoc_capbility with ECSACT_SYS_CAP_NONE instead" +) ( // ecsact_system_like_id, ecsact_component_like_id, diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index e546ac2c..992b00c5 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -284,13 +284,59 @@ ECSACT_META_API_FN(void, ecsact_meta_system_capabilities) int32_t* out_capabilities_count ); +ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_count) +( // + ecsact_system_like_id system_id +); + +ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_ids) +( // + ecsact_system_like_id system_id, + int32_t max_assoc_count, + ecsact_system_assoc_id* out_assoc_ids, + int32_t* out_assoc_count +); + +ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_fields_count) +( // + ecsact_system_like_id system_id, + ecsact_system_assoc_id assoc_id +); + +ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_fields) +( // + ecsact_system_like_id system_id, + ecsact_system_assoc_id assoc_id, + int32_t max_fields_count, + ecsact_field_id* out_fields, + int32_t* out_fields_count +); + +ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_capabilities_count) +( // + ecsact_system_like_id system_id, + ecsact_system_assoc_id assoc_id +); + +ECSACT_META_API_FN(void, ecsact_meta_system_assoc_capabilities) +( // + ecsact_system_like_id system_id, + ecsact_system_assoc_id assoc_id, + int32_t max_capabilities_count, + ecsact_component_like_id* out_capability_component_ids, + ecsact_system_capability* out_capabilities, + int32_t* out_capabilities_count +); + ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_fields_count) +ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id ); ECSACT_META_API_FN(void, ecsact_meta_system_association_fields) +ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id, @@ -300,6 +346,7 @@ ECSACT_META_API_FN(void, ecsact_meta_system_association_fields) ); ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_capabilities_count) +ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id, @@ -307,6 +354,7 @@ ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_capabilities_count) ); ECSACT_META_API_FN(void, ecsact_meta_system_association_capabilities) +ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id, From 83859804c857c174904986eb0b2515e64615340a Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Thu, 23 May 2024 15:55:55 -0700 Subject: [PATCH 2/3] chore: add missing fns to for each macros --- ecsact/runtime/definitions.h | 7 ------- ecsact/runtime/dynamic.h | 5 +++++ ecsact/runtime/meta.h | 6 ++++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ecsact/runtime/definitions.h b/ecsact/runtime/definitions.h index bf8200e0..b6e6353f 100644 --- a/ecsact/runtime/definitions.h +++ b/ecsact/runtime/definitions.h @@ -78,13 +78,6 @@ typedef struct ecsact_field_definitions { ecsact_field_type type; } ecsact_field_definition; -typedef struct ecsact_system_assoc_info { - ecsact_composite_id composite_id; - int32_t field_count; - ecsact_field_id field_ids[32]; - -} ecsact_system_assoc_info; - typedef struct ecsact_component_definition { /** * Name of component. Null-terminated string. May be empty. diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index b5808889..f6524674 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -538,6 +538,11 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_notify_component_setting) 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_capbility, __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__); \ diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index 992b00c5..55f5fbcf 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -525,6 +525,12 @@ ECSACT_META_API_FN(void, ecsact_meta_system_notify_settings) fn(ecsact_meta_system_name, __VA_ARGS__); \ fn(ecsact_meta_system_capabilities_count, __VA_ARGS__); \ fn(ecsact_meta_system_capabilities, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_count, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_ids, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_fields_count, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_fields, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_capabilities_count, __VA_ARGS__); \ + fn(ecsact_meta_system_assoc_capabilities, __VA_ARGS__); \ fn(ecsact_meta_system_association_fields_count, __VA_ARGS__); \ fn(ecsact_meta_system_association_fields, __VA_ARGS__); \ fn(ecsact_meta_system_association_capabilities_count, __VA_ARGS__); \ From 64310d2550450c2fa88d51e38002cf1edfa85c5c Mon Sep 17 00:00:00 2001 From: Ezekiel Warren Date: Thu, 23 May 2024 16:10:20 -0700 Subject: [PATCH 3/3] chore: remove deprecated macro --- ecsact/runtime/common.h | 6 ------ ecsact/runtime/dynamic.h | 11 +++++++---- ecsact/runtime/meta.h | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/ecsact/runtime/common.h b/ecsact/runtime/common.h index adb24584..df02dce1 100644 --- a/ecsact/runtime/common.h +++ b/ecsact/runtime/common.h @@ -33,12 +33,6 @@ # define ECSACT_ALWAYS_INLINE inline __attribute__((always_inline)) #endif -#ifdef __cplusplus -# define ECSACT_DEPRECATED(Reason) [[deprecated(Reason)]] -#else -# define ECSACT_DEPRECATED(Reason) -#endif - ECSACT_TYPED_ID(ecsact_package_id); ECSACT_TYPED_ID(ecsact_system_id); ECSACT_TYPED_ID(ecsact_action_id); diff --git a/ecsact/runtime/dynamic.h b/ecsact/runtime/dynamic.h index f6524674..0283647a 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -413,8 +413,10 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_assoc_capbility) ecsact_system_capability ); +/** + * @deprecated use ecsact_set_system_assoc_capbility instead + */ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability) -ECSACT_DEPRECATED("use ecsact_set_system_assoc_capbility instead") ( // ecsact_system_like_id, ecsact_component_like_id, @@ -423,10 +425,11 @@ ECSACT_DEPRECATED("use ecsact_set_system_assoc_capbility instead") ecsact_system_capability ); +/** + * @deprecated use ecsact_set_system_assoc_capbility with ECSACT_SYS_CAP_NONE + * instead + */ ECSACT_DYNAMIC_API_FN(void, ecsact_unset_system_association_capability) -ECSACT_DEPRECATED( - "use ecsact_set_system_assoc_capbility with ECSACT_SYS_CAP_NONE instead" -) ( // ecsact_system_like_id, ecsact_component_like_id, diff --git a/ecsact/runtime/meta.h b/ecsact/runtime/meta.h index 55f5fbcf..0468b282 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -328,15 +328,19 @@ ECSACT_META_API_FN(void, ecsact_meta_system_assoc_capabilities) int32_t* out_capabilities_count ); +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_fields_count) -ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id ); +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(void, ecsact_meta_system_association_fields) -ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id, @@ -345,16 +349,20 @@ ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") int32_t* out_fields_count ); +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_capabilities_count) -ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id, ecsact_field_id field_id ); +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(void, ecsact_meta_system_association_capabilities) -ECSACT_DEPRECATED("use ecsact_meta_system_assoc_* fns instead") ( // ecsact_system_like_id system_id, ecsact_component_like_id component_id,