linear_sim/collision/
intersection.rs

1use std::convert::TryFrom;
2
3use crate::collision::{proximity, Proximity};
4
5/// Describes the inter-penetration of a pair of bounded objects
6#[derive(Clone, Debug, PartialEq)]
7pub struct Intersection {
8  penetration : Proximity,
9  // TODO: include relation information
10  //relation    : Relation
11}
12
13#[derive(Clone, Copy, Debug, Eq, PartialEq)]
14pub enum Relation {
15  /// Partial intersection
16  Partial,
17  AinB,
18  BinA
19}
20
21impl Intersection {
22  #[inline]
23  pub fn penetration (&self) -> &Proximity {
24    &self.penetration
25  }
26}
27impl TryFrom <Proximity> for Intersection {
28  type Error = Proximity;
29  fn try_from (proximity : Proximity) -> Result <Self, Proximity> {
30    match proximity.relation() {
31      proximity::Relation::Intersect
32        => Ok (Intersection { penetration: proximity }),
33      _ => Err(proximity)
34    }
35  }
36}