1extern crate cgmath;
2extern crate rhusics_core;
3extern crate rhusics_ecs;
4extern crate shrev;
5extern crate specs;
6
7use cgmath::{Point2, Rad, Rotation2, Transform};
8use shrev::EventChannel;
9use specs::prelude::{Builder, RunNow, World};
10
11use rhusics_core::Pose;
12use rhusics_ecs::collide2d::{
13 BasicCollisionSystem2, BodyPose2, BroadBruteForce2, CollisionMode, CollisionShape2,
14 CollisionStrategy, ContactEvent2, Rectangle, GJK2,
15};
16
17pub fn main() {
18 let mut world = World::new();
19
20 let mut system = BasicCollisionSystem2::<f32, BodyPose2<f32>, ()>::new()
21 .with_broad_phase(BroadBruteForce2::default())
22 .with_narrow_phase(GJK2::new());
23 system.setup(&mut world.res);
24
25 let mut reader_1 = world
26 .write_resource::<EventChannel<ContactEvent2<f32>>>()
27 .register_reader();
28
29 world
30 .create_entity()
31 .with(CollisionShape2::<f32, BodyPose2<f32>, ()>::new_simple(
32 CollisionStrategy::FullResolution,
33 CollisionMode::Discrete,
34 Rectangle::new(10., 10.).into(),
35 )).with(BodyPose2::<f32>::one())
36 .build();
37
38 world
39 .create_entity()
40 .with(CollisionShape2::<f32, BodyPose2<f32>, ()>::new_simple(
41 CollisionStrategy::FullResolution,
42 CollisionMode::Discrete,
43 Rectangle::new(10., 10.).into(),
44 )).with(BodyPose2::<f32>::new(
45 Point2::new(3., 2.),
46 Rotation2::from_angle(Rad(0.)),
47 )).build();
48
49 system.run_now(&world.res);
50 println!(
51 "Contacts: {:?}",
52 world
53 .read_resource::<EventChannel<ContactEvent2<f32>>>()
54 .read(&mut reader_1)
55 .collect::<Vec<_>>()
56 );
57}