Skip to main content

tween/tweens/
linear.rs

1declare_tween!(
2    /// A Linear tween is a simple lerp from one value to another.
3    pub struct Linear;
4
5    /// Creates a new [Linear] Tweener.
6    pub fn linear;
7
8    /// Creates a new [Linear] Tweener at the given time.
9    pub fn linear_at;
10
11    pub fn tween<Value: crate::TweenValue>(&mut self, value_delta: Value, percent: f32) -> Value {
12        value_delta.scale(percent)
13    }
14);
15
16#[cfg(test)]
17mod tests {
18    use super::Linear;
19    use approx::assert_ulps_eq;
20
21    #[test]
22    fn linear_over_frames() {
23        let mut value;
24        let mut tweener = crate::Tweener::new(0.0, 100.0, 10, Linear);
25
26        for val in 1..=10 {
27            value = tweener.move_to(val);
28            assert_ulps_eq!(value, val as f32 * 10.0);
29        }
30    }
31
32    #[test]
33    fn linear_over_frames_rev() {
34        let mut value;
35        let mut tweener = crate::Tweener::new(100.0, 0.0, 10, Linear);
36
37        for val in 1..=10 {
38            value = tweener.move_to(val);
39            assert_ulps_eq!(value, 100.0 - val as f32 * 10.0);
40        }
41    }
42}