aboutsummaryrefslogtreecommitdiff
path: root/src/geometry/proximity_pair.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/geometry/proximity_pair.rs')
-rw-r--r--src/geometry/proximity_pair.rs43
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,
+ }
+ }
+}