From c9d8277377681a6c5162abe4e8f17a058eebcfd4 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Fri, 24 Jun 2022 19:00:34 +0200 Subject: Add contact force events generated above a user-defined threshold --- src_testbed/harness/mod.rs | 9 ++++++--- src_testbed/physics/mod.rs | 8 +++++--- 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src_testbed') 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, + pub collision_events: Receiver, + pub contact_force_events: Receiver, } 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() {} } } -- cgit