src/behavior.c

changeset 109
08548799ae4a
parent 108
d619bf7dd87b
equal deleted inserted replaced
108:d619bf7dd87b 109:08548799ae4a
43 cxDefineDestructor(list, asc_behavior_destroy); 43 cxDefineDestructor(list, asc_behavior_destroy);
44 return list; 44 return list;
45 } 45 }
46 46
47 AscBehavior *asc_behavior_add_impl(AscSceneNode *node, struct asc_behavior_create_args args) { 47 AscBehavior *asc_behavior_add_impl(AscSceneNode *node, struct asc_behavior_create_args args) {
48 // TODO: replace cxListAdd() with cxListEmplace() when upgrading to UCX 3.2
49 AscBehavior behavior = {0};
50 behavior.node = node;
51 behavior.func = args.func;
52 behavior.destroy_func = args.destroy_func;
53 behavior.data = args.data;
54 if (node->behaviors == NULL) { 48 if (node->behaviors == NULL) {
55 node->behaviors = asc_behavior_new_list(); 49 node->behaviors = asc_behavior_new_list();
56 } 50 }
57 if (cxListAdd(node->behaviors, &behavior)) { 51 AscBehavior *behavior = cxListEmplace(node->behaviors);
52 if (behavior == NULL) {
58 // TODO: output ID of node once we have implemented that 53 // TODO: output ID of node once we have implemented that
59 asc_error("Failed to add behavior to scene node."); 54 asc_error("Failed to add behavior to scene node.");
60 return NULL; 55 return NULL;
61 } 56 }
62 // TODO: replace with cxListLast() when upgrading to UCX 3.2 57 behavior->node = node;
63 return cxListAt(node->behaviors, cxListSize(node->behaviors) - 1); 58 behavior->func = args.func;
59 behavior->destroy_func = args.destroy_func;
60 behavior->data = args.data;
61 return behavior;
64 } 62 }

mercurial