summaryrefslogtreecommitdiffstats
path: root/src/player.rs
diff options
context:
space:
mode:
authorRaymond Hogenson <rhogenson@posteo.net>2018-08-18 00:25:29 -0400
committerRaymond Hogenson <rhogenson@posteo.net>2018-08-18 00:25:29 -0400
commitdaa61a51eb97f868a56a52fc61b560832dde353b (patch)
tree4da42fd8b8265b7e639275e613d4c7f78bf980e9 /src/player.rs
downloadstallman-shooter-daa61a51eb97f868a56a52fc61b560832dde353b.tar.zst
Write a working bullet hell
I just fucked up the enemy movement, but hopefully I won't ever need that old code. The new one is going to look really cool and sweet. Anything with just modifying acceleration must look very cool and smooth.
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)
+ }
+}