src/behavior.c

changeset 180
d942f48dc83a
parent 176
cb2f60f48337
child 181
fa550b550072
--- 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);
+    }
+}

mercurial