clonable logger?

This commit is contained in:
Thilo Behnke
2022-05-01 18:42:19 +02:00
parent 0ae29f4bc0
commit 9d89c70195
4 changed files with 16 additions and 8 deletions

View File

@@ -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;

View File

@@ -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)
}

View File

@@ -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) {}

View File

@@ -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) {