use aisling::easing::Easing as AislingEasing;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EasingFn {
Linear,
InSine,
OutSine,
InOutSine,
InQuad,
OutQuad,
InOutQuad,
InCubic,
OutCubic,
InOutCubic,
InQuart,
OutQuart,
InOutQuart,
InQuint,
OutQuint,
InOutQuint,
InExpo,
OutExpo,
InOutExpo,
InCirc,
OutCirc,
InOutCirc,
InBack,
OutBack,
InOutBack,
InElastic,
OutElastic,
InOutElastic,
InBounce,
OutBounce,
InOutBounce,
}
impl EasingFn {
pub fn apply(self, t: f32) -> f32 {
let mapped = match self {
EasingFn::Linear => AislingEasing::Linear,
EasingFn::InSine => AislingEasing::InSine,
EasingFn::OutSine => AislingEasing::OutSine,
EasingFn::InOutSine => AislingEasing::InOutSine,
EasingFn::InQuad => AislingEasing::InQuad,
EasingFn::OutQuad => AislingEasing::OutQuad,
EasingFn::InOutQuad => AislingEasing::InOutQuad,
EasingFn::InCubic => AislingEasing::InCubic,
EasingFn::OutCubic => AislingEasing::OutCubic,
EasingFn::InOutCubic => AislingEasing::InOutCubic,
EasingFn::InQuart => AislingEasing::InQuart,
EasingFn::OutQuart => AislingEasing::OutQuart,
EasingFn::InOutQuart => AislingEasing::InOutQuart,
EasingFn::InQuint => AislingEasing::InQuint,
EasingFn::OutQuint => AislingEasing::OutQuint,
EasingFn::InOutQuint => AislingEasing::InOutQuint,
EasingFn::InExpo => AislingEasing::InExpo,
EasingFn::OutExpo => AislingEasing::OutExpo,
EasingFn::InOutExpo => AislingEasing::InOutExpo,
EasingFn::InCirc => AislingEasing::InCirc,
EasingFn::OutCirc => AislingEasing::OutCirc,
EasingFn::InOutCirc => AislingEasing::InOutCirc,
EasingFn::InBack => AislingEasing::InBack,
EasingFn::OutBack => AislingEasing::OutBack,
EasingFn::InOutBack => AislingEasing::InOutBack,
EasingFn::InElastic => AislingEasing::InElastic,
EasingFn::OutElastic => AislingEasing::OutElastic,
EasingFn::InOutElastic => AislingEasing::InOutElastic,
EasingFn::InBounce => AislingEasing::InBounce,
EasingFn::OutBounce => AislingEasing::OutBounce,
EasingFn::InOutBounce => AislingEasing::InOutBounce,
};
mapped.apply(t)
}
pub fn all() -> &'static [EasingFn] {
&[
EasingFn::Linear,
EasingFn::InSine,
EasingFn::OutSine,
EasingFn::InOutSine,
EasingFn::InQuad,
EasingFn::OutQuad,
EasingFn::InOutQuad,
EasingFn::InCubic,
EasingFn::OutCubic,
EasingFn::InOutCubic,
EasingFn::InQuart,
EasingFn::OutQuart,
EasingFn::InOutQuart,
EasingFn::InQuint,
EasingFn::OutQuint,
EasingFn::InOutQuint,
EasingFn::InExpo,
EasingFn::OutExpo,
EasingFn::InOutExpo,
EasingFn::InCirc,
EasingFn::OutCirc,
EasingFn::InOutCirc,
EasingFn::InBack,
EasingFn::OutBack,
EasingFn::InOutBack,
EasingFn::InElastic,
EasingFn::OutElastic,
EasingFn::InOutElastic,
EasingFn::InBounce,
EasingFn::OutBounce,
EasingFn::InOutBounce,
]
}
}
impl Default for EasingFn {
fn default() -> Self {
EasingFn::Linear
}
}