src/scene.c

changeset 176
cb2f60f48337
parent 150
3045f61bc4eb
equal deleted inserted replaced
175:e5544920377e 176:cb2f60f48337
56 if (scene->root == NULL) return; 56 if (scene->root == NULL) return;
57 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { 57 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) {
58 cxListFree(scene->internal.render_groups[i]); 58 cxListFree(scene->internal.render_groups[i]);
59 scene->internal.render_groups[i] = NULL; 59 scene->internal.render_groups[i] = NULL;
60 } 60 }
61 // TODO: add names to scenes
61 asc_dprintf("Destroyed scene %"PRIxPTR, (uintptr_t) scene); 62 asc_dprintf("Destroyed scene %"PRIxPTR, (uintptr_t) scene);
62 asc_scene_node_free(scene->root); 63 asc_scene_node_free(scene->root);
63 } 64 }
64 65
65 void asc_scene_execute_behaviors(AscScene *scene) { 66 void asc_scene_execute_behaviors(AscScene *scene) {
66 CxTreeVisitor iter = cx_tree_visitor(scene->root, 67 CxTreeVisitor iter = cx_tree_visitor(scene->root,
67 offsetof(AscSceneNode, children), 68 offsetof(AscSceneNode, children),
68 offsetof(AscSceneNode, next) 69 offsetof(AscSceneNode, next)
69 ); 70 );
70 cx_foreach(AscSceneNode*, node, iter) { 71 cx_foreach(AscSceneNode*, node, iter) {
71 CxIterator behavior_iter = cxListIterator(node->behaviors); 72 CxIterator behavior_iter = cxListMutIterator(node->behaviors);
72 cx_foreach(AscBehavior*, behavior, behavior_iter) { 73 cx_foreach(AscBehavior*, behavior, behavior_iter) {
73 asc_behavior_trigger(behavior); 74 if (behavior->enabled) {
75 asc_behavior_trigger(behavior);
76 }
77 if (behavior->killed) {
78 cxIteratorFlagRemoval(behavior_iter);
79 }
74 } 80 }
75 } 81 }
76 } 82 }
77 83
78 static void asc_scene_draw2d( 84 static void asc_scene_draw2d(

mercurial