diff --git a/gloom-rs/src/main.rs b/gloom-rs/src/main.rs index d785ed0..9618478 100644 --- a/gloom-rs/src/main.rs +++ b/gloom-rs/src/main.rs @@ -232,7 +232,7 @@ fn main() { let mut camera_position: glm::Vec3 = glm::vec3(0.0, 0.0, 0.0); let translation_speed = 3.0f32; - let rotation_speed = 3.0f32; + let rotation_speed = 1.5f32; let mut yaw = 0.0f32; let mut pitch = 0.0f32; @@ -278,30 +278,28 @@ fn main() { } } + // magic + let a = glm::vec3(-yaw.sin(), yaw.cos(), 0.0); + let b = glm::rotation2d(glm::half_pi()) * a; + + let forward = glm::vec3(a.x, a.z, a.y); + let right = glm::vec3(b.x, b.z, b.y); // Handle keyboard input if let Ok(keys) = pressed_keys.lock() { for key in keys.iter() { match key { - VirtualKeyCode::W => { - // Move left relative to camera - let right = glm::vec3(-yaw.sin(), 0.0, yaw.cos()); + VirtualKeyCode::D => { camera_position -= right * translation_speed * delta_time; } - VirtualKeyCode::S => { - // Move right relative to camera - let right = glm::vec3(-yaw.sin(), 0.0, yaw.cos()); - camera_position += right * translation_speed * delta_time; - } VirtualKeyCode::A => { - // Move left relative to camera - let right = glm::vec3(yaw.sin(), 0.0, yaw.cos()); - camera_position -= right * translation_speed * delta_time; - } - VirtualKeyCode::D => { - // Move right relative to camera - let right = glm::vec3(yaw.sin(), 0.0, yaw.cos()); camera_position += right * translation_speed * delta_time; } + VirtualKeyCode::S => { + camera_position += forward * translation_speed * delta_time; + } + VirtualKeyCode::W => { + camera_position -= forward * translation_speed * delta_time; + } VirtualKeyCode::Space => { camera_position.y += translation_speed * delta_time; }