mirror of
https://github.com/thilo-behnke/wasm-pong.git
synced 2026-07-11 02:29:25 +00:00
clonable logger?
This commit is contained in:
@@ -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<dyn Logger>
|
||||
}
|
||||
|
||||
impl CollisionDetector {
|
||||
pub fn new() -> CollisionDetector {
|
||||
CollisionDetector {}
|
||||
pub fn new(logger: Box<dyn Logger>) -> 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;
|
||||
|
||||
@@ -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<dyn CollisionRegistry> {
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
@@ -120,7 +120,7 @@ impl FieldWrapper {
|
||||
.into_iter()
|
||||
.map(|i| i.to_input())
|
||||
.collect::<Vec<Input>>();
|
||||
// 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) {
|
||||
|
||||
Reference in New Issue
Block a user