summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gates.rs44
-rw-r--r--src/player.rs90
-rw-r--r--src/state.rs32
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();
}
}