Skip to content

Commit e3682e8

Browse files
authored
feat: multi field association API (#243)
1 parent 95ffc34 commit e3682e8

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

ecsact/runtime/common.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ECSACT_TYPED_ID(ecsact_transient_id);
4141
ECSACT_TYPED_ID(ecsact_enum_id);
4242
ECSACT_TYPED_ID(ecsact_enum_value_id);
4343
ECSACT_TYPED_ID(ecsact_field_id);
44+
ECSACT_TYPED_ID(ecsact_system_assoc_id);
4445
ECSACT_TYPED_ID(ecsact_variant_id);
4546
ECSACT_TYPED_ID(ecsact_registry_id);
4647
ECSACT_TYPED_ID(ecsact_entity_id);
@@ -222,6 +223,11 @@ typedef enum {
222223
} ecsact_execute_systems_error;
223224

224225
typedef enum {
226+
/**
227+
* System has no capabilities for this component.
228+
*/
229+
ECSACT_SYS_CAP_NONE = 0,
230+
225231
/**
226232
* System may read component
227233
*/

ecsact/runtime/dynamic.h

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,44 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_unset_system_capability)
378378
ecsact_component_like_id
379379
);
380380

381+
ECSACT_DYNAMIC_API_FN(ecsact_system_assoc_id, ecsact_add_system_assoc)
382+
( //
383+
ecsact_system_like_id
384+
);
385+
386+
ECSACT_DYNAMIC_API_FN(void, ecsact_remove_system_assoc)
387+
( //
388+
ecsact_system_like_id,
389+
ecsact_system_assoc_id
390+
);
391+
392+
ECSACT_DYNAMIC_API_FN(void, ecsact_add_system_assoc_field)
393+
( //
394+
ecsact_system_like_id,
395+
ecsact_system_assoc_id,
396+
ecsact_component_like_id,
397+
ecsact_field_id
398+
);
399+
400+
ECSACT_DYNAMIC_API_FN(void, ecsact_remove_system_assoc_field)
401+
( //
402+
ecsact_system_like_id,
403+
ecsact_system_assoc_id,
404+
ecsact_component_like_id,
405+
ecsact_field_id
406+
);
407+
408+
ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_assoc_capbility)
409+
( //
410+
ecsact_system_like_id,
411+
ecsact_system_assoc_id,
412+
ecsact_component_like_id,
413+
ecsact_system_capability
414+
);
415+
416+
/**
417+
* @deprecated use ecsact_set_system_assoc_capbility instead
418+
*/
381419
ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability)
382420
( //
383421
ecsact_system_like_id,
@@ -387,6 +425,10 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_association_capability)
387425
ecsact_system_capability
388426
);
389427

428+
/**
429+
* @deprecated use ecsact_set_system_assoc_capbility with ECSACT_SYS_CAP_NONE
430+
* instead
431+
*/
390432
ECSACT_DYNAMIC_API_FN(void, ecsact_unset_system_association_capability)
391433
( //
392434
ecsact_system_like_id,
@@ -499,6 +541,11 @@ ECSACT_DYNAMIC_API_FN(void, ecsact_set_system_notify_component_setting)
499541
fn(ecsact_remove_enum_value, __VA_ARGS__); \
500542
fn(ecsact_set_system_capability, __VA_ARGS__); \
501543
fn(ecsact_unset_system_capability, __VA_ARGS__); \
544+
fn(ecsact_add_system_assoc, __VA_ARGS__); \
545+
fn(ecsact_remove_system_assoc, __VA_ARGS__); \
546+
fn(ecsact_add_system_assoc_field, __VA_ARGS__); \
547+
fn(ecsact_remove_system_assoc_field, __VA_ARGS__); \
548+
fn(ecsact_set_system_assoc_capbility, __VA_ARGS__); \
502549
fn(ecsact_set_system_association_capability, __VA_ARGS__); \
503550
fn(ecsact_unset_system_association_capability, __VA_ARGS__); \
504551
fn(ecsact_add_system_generates, __VA_ARGS__); \

ecsact/runtime/meta.h

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,12 +284,62 @@ ECSACT_META_API_FN(void, ecsact_meta_system_capabilities)
284284
int32_t* out_capabilities_count
285285
);
286286

