diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gates.rs | 44 | ||||
| -rw-r--r-- | src/player.rs | 90 | ||||
| -rw-r--r-- | src/state.rs | 32 |
3 files changed, 119 insertions, 47 deletions
diff --git a/src/gates.rs b/src/gates.rs index 83cc9bc..ebc2b69 100644 --- a/src/gates.rs +++ b/src/gates.rs @@ -1,8 +1,5 @@ -extern crate rand; -extern crate std; - -use super::state; use super::constants; +use super::state; pub struct Gates { x: f64, @@ -25,7 +22,12 @@ pub struct GatesBullet { impl GatesBullet { pub fn new(x: i32, d_x: f64, y: i32, d_y: f64) -> GatesBullet { - GatesBullet { real_x: x as f64, real_y: y as f64, d_x: d_x, d_y: d_y } + GatesBullet { + real_x: x as f64, + real_y: y as f64, + d_x: d_x, + d_y: d_y, + } } } @@ -54,7 +56,10 @@ impl state::Positioned for Gates { } fn random_position() -> (f64, f64) { - (rand::random::<f64>() * (constants::X_DIM - 200) as f64 + 100., rand::random::<f64>() * 100.) + ( + rand::random::<f64>() * (constants::X_DIM - 200) as f64 + 100., + rand::random::<f64>() * 100., + ) } impl state::StraightBullet for GatesBullet { @@ -79,15 +84,16 @@ impl state::StraightBullet for GatesBullet { } fn random_bullet<T: state::Enemy<GatesBullet>>(enemy: &T) -> GatesBullet { - let multiplier = 2. + 3.*(1. - enemy.health()); - let theta: f64 = rand::random::<f64>()*2.*std::f64::consts::PI/3. + std::f64::consts::PI/6.; + let multiplier = 2. + 3. * (1. - enemy.health()); + let theta: f64 = + rand::random::<f64>() * 2. * std::f64::consts::PI / 3. + std::f64::consts::PI / 6.; let dx = f64::cos(theta) * multiplier; let dy = f64::sin(theta) * multiplier; GatesBullet::new(enemy.x(), dx, enemy.y(), dy) } fn shorten(x: f64, y: f64, maxlen: f64) -> (f64, f64) { - let len = f64::sqrt(x*x + y*y); + let len = f64::sqrt(x * x + y * y); if len > maxlen { (x / len / 2., y / len / 2.) } else { @@ -105,7 +111,17 @@ impl Gates { impl state::Enemy<GatesBullet> for Gates { fn new() -> Gates { - Gates { x: 200., y: 40., v_x: 0., v_y: 0., a_x: 0., a_y: 0., target_x: 200., target_y: 40., health: 1. } + Gates { + x: 200., + y: 40., + v_x: 0., + v_y: 0., + a_x: 0., + a_y: 0., + target_x: 200., + target_y: 40., + health: 1., + } } fn act(&mut self, count: u64) -> Vec<GatesBullet> { let max_accel = (1. - self.health) * 0.75 + 0.25; @@ -113,7 +129,9 @@ impl state::Enemy<GatesBullet> for Gates { let dx = self.target_x - self.x; let dy = self.target_y - self.y; /* If we've arrived (close and stopped) */ - if (dx*dx + dy*dy).sqrt() < max_velocity / max_accel && (self.v_x*self.v_x + self.v_y*self.v_y).sqrt() < 0.01 { + if (dx * dx + dy * dy).sqrt() < max_velocity / max_accel + && (self.v_x * self.v_x + self.v_y * self.v_y).sqrt() < 0.01 + { /* Then pick a new target */ self.choose_position(); } @@ -121,7 +139,7 @@ impl state::Enemy<GatesBullet> for Gates { let dx = self.target_x - self.x; let dy = self.target_y - self.y; /* If we're close */ - if (dx*dx + dy*dy).sqrt() < max_velocity / max_accel { + if (dx * dx + dy * dy).sqrt() < max_velocity / max_accel { /* Then slow down */ let (x, y) = shorten(-self.v_x, -self.v_y, max_accel); self.a_x = x; @@ -134,7 +152,7 @@ impl state::Enemy<GatesBullet> for Gates { } /* If we're going too fast */ - if (self.v_x*self.v_x + self.v_y*self.v_y).sqrt() > max_velocity { + if (self.v_x * self.v_x + self.v_y * self.v_y).sqrt() > max_velocity { /* Then don't go faster */ if self.v_x.signum() == self.a_x.signum() { self.a_x = 0.; diff --git a/src/player.rs b/src/player.rs index 7fdb7b6..06ca0e1 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,8 +1,5 @@ -extern crate sdl2; -extern crate std; - -use super::state; use super::constants; +use super::state; pub struct Player { pub x: i32, @@ -19,52 +16,99 @@ pub struct Player { 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: 15, shift_p: false } + 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: 15, + shift_p: false, + } } pub fn act(&mut self, events: &mut sdl2::event::EventPollIterator) -> Result<(), ()> { for event in events { match event { - sdl2::event::Event::Quit {..} => { + sdl2::event::Event::Quit { .. } => { return Err(()); } - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Down), .. } => { + 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), .. } => { + sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::Down), + .. + } => { self.down_p = false; } - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Up), .. } => { + 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), .. } => { + sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::Up), + .. + } => { self.up_p = false; } - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Left), .. } => { + 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), .. } => { + sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::Left), + .. + } => { self.left_p = false; } - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::Right), .. } => { + 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), .. } => { + sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::Right), + .. + } => { self.right_p = false; } - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::LShift), .. } | - sdl2::event::Event::KeyDown { keycode: Some(sdl2::keyboard::Keycode::RShift), .. } => { + sdl2::event::Event::KeyDown { + keycode: Some(sdl2::keyboard::Keycode::LShift), + .. + } + | sdl2::event::Event::KeyDown { + keycode: Some(sdl2::keyboard::Keycode::RShift), + .. + } => { self.shift_p = true; } - sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::LShift), .. } | - sdl2::event::Event::KeyUp { keycode: Some(sdl2::keyboard::Keycode::RShift), .. } => { + sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::LShift), + .. + } + | sdl2::event::Event::KeyUp { + keycode: Some(sdl2::keyboard::Keycode::RShift), + .. + } => { self.shift_p = false; } - _ => { }, + _ => {} } } if self.left_p { @@ -88,20 +132,18 @@ impl Player { /* 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 { + } 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 { + } else if self.y >= constants::Y_DIM as i32 && self.y_d > 0 { self.y_d = 0; } self.x += if self.shift_p { self.x_d } else { self.x_d * 3 }; self.y += if self.shift_p { self.y_d } else { self.y_d * 3 }; - return Ok(()) + return Ok(()); } } diff --git a/src/state.rs b/src/state.rs index bf62f51..663e762 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,9 +1,5 @@ -extern crate sdl2; -extern crate std; -extern crate rand; - -use super::player; use super::constants; +use super::player; pub trait StraightBullet: Positioned + Drawable { fn real_x(&self) -> f64; @@ -64,7 +60,12 @@ impl<T: StraightBullet> Bullet for T { impl PBullet { pub fn new(x: i32, d_x: f64, y: i32, d_y: f64) -> PBullet { - PBullet { real_x: x as f64, real_y: y as f64, d_x: d_x, d_y: d_y } + PBullet { + real_x: x as f64, + real_y: y as f64, + d_x: d_x, + d_y: d_y, + } } pub fn damage() -> f64 { 0.01 @@ -89,14 +90,20 @@ pub struct State<T, U> { impl<T: Enemy<U>, U> State<T, U> { pub fn new() -> State<T, U> { - State { player: player::Player::new(), enemies: vec![T::new()], bullets: Vec::new(), count: 0, player_bullets: Vec::new() } + State { + player: player::Player::new(), + enemies: vec![T::new()], + bullets: Vec::new(), + count: 0, + player_bullets: Vec::new(), + } } } fn dist(x1: i32, y1: i32, x2: i32, y2: i32) -> f64 { let xdist = x1 - x2; let ydist = y1 - y2; - f64::sqrt((xdist*xdist + ydist*ydist) as f64) + f64::sqrt((xdist * xdist + ydist * ydist) as f64) } pub trait Positioned { @@ -122,7 +129,10 @@ pub trait Positioned { fn outside(&self) -> bool { let x = self.x(); let y = self.y(); - x < -100 || x > constants::X_DIM as i32 + 100 || y < -100 || y > constants::Y_DIM as i32 + 100 + x < -100 + || x > constants::X_DIM as i32 + 100 + || y < -100 + || y > constants::Y_DIM as i32 + 100 } } @@ -146,7 +156,9 @@ pub trait Drawable: Positioned { let (cx, cy) = Self::center(); let x0 = self.x() - cx as i32; let y0 = self.y() - cy as i32; - canvas.copy(&texture, None, Some(sdl2::rect::Rect::new(x0, y0, tw, th))).unwrap(); + canvas + .copy(&texture, None, Some(sdl2::rect::Rect::new(x0, y0, tw, th))) + .unwrap(); } } |
