basic3d/
basic3d.rs

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}