diff --git a/gloom-rs/src/draw.rs b/gloom-rs/src/draw.rs index 54fe3c2..d8d8e51 100644 --- a/gloom-rs/src/draw.rs +++ b/gloom-rs/src/draw.rs @@ -124,6 +124,19 @@ impl World { nodes.get_mut(&Nodes::HeliTailRotor).unwrap().push(heli_tail_rotor); } + for i in 0..num_helicopters { + let heli_body_ptr = nodes[&Nodes::HeliBody][i].as_ref().get_ref() as *const SceneNode; + let heli_door_ptr = nodes[&Nodes::HeliDoor][i].as_ref().get_ref() as *const SceneNode; + let heli_main_rotor_ptr = nodes[&Nodes::HeliMainRotor][i].as_ref().get_ref() as *const SceneNode; + let heli_tail_rotor_ptr = nodes[&Nodes::HeliTailRotor][i].as_ref().get_ref() as *const SceneNode; + let heli_root_ptr = nodes[&Nodes::HeliRoot][i].as_ref().get_ref() as *const SceneNode; + nodes.get_mut(&Nodes::HeliRoot).unwrap().push(heli_root); + nodes.get_mut(&Nodes::HeliBody).unwrap().push(heli_body); + nodes.get_mut(&Nodes::HeliDoor).unwrap().push(heli_door); + nodes.get_mut(&Nodes::HeliMainRotor).unwrap().push(heli_main_rotor); + nodes.get_mut(&Nodes::HeliTailRotor).unwrap().push(heli_tail_rotor); + } + for i in 0..num_helicopters { let heli_body_ptr = nodes[&Nodes::HeliBody][i].as_ref().get_ref() as *const SceneNode; let heli_door_ptr = nodes[&Nodes::HeliDoor][i].as_ref().get_ref() as *const SceneNode; @@ -131,6 +144,11 @@ impl World { let heli_tail_rotor_ptr = nodes[&Nodes::HeliTailRotor][i].as_ref().get_ref() as *const SceneNode; let heli_root_ptr = nodes[&Nodes::HeliRoot][i].as_ref().get_ref() as *const SceneNode; + unsafe { + nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_body_ptr); + nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_door_ptr); + nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_main_rotor_ptr); + nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_tail_rotor_ptr); unsafe { nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_body_ptr); nodes.get_mut(&Nodes::HeliRoot).unwrap()[i].add_child(&*heli_door_ptr); @@ -141,6 +159,12 @@ impl World { } } + let lunar_ptr = nodes[&Nodes::LunarSurface][0].as_ref().get_ref() as *const SceneNode; + nodes.get_mut(&Nodes::SceneRoot).unwrap()[0].add_child(unsafe { &*lunar_ptr }); + nodes.get_mut(&Nodes::LunarSurface).unwrap()[0].add_child(&*heli_root_ptr); + } + } + let lunar_ptr = nodes[&Nodes::LunarSurface][0].as_ref().get_ref() as *const SceneNode; nodes.get_mut(&Nodes::SceneRoot).unwrap()[0].add_child(unsafe { &*lunar_ptr }); @@ -177,6 +201,7 @@ impl World { // Build scene graph on the fly or store scene_root separately unsafe { draw_scene(&self.nodes[&Nodes::SceneRoot][0], &transform_thus_far, glm::identity(), &shader, elapsed); + draw_scene(&self.nodes[&Nodes::SceneRoot][0], &transform_thus_far, glm::identity(), &shader, elapsed); } } }