From 00706e8b360e132cb88a7b393dcedadf35403379 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 23 Feb 2021 11:24:54 +0100 Subject: Introduce the PhysicsHook trait used for both contact filtering and contact modification. --- src_testbed/harness/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index afdc23a..53aa893 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -192,8 +192,7 @@ impl Harness { &mut self.physics.bodies, &mut self.physics.colliders, &mut self.physics.joints, - None, - None, + &(), &self.event_handler, ); -- cgit From babcab0bed23fadd23181ccc58aae34fb80d01d8 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 23 Feb 2021 15:49:23 +0100 Subject: Update the testbed to use PhysicsHooks. --- src_testbed/harness/mod.rs | 14 ++++++++------ src_testbed/physics/mod.rs | 4 +++- src_testbed/testbed.rs | 10 +++++----- 3 files changed, 16 insertions(+), 12 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs index 53aa893..5e75d85 100644 --- a/src_testbed/harness/mod.rs +++ b/src_testbed/harness/mod.rs @@ -7,7 +7,7 @@ use plugin::HarnessPlugin; use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase}; use rapier::math::Vector; -use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline}; +use rapier::pipeline::{ChannelEventCollector, PhysicsHooks, PhysicsPipeline, QueryPipeline}; pub mod plugin; @@ -111,15 +111,16 @@ impl Harness { } pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) { - self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81) + self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ()) } - pub fn set_world_with_gravity( + pub fn set_world_with_params( &mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet, gravity: Vector, + hooks: impl PhysicsHooks + 'static, ) { // println!("Num bodies: {}", bodies.len()); // println!("Num joints: {}", joints.len()); @@ -127,6 +128,8 @@ impl Harness { self.physics.bodies = bodies; self.physics.colliders = colliders; self.physics.joints = joints; + self.physics.hooks = Box::new(hooks); + self.physics.broad_phase = BroadPhase::new(); self.physics.narrow_phase = NarrowPhase::new(); self.state.timestep_id = 0; @@ -176,8 +179,7 @@ impl Harness { &mut physics.bodies, &mut physics.colliders, &mut physics.joints, - None, - None, + &*physics.hooks, event_handler, ); }); @@ -192,7 +194,7 @@ impl Harness { &mut self.physics.bodies, &mut self.physics.colliders, &mut self.physics.joints, - &(), + &*self.physics.hooks, &self.event_handler, ); diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs index 808e9bd..0987e32 100644 --- a/src_testbed/physics/mod.rs +++ b/src_testbed/physics/mod.rs @@ -2,7 +2,7 @@ use crossbeam::channel::Receiver; use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; use rapier::geometry::{BroadPhase, ColliderSet, ContactEvent, IntersectionEvent, NarrowPhase}; use rapier::math::Vector; -use rapier::pipeline::{PhysicsPipeline, QueryPipeline}; +use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline}; pub struct PhysicsSnapshot { timestep_id: usize, @@ -77,6 +77,7 @@ pub struct PhysicsState { pub query_pipeline: QueryPipeline, pub integration_parameters: IntegrationParameters, pub gravity: Vector, + pub hooks: Box, } impl PhysicsState { @@ -91,6 +92,7 @@ impl PhysicsState { query_pipeline: QueryPipeline::new(), integration_parameters: IntegrationParameters::default(), gravity: Vector::y() * -9.81, + hooks: Box::new(()), } } } diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs index b8ef324..bc5cd6c 100644 --- a/src_testbed/testbed.rs +++ b/src_testbed/testbed.rs @@ -25,6 +25,7 @@ use rapier::geometry::{ColliderHandle, ColliderSet, NarrowPhase}; #[cfg(feature = "dim3")] use rapier::geometry::{InteractionGroups, Ray}; use rapier::math::{Isometry, Vector}; +use rapier::pipeline::PhysicsHooks; #[cfg(all(feature = "dim2", feature = "other-backends"))] use crate::box2d_backend::Box2dWorld; @@ -245,20 +246,19 @@ impl Testbed { } pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) { - self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81) + self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ()) } - pub fn set_world_with_gravity( + pub fn set_world_with_params( &mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet, gravity: Vector, + hooks: impl PhysicsHooks + 'static, ) { - println!("Num bodies: {}", bodies.len()); - println!("Num joints: {}", joints.len()); self.harness - .set_world_with_gravity(bodies, colliders, joints, gravity); + .set_world_with_params(bodies, colliders, joints, gravity, hooks); self.state .action_flags -- cgit