use core::f32::consts::PI;
declare_tween!(
pub struct SineIn;
pub fn sine_in;
pub fn sine_in_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
#[cfg(feature = "libm")]
let time = libm::cosf(percent * PI / 2.0);
#[cfg(feature = "std")]
let time = (percent * PI / 2.0).cos();
value_delta.scale(-time) + value_delta
}
);
declare_tween!(
pub struct SineOut;
pub fn sine_out;
pub fn sine_out_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
#[cfg(feature = "libm")]
let time = libm::sinf(percent * PI / 2.0);
#[cfg(feature = "std")]
let time = (percent * PI / 2.0).sin();
value_delta.scale(time)
}
);
declare_tween!(
pub struct SineInOut;
pub fn sine_in_out;
pub fn sine_in_out_at;
pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value
{
#[cfg(feature = "libm")]
let time = libm::cosf(percent * PI) - 1.0;
#[cfg(feature = "std")]
let time = (percent * PI).cos() - 1.0;
value_delta.scale(-time / 2.0)
}
);
test_tween!(Sine);