| 68 |
68 |
| 69 void asc_scene_node_free(AscSceneNode *node) { |
69 void asc_scene_node_free(AscSceneNode *node) { |
| 70 if (node == NULL) return; |
70 if (node == NULL) return; |
| 71 |
71 |
| 72 // remove this node from its parent |
72 // remove this node from its parent |
| 73 asc_scene_node_unlink(node); |
73 asc_scene_node_remove(node); |
| 74 |
74 |
| 75 // free the entire subtree |
75 // free the entire subtree |
| 76 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
76 CxTreeIterator iter = asc_scene_node_iterator(node, true); |
| 77 cx_foreach(AscSceneNode*, child, iter) { |
77 cx_foreach(AscSceneNode*, child, iter) { |
| 78 if (!iter.exiting) continue; |
78 if (!iter.exiting) continue; |
| 169 } |
169 } |
| 170 |
170 |
| 171 return cx_strcast(node->name); |
171 return cx_strcast(node->name); |
| 172 } |
172 } |
| 173 |
173 |
| 174 void asc_scene_node_link(AscSceneNode * restrict parent, AscSceneNode * restrict node) { |
174 void asc_scene_node_add(AscSceneNode * restrict parent, AscSceneNode * restrict node) { |
| 175 cx_tree_link( |
175 cx_tree_add( |
| 176 parent, node, |
176 parent, node, |
| 177 offsetof(AscSceneNode, parent), |
177 offsetof(AscSceneNode, parent), |
| 178 offsetof(AscSceneNode, children), |
178 offsetof(AscSceneNode, children), |
| 179 offsetof(AscSceneNode, last_child), |
179 offsetof(AscSceneNode, last_child), |
| 180 offsetof(AscSceneNode, prev), |
180 offsetof(AscSceneNode, prev), |
| 181 offsetof(AscSceneNode, next) |
181 offsetof(AscSceneNode, next) |
| 182 ); |
182 ); |
| 183 asc_scene_node_update_transform(node); |
183 asc_scene_node_update_transform(node); |
| 184 } |
184 } |
| 185 |
185 |
| 186 void asc_scene_node_unlink(AscSceneNode *node) { |
186 void asc_scene_node_remove(AscSceneNode *node) { |
| 187 cx_tree_unlink( |
187 cx_tree_remove( |
| 188 node, |
188 node, |
| 189 offsetof(AscSceneNode, parent), |
189 offsetof(AscSceneNode, parent), |
| 190 offsetof(AscSceneNode, children), |
190 offsetof(AscSceneNode, children), |
| 191 offsetof(AscSceneNode, last_child), |
191 offsetof(AscSceneNode, last_child), |
| 192 offsetof(AscSceneNode, prev), |
192 offsetof(AscSceneNode, prev), |