diff --git a/pong/src/collision.rs b/pong/src/collision.rs index d3381e4..77909a9 100644 --- a/pong/src/collision.rs +++ b/pong/src/collision.rs @@ -6,12 +6,17 @@ pub mod collision { use std::collections::HashMap; use std::fmt::Debug; use std::rc::Rc; + use crate::utils::utils::Logger; - pub struct CollisionDetector {} + pub struct CollisionDetector { + logger: Box + } impl CollisionDetector { - pub fn new() -> CollisionDetector { - CollisionDetector {} + pub fn new(logger: Box) -> CollisionDetector { + CollisionDetector { + logger + } } pub fn detect_collisions( @@ -111,6 +116,9 @@ pub mod collision { if !self.handlers.contains_key(&key) { return false; } + self.logger.log(&*format!("Handling collision between {:?} and {:?}", obj_a, obj_b)); + self.logger.log(&*format!("Handling collision using handler {:?}", key)); + let handler = self.handlers[&key]; handler(obj_a, obj_b); return true; diff --git a/pong/src/game_field.rs b/pong/src/game_field.rs index 4843d2d..7847176 100644 --- a/pong/src/game_field.rs +++ b/pong/src/game_field.rs @@ -136,7 +136,6 @@ impl Field { { for obj in self.objs.iter() { let mut obj_mut = RefCell::borrow_mut(obj); - self.logger.log("update player"); obj_mut.update_pos(); } } @@ -148,14 +147,13 @@ impl Field { let objs = &self.objs; let obj_a = objs.iter().find(|o| RefCell::borrow(o).id() == collision.0).unwrap().clone(); let obj_b = objs.iter().find(|o| RefCell::borrow(o).id() == collision.1).unwrap().clone(); - self.logger.log(&*format!("Handling collision between {:?} and {:?}", obj_a, obj_b)); collision_handler.handle(obj_a, obj_b); } } fn get_collisions(&self) -> Box { let objs = self.objs.iter().map(|o| o.clone()).collect(); - let collision_detector = CollisionDetector::new(); + let collision_detector = CollisionDetector::new(self.logger.clone()); collision_detector.detect_collisions(objs) } diff --git a/pong/src/utils.rs b/pong/src/utils.rs index 9aff964..af07ceb 100644 --- a/pong/src/utils.rs +++ b/pong/src/utils.rs @@ -1,8 +1,9 @@ pub mod utils { - pub trait Logger { + pub trait Logger : Clone { fn log(&self, msg: &str); } + #[derive(Clone)] pub struct NoopLogger {} impl Logger for NoopLogger { fn log(&self, msg: &str) {} diff --git a/src/lib.rs b/src/lib.rs index de1b15e..b8d2b8a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -120,7 +120,7 @@ impl FieldWrapper { .into_iter() .map(|i| i.to_input()) .collect::>(); - // self.field.tick(inputs); + self.field.tick(inputs); // log!("{:?}", self.field.collisions); } @@ -146,6 +146,7 @@ impl FieldWrapper { } } +#[derive(Clone)] pub struct WasmLogger {} impl Logger for WasmLogger { fn log(&self, msg: &str) {