diff --git a/ecsact/runtime/common.h b/ecsact/runtime/common.h index b4ddbdd..df02dce 100644 --- a/ecsact/runtime/common.h +++ b/ecsact/runtime/common.h @@ -41,6 +41,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 +223,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/dynamic.h b/ecsact/runtime/dynamic.h index f2dc24c..0283647 100644 --- a/ecsact/runtime/dynamic.h +++ b/ecsact/runtime/dynamic.h @@ -378,6 +378,44 @@ 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 +); + +/** + * @deprecated use ecsact_set_system_assoc_capbility instead + */ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability) ( // ecsact_system_like_id, @@ -387,6 +425,10 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability) 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_system_like_id, @@ -499,6 +541,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 e546ac2..0468b28 100644 --- a/ecsact/runtime/meta.h +++ b/ecsact/runtime/meta.h @@ -284,12 +284,62 @@ 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 +); + +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_fields_count) ( // 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_system_like_id system_id, @@ -299,6 +349,9 @@ ECSACT_META_API_FN(void, ecsact_meta_system_association_fields) 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_system_like_id system_id, @@ -306,6 +359,9 @@ ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_capabilities_count) ecsact_field_id field_id ); +/** + * @deprecated use ecsact_meta_system_assoc_* fns instead + */ ECSACT_META_API_FN(void, ecsact_meta_system_association_capabilities) ( // ecsact_system_like_id system_id, @@ -477,6 +533,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__); \