From f2d9225101843207188e554a14649f34870380ef Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 17 Feb 2021 11:19:51 +0100 Subject: Add ColliderHandle:s to PairFilterContext This makes it easy to write custom filters based on the handles. For instance, a user can add pairs of `ColliderHandle`s into a `HashSet` and do a lookup in a `ContactPairFilter` to easily (if maybe not efficiently) disable collisions between pairs of colliders. The same could be accomplished by using the `user_data: u128` field of the `Collider`, but it would be less ergonomic, and also with this PR that `user_data` space can be saved for more important things. --- src/geometry/narrow_phase.rs | 4 ++++ src/geometry/pair_filter.rs | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/geometry/narrow_phase.rs b/src/geometry/narrow_phase.rs index 7525a68..640ce12 100644 --- a/src/geometry/narrow_phase.rs +++ b/src/geometry/narrow_phase.rs @@ -424,6 +424,8 @@ impl NarrowPhase { let context = PairFilterContext { rigid_body1: rb1, rigid_body2: rb2, + collider_handle1: handle1, + collider_handle2: handle2, collider1: co1, collider2: co2, }; @@ -492,6 +494,8 @@ impl NarrowPhase { let context = PairFilterContext { rigid_body1: rb1, rigid_body2: rb2, + collider_handle1: pair.pair.collider1, + collider_handle2: pair.pair.collider2, collider1: co1, collider2: co2, }; diff --git a/src/geometry/pair_filter.rs b/src/geometry/pair_filter.rs index 944de47..25f300f 100644 --- a/src/geometry/pair_filter.rs +++ b/src/geometry/pair_filter.rs @@ -1,5 +1,5 @@ use crate::dynamics::RigidBody; -use crate::geometry::{Collider, SolverFlags}; +use crate::geometry::{Collider, ColliderHandle, SolverFlags}; /// Context given to custom collision filters to filter-out collisions. pub struct PairFilterContext<'a> { @@ -8,6 +8,10 @@ pub struct PairFilterContext<'a> { /// The first collider involved in the potential collision. pub rigid_body2: &'a RigidBody, /// The first collider involved in the potential collision. + pub collider_handle1: ColliderHandle, + /// The first collider involved in the potential collision. + pub collider_handle2: ColliderHandle, + /// The first collider involved in the potential collision. pub collider1: &'a Collider, /// The first collider involved in the potential collision. pub collider2: &'a Collider, -- cgit