diff options
Diffstat (limited to 'src/geometry/proximity_pair.rs')
| -rw-r--r-- | src/geometry/proximity_pair.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/geometry/proximity_pair.rs b/src/geometry/proximity_pair.rs new file mode 100644 index 0000000..d3e0dc4 --- /dev/null +++ b/src/geometry/proximity_pair.rs @@ -0,0 +1,43 @@ +use crate::geometry::proximity_detector::ProximityPhase; +use crate::geometry::{ColliderPair, Proximity}; +use std::any::Any; + +#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +/// The description of the proximity of two colliders. +pub struct ProximityPair { + /// The pair of collider involved. + pub pair: ColliderPair, + /// The state of proximity between the two colliders. + pub proximity: Proximity, + #[cfg_attr(feature = "serde-serialize", serde(skip))] + pub(crate) detector: Option<ProximityPhase>, + #[cfg_attr(feature = "serde-serialize", serde(skip))] + pub(crate) detector_workspace: Option<Box<dyn Any + Send + Sync>>, +} + +// TODO: use the `derive(Clone)` instead? +impl Clone for ProximityPair { + fn clone(&self) -> Self { + ProximityPair { + pair: self.pair.clone(), + proximity: self.proximity.clone(), + detector: None, + detector_workspace: None, + } + } +} + +impl ProximityPair { + pub(crate) fn new( + pair: ColliderPair, + detector: ProximityPhase, + detector_workspace: Option<Box<dyn Any + Send + Sync>>, + ) -> Self { + Self { + pair, + proximity: Proximity::Disjoint, + detector: Some(detector), + detector_workspace, + } + } +} |
