diff options
Diffstat (limited to 'src/player.rs')
| -rw-r--r-- | src/player.rs | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/player.rs b/src/player.rs new file mode 100644 index 0000000..97c98f6 --- /dev/null +++ b/src/player.rs @@ -0,0 +1,100 @@ +extern crate sdl2; +extern crate std; + +use super::state; + +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; + } + 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 { + 5 + } +} + +impl state::Drawable for Player { + fn color(&self) -> sdl2::pixels::Color { + sdl2::pixels::Color::RGB(0, 0, 0) + } +} |
