use crate::utils::easing::{types::Easing, EasingFn};
pub fn lerp(start: f64, end: f64, t: f64, easing: Easing) -> f64 {
start + (end - start) * easing.ease(t)
}
pub fn lerp_fn(start: f64, end: f64, t: f64, f: EasingFn) -> f64 {
start + (end - start) * f(t)
}
#[derive(Clone, Debug)]
pub struct Interpolator {
pub start: f64,
pub end: f64,
pub easing: Easing,
}
impl Interpolator {
pub fn new(start: f64, end: f64) -> Self {
Self {
start,
end,
easing: Easing::Linear,
}
}
pub fn easing(mut self, easing: Easing) -> Self {
self.easing = easing;
self
}
pub fn at(&self, t: f64) -> f64 {
lerp(self.start, self.end, t, self.easing)
}
}