use nalgebra::{Point2, RealField, Vector2};
use simba::scalar::SubsetOf;
#[derive(Debug, Clone, Default)]
pub struct Slide<N: Copy + RealField> {
pos: Option<Point2<N>>,
}
impl<N: Copy + RealField> Slide<N> {
pub fn compute(&mut self, pos: Point2<N>) -> Option<Vector2<N>> {
self.pos.replace(pos).map(|old| old - pos)
}
pub const fn discard(&mut self) {
self.pos = None;
}
#[must_use]
pub fn cast<M: Copy + RealField>(self) -> Slide<M>
where
N: SubsetOf<M>,
{
Slide {
pos: self.pos.map(Point2::cast),
}
}
}