summaryrefslogtreecommitdiffstats
path: root/src/player.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/player.rs')
-rw-r--r--src/player.rs100
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)
+ }
+}