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