mirror of
https://github.com/thilo-behnke/wasm-pong.git
synced 2026-07-11 10:39:18 +00:00
104 lines
3.8 KiB
Rust
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)),
|
|
))))
|
|
}
|