# HG changeset patch # User Mike Becker # Date 1751749567 -7200 # Node ID d942f48dc83af5c532dd25a5bc582cea095cb6df # Parent 9d0946907cd9cb75a320289068f0a4283a939d44 add names to behaviors diff -r 9d0946907cd9 -r d942f48dc83a src/ascension/behavior.h --- a/src/ascension/behavior.h Fri Jul 04 23:36:40 2025 +0200 +++ b/src/ascension/behavior.h Sat Jul 05 23:06:07 2025 +0200 @@ -43,6 +43,7 @@ void *data; uint64_t last_execution; uint64_t interval; + cxmutstr name; bool enabled; bool killed; // TODO: more useful attributes @@ -65,6 +66,10 @@ * Minimum delay between two successive executions in nanoseconds. */ uint64_t interval; + /** + * Optional name of the behavior. + */ + const char *name; }; AscBehavior *asc_behavior_add_(AscSceneNode *node, struct asc_behavior_create_args args); @@ -88,6 +93,14 @@ void asc_behavior_trigger(AscBehavior *behavior); /** + * Assigns a name to a behavior. + * + * @param behavior the behavior + * @param name the new name + */ +void asc_behavior_name(AscBehavior *behavior, const char *name); + +/** * Enables a behavior * * Has no effect on killed behaviors. diff -r 9d0946907cd9 -r d942f48dc83a src/behavior.c --- a/src/behavior.c Fri Jul 04 23:36:40 2025 +0200 +++ b/src/behavior.c Sat Jul 05 23:06:07 2025 +0200 @@ -28,6 +28,8 @@ #include "ascension/behavior.h" #include "ascension/context.h" #include "ascension/scene.h" +#include "ascension/util.h" +#include "ascension/error.h" #include #include @@ -36,13 +38,14 @@ static void asc_behavior_destroy(void *b) { AscBehavior *behavior = b; + asc_dprintf("Destroy behavior: %"CX_PRIstr, CX_SFMT(behavior->name)); + cx_strfree(&behavior->name); if (behavior->destroy_func) { behavior->destroy_func(behavior); } } static CxList *asc_behavior_new_list(void) { - // TODO: add comparator when we know how to identify behaviors in order to remove them CxList *list = cxArrayListCreate(NULL, NULL, sizeof(AscBehavior), 4); cxDefineDestructor(list, asc_behavior_destroy); return list; @@ -62,6 +65,8 @@ behavior->data = args.data; behavior->interval = args.interval; behavior->last_execution = 0; + asc_behavior_name(behavior, args.name); + asc_dprintf("Create behavior: %"CX_PRIstr, CX_SFMT(behavior->name)); return behavior; } @@ -77,4 +82,14 @@ behavior->func(behavior); behavior->last_execution = asc_context.total_nanos; -} \ No newline at end of file +} + +void asc_behavior_name(AscBehavior *behavior, const char *name) { + cx_strfree(&behavior->name); + if (name == NULL) { + behavior->name = asc_util_gen_name(behavior, "behavior"); + } else { + behavior->name.ptr = strdup(name); + behavior->name.length = strlen(name); + } +}