use cgmath::prelude::*;
#[derive(Debug, PartialEq, Clone, PartialOrd)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum CollisionStrategy {
FullResolution,
CollisionOnly,
}
#[derive(Debug, Clone)]
pub struct Contact<P: EuclideanSpace> {
pub strategy: CollisionStrategy,
pub normal: P::Diff,
pub penetration_depth: P::Scalar,
pub contact_point: P,
pub time_of_impact: P::Scalar,
}
impl<P> Contact<P>
where
P: EuclideanSpace,
P::Diff: VectorSpace + Zero,
{
pub fn new(strategy: CollisionStrategy) -> Self {
Self::new_impl(strategy, P::Diff::zero(), P::Scalar::zero())
}
pub fn new_impl(
strategy: CollisionStrategy,
normal: P::Diff,
penetration_depth: P::Scalar,
) -> Self {
Self::new_with_point(strategy, normal, penetration_depth, P::origin())
}
pub fn new_with_point(
strategy: CollisionStrategy,
normal: P::Diff,
penetration_depth: P::Scalar,
contact_point: P,
) -> Self {
Self {
strategy,
normal,
penetration_depth,
contact_point,
time_of_impact: P::Scalar::zero(),
}
}
}