diff options
| author | Crozet Sébastien <developer@crozet.re> | 2020-10-27 16:11:20 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2020-10-27 16:12:40 +0100 |
| commit | cc44b65094766aab40561f22431a95877ed5ff11 (patch) | |
| tree | 252d5e89b568a845446563af2dbd0e08f49ae7d2 /src/pipeline | |
| parent | a52fb8d7e4649dce02e2131d848b84166df82d64 (diff) | |
| download | rapier-cc44b65094766aab40561f22431a95877ed5ff11.tar.gz rapier-cc44b65094766aab40561f22431a95877ed5ff11.tar.bz2 rapier-cc44b65094766aab40561f22431a95877ed5ff11.zip | |
Added user-implementable traits for collision/proximity pair filtering.
Diffstat (limited to 'src/pipeline')
| -rw-r--r-- | src/pipeline/collision_pipeline.rs | 23 | ||||
| -rw-r--r-- | src/pipeline/physics_pipeline.rs | 7 |
2 files changed, 26 insertions, 4 deletions
diff --git a/src/pipeline/collision_pipeline.rs b/src/pipeline/collision_pipeline.rs index 5a19e52..b8896e8 100644 --- a/src/pipeline/collision_pipeline.rs +++ b/src/pipeline/collision_pipeline.rs @@ -1,7 +1,10 @@ //! Physics pipeline structures. use crate::dynamics::{JointSet, RigidBodySet}; -use crate::geometry::{BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, NarrowPhase}; +use crate::geometry::{ + BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, ContactPairFilter, NarrowPhase, + ProximityPairFilter, +}; use crate::pipeline::EventHandler; /// The collision pipeline, responsible for performing collision detection between colliders. @@ -40,6 +43,8 @@ impl CollisionPipeline { narrow_phase: &mut NarrowPhase, bodies: &mut RigidBodySet, colliders: &mut ColliderSet, + contact_pair_filter: Option<&dyn ContactPairFilter>, + proximity_pair_filter: Option<&dyn ProximityPairFilter>, events: &dyn EventHandler, ) { bodies.maintain_active_set(); @@ -52,8 +57,20 @@ impl CollisionPipeline { narrow_phase.register_pairs(colliders, bodies, &self.broad_phase_events, events); - narrow_phase.compute_contacts(prediction_distance, bodies, colliders, events); - narrow_phase.compute_proximities(prediction_distance, bodies, colliders, events); + narrow_phase.compute_contacts( + prediction_distance, + bodies, + colliders, + contact_pair_filter, + events, + ); + narrow_phase.compute_proximities( + prediction_distance, + bodies, + colliders, + proximity_pair_filter, + events, + ); bodies.update_active_set_with_contacts( colliders, diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs index 47fd260..b99934b 100644 --- a/src/pipeline/physics_pipeline.rs +++ b/src/pipeline/physics_pipeline.rs @@ -7,7 +7,8 @@ use crate::dynamics::{IntegrationParameters, JointSet, RigidBodySet}; #[cfg(feature = "parallel")] use crate::dynamics::{JointGraphEdge, ParallelIslandSolver as IslandSolver}; use crate::geometry::{ - BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, ContactManifoldIndex, NarrowPhase, + BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, ContactManifoldIndex, + ContactPairFilter, NarrowPhase, ProximityPairFilter, }; use crate::math::Vector; use crate::pipeline::EventHandler; @@ -68,6 +69,8 @@ impl PhysicsPipeline { bodies: &mut RigidBodySet, colliders: &mut ColliderSet, joints: &mut JointSet, + contact_pair_filter: Option<&dyn ContactPairFilter>, + proximity_pair_filter: Option<&dyn ProximityPairFilter>, events: &dyn EventHandler, ) { self.counters.step_started(); @@ -112,12 +115,14 @@ impl PhysicsPipeline { integration_parameters.prediction_distance, bodies, colliders, + contact_pair_filter, events, ); narrow_phase.compute_proximities( integration_parameters.prediction_distance, bodies, colliders, + proximity_pair_filter, events, ); // println!("Compute contact time: {}", instant::now() - t); |
