const BACK_CONST: f32 = 1.70158;
const BACK_IN_OUT_CONST: f32 = BACK_CONST * 1.525;
declare_tween! {
pub struct BackIn;
pub fn back_in;
pub fn back_in_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
let scalar = percent * percent * ((BACK_CONST + 1.0) * percent - BACK_CONST);
value_delta.scale(scalar)
}
}
declare_tween! {
pub struct BackOut;
pub fn back_out;
pub fn back_out_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
let t = percent - 1.0;
let scalar = t * t * ((BACK_CONST + 1.0) * t + BACK_CONST) + 1.0;
value_delta.scale(scalar)
}
}
declare_tween! {
pub struct BackInOut;
pub fn back_in_out;
pub fn back_in_out_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, mut percent: f32) -> Value {
percent *= 2.0;
let scalar = if percent < 1.0 {
percent * percent * ((BACK_IN_OUT_CONST + 1.0) * percent - BACK_IN_OUT_CONST)
} else {
let t = percent - 2.0;
t * t * ((BACK_IN_OUT_CONST + 1.0) * t + BACK_IN_OUT_CONST) + 2.0
};
value_delta.scale(scalar / 2.0)
}
}
test_tween!(Back);