X-Git-Url: https://codewiz.org/gitweb?p=mandelwow.git;a=blobdiff_plain;f=support%2Fcamera.rs;h=fe1398d874ee3842a0006ee668ddde8f2002c780;hp=9f0e3bac45ea2422d0335a545b0e8c21b158dd28;hb=082d9095991d445ad839e5ac3eb94bc3bc772951;hpb=4dc39ef481d889a00657ef9b22760cd2b0095e86 diff --git a/support/camera.rs b/support/camera.rs index 9f0e3ba..fe1398d 100644 --- a/support/camera.rs +++ b/support/camera.rs @@ -1,12 +1,15 @@ extern crate glutin; +use glutin::ElementState::{Pressed, Released}; +use glutin::Event::{KeyboardInput, MouseMoved}; +use glutin::VirtualKeyCode; use support::vec3::Vec3; use support::vec3::norm; use std::f32; //use glutin::Event; -//use glutin::VirtualKeyCode; +//use VirtualKeyCode; #[derive(Default)] pub struct CameraState { @@ -24,6 +27,11 @@ pub struct CameraState { turning_left: bool, turning_down: bool, turning_right: bool, + + mouse_x: i32, + mouse_y: i32, + rel_x: i32, + rel_y: i32, } impl CameraState { @@ -106,110 +114,111 @@ impl CameraState { s.2 * f.0 - s.0 * f.2, s.0 * f.1 - s.1 * f.0); + let walk_speed = 0.01; + let strife_speed = 0.02; + let pan_speed = 0.01; + if self.moving_up { - self.pos += u * 0.01; - } - if self.moving_left { - self.pos.0 -= s.0 * 0.01; - self.pos.1 -= s.1 * 0.01; - self.pos.2 -= s.2 * 0.01; + self.pos += u * strife_speed; } if self.moving_down { - self.pos.0 -= u.0 * 0.01; - self.pos.1 -= u.1 * 0.01; - self.pos.2 -= u.2 * 0.01; + self.pos -= u * strife_speed; + } + if self.moving_left { + self.pos -= s * strife_speed; } if self.moving_right { - self.pos += s * 0.01; + self.pos += s * strife_speed; } if self.moving_forward { - self.pos += f * 0.01; + self.pos += f * walk_speed; } if self.moving_backward { - self.pos.0 -= f.0 * 0.01; - self.pos.1 -= f.1 * 0.01; - self.pos.2 -= f.2 * 0.01; - } - if self.turning_left { - let a: f32 = -0.05; - self.dir = Vec3(f.0 * a.cos() + f.2 * a.sin(), f.1, - f.0 * a.sin() + f.2 * a.cos()); - } - if self.turning_right { - let a: f32 = 0.05; - self.dir = Vec3(f.0 * a.cos() + f.2 * a.sin(), f.1, - f.0 * a.sin() + f.2 * a.cos()); - } - if self.turning_up { - let a: f32 = -0.05; - self.dir = Vec3(f.0, f.1 * a.cos() - f.2 * a.sin(), f.1 * a.sin() + f.2 * a.cos()); - } - if self.turning_down { - let a: f32 = 0.05; - self.dir = Vec3(f.0, f.1 * a.cos() - f.2 * a.sin(), f.1 * a.sin() + f.2 * a.cos()); + self.pos -= f * walk_speed; } + + if self.turning_left { self.rel_x -= 2; } + if self.turning_right { self.rel_x += 2; } + if self.turning_up { self.rel_y -= 2; } + if self.turning_down { self.rel_y += 2; } + let vx = -pan_speed * self.rel_x as f32; + let vy = -pan_speed * self.rel_y as f32; + self.dir = Vec3(f.0 * vx.cos() + f.2 * vx.sin(), + f.1 * vy.cos() - f.2 * vy.sin(), + f.1 * vy.sin() - f.0 * vx.sin() + f.2 * vx.cos() * vy.cos()); + self.rel_x = 0; + self.rel_y = 0; + //println!("camera_pos = {:?}", self.pos); //println!("camera_dir = {:?}", self.dir); } pub fn process_input(&mut self, event: &glutin::Event) { match event { - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::Up)) => { + &MouseMoved(x, y) => { + self.rel_x += x - self.mouse_x; + self.rel_y += y - self.mouse_y; + self.mouse_x = x; + self.mouse_y = y; + } + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::Up)) => { self.moving_up = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::Up)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::Up)) => { self.moving_up = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::Down)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::Down)) => { self.moving_down = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::Down)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::Down)) => { self.moving_down = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::Left)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::Left)) => { self.moving_left = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::Left)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::Left)) => { self.moving_left = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::Right)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::Right)) => { self.moving_right = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::Right)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::Right)) => { self.moving_right = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::A)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::A)) => { self.turning_left = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::A)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::A)) => { self.turning_left = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::D)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::D)) => { self.turning_right = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::D)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::D)) => { self.turning_right = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::W)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::W)) => { self.moving_forward = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::W)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::W)) => { self.moving_forward = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::S)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::S)) => { self.moving_backward = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::S)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::S)) => { self.moving_backward = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::R)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::R)) => { self.turning_up = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::R)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::R)) => { self.turning_up = false; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(glutin::VirtualKeyCode::F)) => { + &KeyboardInput(Pressed, _, Some(VirtualKeyCode::F)) => { self.turning_down = true; }, - &glutin::Event::KeyboardInput(glutin::ElementState::Released, _, Some(glutin::VirtualKeyCode::F)) => { + &KeyboardInput(Released, _, Some(VirtualKeyCode::F)) => { self.turning_down = false; }, _ => {}