declare_tween!(
pub struct CircIn;
pub fn circ_in;
pub fn circ_in_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
#[cfg(feature = "libm")]
let scalar = 1.0 - libm::sqrtf(1.0 - percent * percent);
#[cfg(feature = "std")]
let scalar = 1.0 - (1.0 - percent * percent).sqrt();
value_delta.scale(scalar)
}
);
declare_tween!(
pub struct CircOut;
pub fn circ_out;
pub fn circ_out_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
let t = percent - 1.0;
#[cfg(feature = "libm")]
let scalar = libm::sqrtf(1.0 - t * t);
#[cfg(feature = "std")]
let scalar = (1.0 - t * t).sqrt();
value_delta.scale(scalar)
}
);
declare_tween!(
pub struct CircInOut;
pub fn circ_in_out;
pub fn circ_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 {
#[cfg(feature = "libm")]
let o = 1.0 - libm::sqrtf(1.0 - percent * percent);
#[cfg(feature = "std")]
let o = 1.0 - (1.0 - percent * percent).sqrt();
o
} else {
let percent = percent - 2.0;
#[cfg(feature = "libm")]
let o = libm::sqrtf(1.0 - percent * percent) + 1.0;
#[cfg(feature = "std")]
let o = (1.0 - percent * percent).sqrt() + 1.0;
o
};
value_delta.scale(scalar / 2.0)
}
);
test_tween!(Circ);