287+
ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_count)
288+
( //
289+
ecsact_system_like_id system_id
290+
);
291+
292+
ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_ids)
293+
( //
294+
ecsact_system_like_id system_id,
295+
int32_t max_assoc_count,
296+
ecsact_system_assoc_id* out_assoc_ids,
297+
int32_t* out_assoc_count
298+
);
299+
300+
ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_fields_count)
301+
( //
302+
ecsact_system_like_id system_id,
303+
ecsact_system_assoc_id assoc_id
304+
);
305+
306+
ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_fields)
307+
( //
308+
ecsact_system_like_id system_id,
309+
ecsact_system_assoc_id assoc_id,
310+
int32_t max_fields_count,
311+
ecsact_field_id* out_fields,
312+
int32_t* out_fields_count
313+
);
314+
315+
ECSACT_META_API_FN(int32_t, ecsact_meta_system_assoc_capabilities_count)
316+
( //
317+
ecsact_system_like_id system_id,
318+
ecsact_system_assoc_id assoc_id
319+
);
320+
321+
ECSACT_META_API_FN(void, ecsact_meta_system_assoc_capabilities)
322+
( //
323+
ecsact_system_like_id system_id,
324+
ecsact_system_assoc_id assoc_id,
325+
int32_t max_capabilities_count,
326+
ecsact_component_like_id* out_capability_component_ids,
327+
ecsact_system_capability* out_capabilities,
328+
int32_t* out_capabilities_count
329+
);
330+
331+
/**
332+
* @deprecated use ecsact_meta_system_assoc_* fns instead
333+
*/
287334
ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_fields_count)
288335
( //
289336
ecsact_system_like_id system_id,
290337
ecsact_component_like_id component_id
291338
);
292339

340+
/**
341+
* @deprecated use ecsact_meta_system_assoc_* fns instead
342+
*/
293343
ECSACT_META_API_FN(void, ecsact_meta_system_association_fields)
294344
( //
295345
ecsact_system_like_id system_id,
@@ -299,13 +349,19 @@ ECSACT_META_API_FN(void, ecsact_meta_system_association_fields)
299349
int32_t* out_fields_count
300350
);
301351

352+
/**
353+
* @deprecated use ecsact_meta_system_assoc_* fns instead
354+
*/
302355
ECSACT_META_API_FN(int32_t, ecsact_meta_system_association_capabilities_count)
303356
( //
304357
ecsact_system_like_id system_id,
305358
ecsact_component_like_id component_id,
306359
ecsact_field_id field_id
307360
);
308361

362+
/**
363+
* @deprecated use ecsact_meta_system_assoc_* fns instead
364+
*/
309365
ECSACT_META_API_FN(void, ecsact_meta_system_association_capabilities)
310366
( //
311367
ecsact_system_like_id system_id,
@@ -477,6 +533,12 @@ ECSACT_META_API_FN(void, ecsact_meta_system_notify_settings)
477533
fn(ecsact_meta_system_name, __VA_ARGS__); \
478534
fn(ecsact_meta_system_capabilities_count, __VA_ARGS__); \
479535
fn(ecsact_meta_system_capabilities, __VA_ARGS__); \
536+
fn(ecsact_meta_system_assoc_count, __VA_ARGS__); \
537+
fn(ecsact_meta_system_assoc_ids, __VA_ARGS__); \
538+
fn(ecsact_meta_system_assoc_fields_count, __VA_ARGS__); \
539+
fn(ecsact_meta_system_assoc_fields, __VA_ARGS__); \
540+
fn(ecsact_meta_system_assoc_capabilities_count, __VA_ARGS__); \
541+
fn(ecsact_meta_system_assoc_capabilities, __VA_ARGS__); \
480542
fn(ecsact_meta_system_association_fields_count, __VA_ARGS__); \
481543
fn(ecsact_meta_system_association_fields, __VA_ARGS__); \
482544
fn(ecsact_meta_system_association_capabilities_count, __VA_ARGS__); \

0 commit comments

Comments
 (0)