diff options
Diffstat (limited to 'src/game.rs')
-rw-r--r-- | src/game.rs | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/src/game.rs b/src/game.rs index 0358638..b93799d 100644 --- a/src/game.rs +++ b/src/game.rs @@ -7,9 +7,9 @@ use termion::{ use crate::{ entity::{Controllable, Player}, error::Result, - physics::Vector, + physics::{Physics, Vector, Velocity}, structure::Building, - Render, Velocity, + Engine, Render, }; #[derive(Debug)] @@ -32,7 +32,7 @@ impl Game { for key in reader.keys() { match self.handle_input(key?) { Some(Command::Quit) => break, - Some(Command::UpdatePlayer) => &mut self.update()?, + Some(Command::UpdatePlayer) => &mut self.tick_time()?, None => continue, }; self.write_screen(&mut screen)?; @@ -60,9 +60,17 @@ impl Game { } } - fn update(&mut self) -> Result<()> { - self.player.tick_time()?; - self.player.set_velocity(Vector::default()) + fn tick_time(&mut self) -> Result<()> { + self.player.tick_time(self)?; + self.player + .set_velocity(Vector::default()) + .map_err(From::from) + } +} + +impl Engine for Game { + fn get_colliders<C: crate::physics::Collider>(&self) -> Vec<C> { + self.structures } } @@ -70,7 +78,7 @@ impl Game { mod tests { use std::io::stdout; - use crate::{structure::Building, Game, Position}; + use crate::{physics::Position, structure::Building, Game}; #[test] fn run_game() { @@ -95,4 +103,25 @@ mod tests { eprintln!("{}", err) } } + + #[test] + fn collisions() { + let stdin = "sssdddq".as_bytes(); + let stdout = stdout(); + + let mut game = Game::default(); + + let building = Building::builder() + .width(50) + .height(50) + .position((10, 10)) + .build(); + + game.player.set_position((5, 5)).unwrap(); + game.structures.push(building); + + if let Err(err) = game.run_loop(stdin, stdout) { + eprintln!("{}", err) + } + } } |