1pub fn ease_in_out(value: f32, f: f32) -> f32 {
4    if value < 0.5 {
5        return 0.5 * (1.0 - f32::cos(value * f * std::f32::consts::PI));
6    } else {
7        return 0.5 * (1.0 + f32::cos((1.0 - value) * f * std::f32::consts::PI));
8    }
9}
10
11pub fn ease_in(value: f32, f: f32) -> f32 {
12    return 1.0 - f32::cos(value * f * std::f32::consts::PI * 0.5);
13}
14
15pub fn ease_out(value: f32, f: f32) -> f32 {
16    return f32::sin(value * f * std::f32::consts::PI * 0.5);
17}
18
19pub fn elastic_in_out(value: f32, f: f32) -> f32 {
20    return value + (f32::sin(f * value * 2.0 * std::f32::consts::PI) * (1.0 - value));
21}
22
23pub fn elastic_in(value: f32, f: f32) -> f32 {
24    return f32::sin(f * value * std::f32::consts::PI) * value;
25}
26
27pub fn elastic_out(value: f32, f: f32) -> f32 {
28    return 1.0 - f32::cos(f * value * std::f32::consts::PI) * (1.0 - value);
29}
30
31pub fn bounce_in_out(value: f32) -> f32 {
32    if value < 0.5 {
33        let v = 1.0 - 4.0 * (0.5 - value).powi(2);
34        return (1.0 - v.abs()) * 0.5;
35    } else {
36        let v = 1.0 - 4.0 * (value - 0.5).powi(2);
37        return 0.5 + (1.0 - v.abs()) * 0.5;
38    }
39}
40
41pub fn bounce_in(value: f32) -> f32 {
42    let v = 1.0 - 4.0 * (1.0 - value).powi(2);
43    return 1.0 - v.abs();
44}
45
46pub fn bounce_out(value: f32) -> f32 {
47    let v = 1.0 - 4.0 * (value - 1.0).powi(2);
48    return v.abs();
49}
50
51pub fn exponential_in_out(value: f32) -> f32 {
52    return value.powf(2.0);
53}
54
55pub fn exponential_in(value: f32) -> f32 {
56    return value.powf(2.0);
57}
58
59pub fn exponential_out(value: f32) -> f32 {
60    return (1.0 - value).powf(2.0);
61}
62
63pub fn sine_in_out(value: f32) -> f32 {
64    return 0.5 * (1.0 - f32::cos(value * std::f32::consts::PI));
65}
66
67pub fn sine_in(value: f32) -> f32 {
68    return 1.0 - f32::cos(value * std::f32::consts::PI * 0.5);
69}
70
71pub fn sine_out(value: f32) -> f32 {
72    return f32::sin(value * std::f32::consts::PI * 0.5);
73}
74
75pub fn back_in_out(value: f32) -> f32 {
76    return value.powf(2.0) * ((2.5 + 1.0) * value - 2.5);
77}
78
79pub fn back_in(value: f32) -> f32 {
80    return value.powf(2.0) * ((2.5 + 1.0) * value);
81}
82
83pub fn back_out(value: f32) -> f32 {
84    let f = (1.0 - value).powf(2.0);
85    return 1.0 - f * ((2.5 + 1.0) * (1.0 - value) - 2.5);
86}