Files
wasm-pong/pong/tests/collision_handler_test.rs
2022-06-11 17:26:35 +02:00

104 lines
3.8 KiB
Rust

use pong::collision::collision::CollisionHandler;
use pong::game_object::components::{DefaultGeomComp, DefaultPhysicsComp};
use pong::game_object::game_object::{DefaultGameObject, GameObject};
use pong::geom::geom::Vector;
use pong::geom::shape::Shape;
use pong::utils::utils::DefaultLoggerFactory;
use rstest::rstest;
use std::borrow::{Borrow, BorrowMut};
use std::cell::RefCell;
use std::rc::Rc;
#[rstest]
#[case(
// given
create_game_obj(1, Vector::new(1., 0.), Vector::new(1., 0.), true),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(1., 0.), Vector::new(1., 0.), true),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(1., 0.), Vector::new(1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(-1., 0.), Vector::new(1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(-1., 0.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(1., 0.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(1., 1.), Vector::new(1., 1.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(-1., 1.), Vector::new(1., 1.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(-2., 1.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(2., 1.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(1., 0.), Vector::new(1., 0.), false),
create_game_obj(2, Vector::new(0., 1.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(-1., 1.), Vector::new(1., 0.), false),
create_game_obj(2, Vector::new(0., 1.), Vector::new(0., 1.), true),
)]
#[case(
// given
create_game_obj(1, Vector::new(-2., 1.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
// expected
create_game_obj(1, Vector::new(2., 1.), Vector::new(-1., 0.), false),
create_game_obj(2, Vector::new(0., 0.), Vector::new(0., 1.), true),
)]
pub fn should_handle_collision(
#[case] mut obj_a: Rc<RefCell<Box<dyn GameObject>>>,
#[case] mut obj_b: Rc<RefCell<Box<dyn GameObject>>>,
#[case] expected_a: Rc<RefCell<Box<dyn GameObject>>>,
#[case] expected_b: Rc<RefCell<Box<dyn GameObject>>>,
) {
let logger = DefaultLoggerFactory::noop();
let mut handler = CollisionHandler::new(&logger);
handler.register((String::from("obj"), String::from("obj")), |a, b| {});
let res = handler.handle(obj_a, obj_b);
assert_eq!(true, res)
// assert_eq!(obj_a.pos(), expected_a.pos());
// assert_eq!(obj_a.vel(), expected_a.vel());
// assert_eq!(obj_b.pos(), expected_b.pos());
// assert_eq!(obj_b.vel(), expected_b.vel());
}
fn create_game_obj(
id: u16,
vel: Vector,
orientation: Vector,
is_static: bool,
) -> Rc<RefCell<Box<dyn GameObject>>> {
Rc::new(RefCell::new(Box::new(DefaultGameObject::new(
id,
"obj".to_string(),
Box::new(DefaultGeomComp::new(Shape::rect(
Vector::zero(),
orientation,
20.,
20.,
))),
Box::new(DefaultPhysicsComp::new(vel, is_static)),
))))
}