diff --git a/src/lib.rs b/src/lib.rs index 234a9cf..1bbcf36 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,15 +1,63 @@ +#[cfg(test)] +mod tests; + pub struct Tween { - tweeners: Vec>, + tweeners: Vec<(f32, Tweener)>, + time: f32, + current_tweener: usize, } pub enum Tweener { TweenFunction { function: fn(t: f32, min: T, max: T) -> T, + duration: f32, }, TweenInterval { - interval: f32, + duration: f32, }, TweenCallback { callback: fn(), }, } + +impl Tweener { + pub fn duration(&self) -> f32 { + match self { + Tweener::TweenFunction { function, duration } => duration.clone(), + Tweener::TweenInterval { duration } => duration.clone(), + Tweener::TweenCallback { callback } => 0f32, + } + } + pub fn is_completed(&self, time: f32) -> bool { + match self { + Tweener::TweenFunction { function, duration } => *duration >= time, + Tweener::TweenInterval { duration } => *duration >= time, + Tweener::TweenCallback { callback } => true, + } + } +} +impl Tween { + pub fn new() -> Self { + Self { + tweeners: vec![], + time: 0f32, + current_tweener: 0, + } + } + + pub fn add_tweener(&mut self, tweener: Tweener) { + self.tweeners.push((self.duration(), tweener)); + } + #[inline] + pub fn duration(&self) -> f32 { + self.tweeners.iter().map(|el| el.1.duration()).sum::() + } + pub fn is_completed(&self) -> bool { + self.duration() <= self.time + } + pub fn step(&mut self, delta: f32) { + //for (offset,tween) in self.tweeners.iter().step_by(self.current_tweener) { + // if tween + //} + } +} diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1 @@ +