ncollide3d/pipeline/narrow_phase/proximity_detector/
ball_ball_proximity_detector.rs
1use crate::math::{Isometry, Point};
2use crate::pipeline::narrow_phase::{ProximityDetector, ProximityDispatcher};
3use crate::query::{self, Proximity};
4use crate::shape::{Ball, Shape};
5use na::RealField;
6
7pub struct BallBallProximityDetector {}
9
10impl Clone for BallBallProximityDetector {
11 fn clone(&self) -> BallBallProximityDetector {
12 BallBallProximityDetector {}
13 }
14}
15
16impl BallBallProximityDetector {
17 #[inline]
19 pub fn new() -> BallBallProximityDetector {
20 BallBallProximityDetector {}
21 }
22}
23
24impl<N: RealField + Copy> ProximityDetector<N> for BallBallProximityDetector {
25 fn update(
26 &mut self,
27 _: &dyn ProximityDispatcher<N>,
28 ma: &Isometry<N>,
29 a: &dyn Shape<N>,
30 mb: &Isometry<N>,
31 b: &dyn Shape<N>,
32 margin: N,
33 ) -> Option<Proximity> {
34 let a = a.as_shape::<Ball<N>>()?;
35 let b = b.as_shape::<Ball<N>>()?;
36 Some(query::proximity_ball_ball(
37 &Point::from(ma.translation.vector),
38 a,
39 &Point::from(mb.translation.vector),
40 b,
41 margin,
42 ))
43 }
44}