diff --git a/gloom-rs/src/draw.rs b/gloom-rs/src/draw.rs index 2716962..021290c 100644 --- a/gloom-rs/src/draw.rs +++ b/gloom-rs/src/draw.rs @@ -183,15 +183,16 @@ impl World { // update all helicopter positions for i in 0..self.nodes[&Nodes::HeliRoot].len() { - if i == self.player.node_index { continue; } - let iter_heli_heading = toolbox::simple_heading_animation(elapsed + i as f32 * 1.6f32); - let heli_root = &mut self.nodes.get_mut(&Nodes::HeliRoot).unwrap()[i]; - heli_root.position.x = iter_heli_heading.x; - heli_root.position.y = 15.0; - heli_root.position.z = iter_heli_heading.z; - heli_root.rotation.z = iter_heli_heading.roll; - heli_root.rotation.y = iter_heli_heading.yaw; - heli_root.rotation.x = iter_heli_heading.pitch; + if i != self.player.node_index { + let iter_heli_heading = toolbox::simple_heading_animation(elapsed + i as f32 * 1.6f32); + let heli_root = &mut self.nodes.get_mut(&Nodes::HeliRoot).unwrap()[i]; + heli_root.position.x = iter_heli_heading.x; + heli_root.position.y = 15.0; + heli_root.position.z = iter_heli_heading.z; + heli_root.rotation.z = iter_heli_heading.roll; + heli_root.rotation.y = iter_heli_heading.yaw; + heli_root.rotation.x = iter_heli_heading.pitch; + } self.nodes.get_mut(&Nodes::HeliMainRotor).unwrap()[i].rotation.y = elapsed * rotor_speed; self.nodes.get_mut(&Nodes::HeliTailRotor).unwrap()[i].rotation.x = elapsed * rotor_speed; diff --git a/gloom-rs/src/main.rs b/gloom-rs/src/main.rs index a2d140d..e604389 100644 --- a/gloom-rs/src/main.rs +++ b/gloom-rs/src/main.rs @@ -135,7 +135,11 @@ fn main() { } } - let translation_speed = 1.0; + let camera_speed = 80.0; + let player_move_speed = 60.0; + let player_turn_speed = 1.0; + + let player_forward = world.get_player_node().forward(); // Handle keyboard input if let Ok(keys) = pressed_keys.lock() { @@ -161,17 +165,37 @@ fn main() { } VirtualKeyCode::Right => { - world.camera.position -= world.camera.right() * translation_speed; + world.camera.position -= world.camera.right() * camera_speed * delta_time; } VirtualKeyCode::Left => { - world.camera.position += world.camera.right() * translation_speed; + world.camera.position += world.camera.right() * camera_speed * delta_time; } VirtualKeyCode::Down => { - world.camera.position.y -= translation_speed; + world.camera.position.y -= camera_speed * delta_time; } VirtualKeyCode::Up => { - world.camera.position.y += translation_speed; + world.camera.position.y += camera_speed * delta_time; } + + VirtualKeyCode::W => { + world.get_player_node_mut().position += player_forward * player_move_speed * delta_time; + } + VirtualKeyCode::A => { + world.get_player_node_mut().rotation.y += player_turn_speed * delta_time; + } + VirtualKeyCode::S => { + world.get_player_node_mut().position -= player_forward * player_move_speed * delta_time; + } + VirtualKeyCode::D => { + world.get_player_node_mut().rotation.y -= player_turn_speed * delta_time; + } + VirtualKeyCode::Space => { + world.get_player_node_mut().position.y += player_move_speed * delta_time; + } + VirtualKeyCode::LShift => { + world.get_player_node_mut().position.y -= player_move_speed * delta_time; + } + _ => { } } }