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