basic2d/
basic2d.rs

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}