diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-06-24 19:00:34 +0200 |
|---|---|---|
| committer | Sébastien Crozet <developer@crozet.re> | 2022-07-01 12:00:32 +0200 |
| commit | c9d8277377681a6c5162abe4e8f17a058eebcfd4 (patch) | |
| tree | b5c01635c6530ddcbb1453e8f9b29e3bc9a50910 /src_testbed | |
| parent | d6b61898612d05e12b52d9636e9bb21dccdca4bb (diff) | |
| download | rapier-c9d8277377681a6c5162abe4e8f17a058eebcfd4.tar.gz rapier-c9d8277377681a6c5162abe4e8f17a058eebcfd4.tar.bz2 rapier-c9d8277377681a6c5162abe4e8f17a058eebcfd4.zip | |
Add contact force events generated above a user-defined threshold
Diffstat (limited to 'src_testbed')
| -rw-r--r-- | src_testbed/harness/mod.rs | 9 | ||||
| -rw-r--r-- | src_testbed/physics/mod.rs | 8 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index 5b71aa5..2ed9745 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -86,10 +86,13 @@ type Callbacks = #[allow(dead_code)] impl Harness { pub fn new_empty() -> Self { - let event_channel = crossbeam::channel::unbounded(); - let event_handler = ChannelEventCollector::new(event_channel.0); + let collision_event_channel = crossbeam::channel::unbounded(); + let contact_force_event_channel = crossbeam::channel::unbounded(); + let event_handler = + ChannelEventCollector::new(collision_event_channel.0, contact_force_event_channel.0); let events = PhysicsEvents { - events: event_channel.1, + collision_events: collision_event_channel.1, + contact_force_events: contact_force_event_channel.1, }; let physics = PhysicsState::new(); let state = RunState::new(); diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index a848ea8..ebcc326 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -3,7 +3,7 @@ use rapier::dynamics::{ CCDSolver, ImpulseJointSet, IntegrationParameters, IslandManager, MultibodyJointSet, RigidBodySet, }; -use rapier::geometry::{BroadPhase, ColliderSet, CollisionEvent, NarrowPhase}; +use rapier::geometry::{BroadPhase, ColliderSet, CollisionEvent, CollisionForceEvent, NarrowPhase}; use rapier::math::{Real, Vector}; use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline}; @@ -107,11 +107,13 @@ impl PhysicsState { } pub struct PhysicsEvents { - pub events: Receiver<CollisionEvent>, + pub collision_events: Receiver<CollisionEvent>, + pub contact_force_events: Receiver<CollisionForceEvent>, } impl PhysicsEvents { pub fn poll_all(&self) { - while let Ok(_) = self.events.try_recv() {} + while let Ok(_) = self.collision_events.try_recv() {} + while let Ok(_) = self.contact_force_events.try_recv() {} } } |
