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 } |