Beatsaber Rust Utilities: A Beatsaber V3 parsing library.
beatsaber
beatmap
1//! The easing that a [transition](crate::lightshow::TransitionType::Transition) event will use.
2
3use loose_enum::loose_enum;
4use simple_easing::*;
5
6loose_enum! {
7 /// The easing that a [transition](crate::lightshow::TransitionType::Transition) event will use.
8 #[derive(Default, Debug, Clone, Copy, Eq, PartialEq, Hash)]
9 #[cfg_attr(
10 feature = "bevy_reflect",
11 derive(bevy_reflect::Reflect),
12 reflect(Debug, Clone, PartialEq)
13 )]
14 pub enum Easing: i32 {
15 #[default]
16 None = -1,
17
18 Linear = 0,
19 InQuad = 1,
20 OutQuad = 2,
21 InOutQuad = 3,
22 InSine = 4,
23 OutSine = 5,
24 InOutSine = 6,
25 InCubic = 7,
26 OutCubic = 8,
27 InOutCubic = 9,
28 InQuart = 10,
29 OutQuart = 11,
30 InOutQuart = 12,
31 InQuint = 13,
32 OutQuint = 14,
33 InOutQuint = 15,
34 InExpo = 16,
35 OutExpo = 17,
36 InOutExpo = 18,
37 InCirc = 19,
38 OutCirc = 20,
39 InOutCirc = 21,
40 InBack = 22,
41 OutBack = 23,
42 InOutBack = 24,
43 InElastic = 25,
44 OutElastic = 26,
45 InOutElastic = 27,
46 InBounce = 28,
47 OutBounce = 29,
48 InOutBounce = 30,
49
50 /// Note: For [`Easing::ease`], the result will be the same as [`Easing::InOutBack`].
51 BeatSaberInOutBack = 100,
52 /// Note: For [`Easing::ease`], the result will be the same as [`Easing::InOutElastic`].
53 BeatSaberInOutElastic = 101,
54 /// Note: For [`Easing::ease`], the result will be the same as [`Easing::InOutBounce`].
55 BeatSaberInOutBounce = 102,
56 }
57}
58
59impl Easing {
60 /// Applies the relevant easing function.
61 ///
62 /// The Beatsaber specific easing use the standard equivalent instead.
63 /// If the easing is [`None`](Self::None) or [`Undefined`](Self::Undefined), then the result will be zero.
64 pub fn ease(&self, num: f32) -> f32 {
65 match self {
66 Easing::None => 0.0,
67
68 Easing::Linear => linear(num),
69 Easing::InQuad => quad_in(num),
70 Easing::OutQuad => quad_out(num),
71 Easing::InOutQuad => quad_in_out(num),
72 Easing::InSine => sine_in(num),
73 Easing::OutSine => sine_out(num),
74 Easing::InOutSine => sine_in_out(num),
75 Easing::InCubic => cubic_in(num),
76 Easing::OutCubic => cubic_out(num),
77 Easing::InOutCubic => cubic_in_out(num),
78 Easing::InQuart => quart_in(num),
79 Easing::OutQuart => quart_out(num),
80 Easing::InOutQuart => quart_in_out(num),
81 Easing::InQuint => quint_in(num),
82 Easing::OutQuint => quint_out(num),
83 Easing::InOutQuint => quint_in_out(num),
84 Easing::InExpo => expo_in(num),
85 Easing::OutExpo => expo_out(num),
86 Easing::InOutExpo => expo_in_out(num),
87 Easing::InCirc => circ_in(num),
88 Easing::OutCirc => circ_out(num),
89 Easing::InOutCirc => circ_in_out(num),
90 Easing::InBack => back_in(num),
91 Easing::OutBack => back_out(num),
92 Easing::InOutBack => back_in_out(num),
93 Easing::InElastic => elastic_in(num),
94 Easing::OutElastic => elastic_out(num),
95 Easing::InOutElastic => elastic_in_out(num),
96 Easing::InBounce => bounce_in(num),
97 Easing::OutBounce => bounce_out(num),
98 Easing::InOutBounce => bounce_in_out(num),
99
100 Easing::BeatSaberInOutBack => back_in_out(num),
101 Easing::BeatSaberInOutElastic => elastic_in_out(num),
102 Easing::BeatSaberInOutBounce => bounce_in_out(num),
103 Easing::Undefined(_) => 0.0,
104 }
105 }
106}