use super::functions;
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
pub struct CubicBezier {
pub original_control: crate::Transform,
pub end: crate::Transform,
pub end_control: crate::Transform,
pub last_for_seconds: f64,
}
impl CubicBezier {
pub fn new(
original_control: crate::Transform,
end: crate::Transform,
end_control: crate::Transform,
last_for_seconds: f64,
) -> Self {
Self {
original_control,
end,
end_control,
last_for_seconds,
}
}
}
impl crate::Animation for CubicBezier {
fn animated_transform(&mut self, original_transform: crate::Transform, duration_seconds: f64) -> crate::Transform {
let t: f64;
if self.last_for_seconds == 0.0 {
t = 0.0;
} else {
if duration_seconds <= self.last_for_seconds {
t = (self.last_for_seconds - duration_seconds) / self.last_for_seconds;
} else {
t = 0.0;
}
}
return self.end.apply_cubic_bezier(
self.end_control,
original_transform,
self.original_control,
t,
functions::cubic_bezier,
);
}
fn is_done(&self, duration_seconds: f64) -> bool {
return duration_seconds >= self.last_for_seconds;
}
}