45 scene->root = asc_scene_node_empty(); |
45 scene->root = asc_scene_node_empty(); |
46 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
46 for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { |
47 scene->internal.render_groups[i] = cxArrayListCreateSimple(CX_STORE_POINTERS, 32); |
47 scene->internal.render_groups[i] = cxArrayListCreateSimple(CX_STORE_POINTERS, 32); |
48 } |
48 } |
49 if (name == NULL) { |
49 if (name == NULL) { |
50 scene->name = asc_util_gen_name(scene); |
50 scene->name = asc_util_gen_name("scene"); |
51 } else { |
51 } else { |
52 scene->name.ptr = strdup(name); |
52 scene->name.ptr = strdup(name); |
53 scene->name.length = strlen(name); |
53 scene->name.length = strlen(name); |
54 } |
54 } |
55 asc_dprintf("Initialized scene %"CX_PRIstr, CX_SFMT(scene->name)); |
55 asc_dprintf("Initialized scene %"CX_PRIstr, CX_SFMT(scene->name)); |
71 CxTreeVisitor iter = cx_tree_visitor(scene->root, |
71 CxTreeVisitor iter = cx_tree_visitor(scene->root, |
72 offsetof(AscSceneNode, children), |
72 offsetof(AscSceneNode, children), |
73 offsetof(AscSceneNode, next) |
73 offsetof(AscSceneNode, next) |
74 ); |
74 ); |
75 cx_foreach(AscSceneNode*, node, iter) { |
75 cx_foreach(AscSceneNode*, node, iter) { |
76 CxIterator behavior_iter = cxListMutIterator(node->behaviors); |
76 CxMapIterator behavior_iter = cxMapMutIteratorValues(node->behaviors); |
77 cx_foreach(AscBehavior*, behavior, behavior_iter) { |
77 cx_foreach(AscBehavior*, behavior, behavior_iter) { |
78 if (behavior->enabled) { |
78 if (behavior->enabled) { |
79 asc_behavior_trigger(behavior); |
79 asc_behavior_trigger(behavior); |
80 } |
80 } |
81 if (behavior->killed) { |
81 if (behavior->killed) { |