Files
ncollide2d
bounding_volume
aabb.rsaabb_ball.rsaabb_compound.rsaabb_convex_polygon.rsaabb_cuboid.rsaabb_heightfield.rsaabb_plane.rsaabb_polyline.rsaabb_shape.rsaabb_support_map.rsaabb_utils.rsbounding_sphere.rsbounding_sphere_ball.rsbounding_sphere_capsule.rsbounding_sphere_compound.rsbounding_sphere_convex_polygon.rsbounding_sphere_cuboid.rsbounding_sphere_heightfield.rsbounding_sphere_plane.rsbounding_sphere_polyline.rsbounding_sphere_segment.rsbounding_sphere_shape.rsbounding_sphere_utils.rsbounding_volume.rscircular_cone.rsmod.rsspatialized_normal_cone.rs
interpolation
partitioning
pipeline
broad_phase
glue
narrow_phase
contact_generator
ball_ball_manifold_generator.rsball_convex_polyhedron_manifold_generator.rscapsule_capsule_manifold_generator.rscapsule_shape_manifold_generator.rscomposite_shape_composite_shape_manifold_generator.rscomposite_shape_shape_manifold_generator.rscontact_manifold_generator.rsconvex_polyhedron_convex_polyhedron_manifold_generator.rsdefault_contact_dispatcher.rsheightfield_shape_manifold_generator.rsmod.rsplane_ball_manifold_generator.rsplane_convex_polyhedron_manifold_generator.rs
proximity_detector
object
procedural
query
algorithms
closest_points
contact
distance
nonlinear_time_of_impact
point
proximity
ray
time_of_impact
visitors
shape
transformation
to_polyline
utils
ncollide3d
bounding_volume
aabb.rsaabb_ball.rsaabb_compound.rsaabb_convex.rsaabb_cuboid.rsaabb_heightfield.rsaabb_plane.rsaabb_polyline.rsaabb_shape.rsaabb_support_map.rsaabb_triangle.rsaabb_trimesh.rsaabb_utils.rsbounding_sphere.rsbounding_sphere_ball.rsbounding_sphere_capsule.rsbounding_sphere_compound.rsbounding_sphere_cone.rsbounding_sphere_convex.rsbounding_sphere_cuboid.rsbounding_sphere_cylinder.rsbounding_sphere_heightfield.rsbounding_sphere_plane.rsbounding_sphere_polyline.rsbounding_sphere_segment.rsbounding_sphere_shape.rsbounding_sphere_triangle.rsbounding_sphere_trimesh.rsbounding_sphere_utils.rsbounding_volume.rscircular_cone.rsmod.rsspatialized_normal_cone.rs
interpolation
partitioning
pipeline
broad_phase
glue
narrow_phase
contact_generator
ball_ball_manifold_generator.rsball_convex_polyhedron_manifold_generator.rscapsule_capsule_manifold_generator.rscapsule_shape_manifold_generator.rscomposite_shape_composite_shape_manifold_generator.rscomposite_shape_shape_manifold_generator.rscontact_manifold_generator.rsconvex_polyhedron_convex_polyhedron_manifold_generator.rsdefault_contact_dispatcher.rsheightfield_shape_manifold_generator.rsmod.rsplane_ball_manifold_generator.rsplane_convex_polyhedron_manifold_generator.rstrimesh_trimesh_manifold_generator.rs
proximity_detector
object
procedural
query
algorithms
closest_points
contact
distance
nonlinear_time_of_impact
point
proximity
ray
time_of_impact
visitors
shape
transformation
to_trimesh
utils
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use crate::query::{Contact, ContactKinematic}; use na::RealField; /// Pre-process a contact before it is added to a contact manifold. pub trait ContactPreprocessor<N: RealField> { /// Process a contact before it is stored into a contact manifold. /// /// Returns `false` if the contact should be ignored. fn process_contact( &self, c: &mut Contact<N>, kinematic: &mut ContactKinematic<N>, is_first: bool, ) -> bool; } // FIXME: not sure if there is a more efficient way of doing this. // In particular, this induces some overhead (additional indirection and possibly one // more virtual call) when the first member is `None`. impl<'a, 'b, N, A, B> ContactPreprocessor<N> for (Option<&'a A>, &'b B) where N: RealField, A: ?Sized + ContactPreprocessor<N>, B: ?Sized + ContactPreprocessor<N>, { fn process_contact( &self, c: &mut Contact<N>, kinematic: &mut ContactKinematic<N>, is_first: bool, ) -> bool { if let Some(p) = self.0 { p.process_contact(c, kinematic, is_first) && self.1.process_contact(c, kinematic, is_first) } else { self.1.process_contact(c, kinematic, is_first) } } }