From 5d1c12ffe2ff1392768d52b99e58c9df40321eac Mon Sep 17 00:00:00 2001 From: mars Date: Sat, 9 Jul 2022 18:23:13 -0600 Subject: [PATCH] Add animation delay --- src/anim.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/anim.rs b/src/anim.rs index 81b2006..8ebf755 100644 --- a/src/anim.rs +++ b/src/anim.rs @@ -4,6 +4,7 @@ use keyframe::EasingFunction; pub struct Animation { time: f32, duration: f32, + delay: f32, from: f32, to: f32, function: F, @@ -17,6 +18,7 @@ impl Animation { duration, from, to, + delay: 0.0, function, direction: false, } @@ -32,10 +34,18 @@ impl Animation { pub fn get(&self) -> f32 { if self.is_active() { - let x = self.time / self.duration; - let x = if self.direction { x } else { 1.0 - x }; - let lerp = self.function.y(x as f64) as f32; - (1.0 - lerp) * self.from + lerp * self.to + if self.time <= 0.0 { + if self.direction { + self.from + } else { + self.to + } + } else { + let x = self.time / self.duration; + let x = if self.direction { x } else { 1.0 - x }; + let lerp = self.function.y(x as f64) as f32; + (1.0 - lerp) * self.from + lerp * self.to + } } else if self.direction { self.to } else { @@ -66,9 +76,13 @@ impl Animation { if self.is_active() { self.time = self.duration - self.time; } else { - self.time = 0.0; + self.time = -self.delay; } self.direction = !self.direction; } + + pub fn set_delay(&mut self, delay: f32) { + self.delay = delay; + } }