extern crate sdl2; extern crate std; use super::state; use super::constants; pub struct Player { pub x: i32, pub y: i32, left_p: bool, right_p: bool, up_p: bool, down_p: bool, y_d: i32, x_d: i32, pub fire_rate: u32, } impl Player { pub fn new() -> Player { Player { x: 400, y: 500, x_d: 0, y_d: 0, down_p: false, left_p: false, right_p: false, up_p: false, fire_rate: 30 } } pub fn act(&mut self, events: &mut sdl2::event::EventPollIterator){ for event in events { match event { sdl2::event::Event::Quit {..} | sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Escape), .. } => { std::process::exit(0); }, sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Down), .. } => { self.down_p = true; self.y_d = -1; } sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Down), .. } => { self.down_p = false; } sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Up), .. } => { self.up_p = true; self.y_d = 1; } sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Up), .. } => { self.up_p = false; } sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Left), .. } => { self.left_p = true; self.x_d = -1; } sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Left), .. } => { self.left_p = false; } sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Right), .. } => { self.right_p = true; self.x_d = 1; } sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::Right), .. } => { self.right_p = false; } _ => { }, } } if self.left_p { if !self.right_p { self.x_d = -1; } } else if self.right_p { self.x_d = 1; } else { self.x_d = 0; } if self.up_p { if !self.down_p { self.y_d = -1; } } else if self.down_p { self.y_d = 1; } else { self.y_d = 0; } /* Don't go off the side */ if self.x_d < 0 && self.x <= 0 { self.x_d = 0; } else if self.x >= constants::X_DIM as i32 && self.x_d > 0 { self.x_d = 0; } if self.y <= 0 && self.y_d < 0 { self.y_d = 0; } else if self.y >= constants::Y_DIM as i32 && self.y_d > 0 { self.y_d = 0; } self.x += self.x_d; self.y += self.y_d; } } impl state::Positioned for Player { fn x(&self) -> i32 { self.x } fn y(&self) -> i32 { self.y } fn radius(&self) -> u32 { 13 } } impl state::Drawable for Player { fn center(&self) -> (u32, u32) { (30, 19) } }