--- 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 <cx/array_list.h> #include <cx/tree.h> @@ -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); + } +}