From 11fdbe1fe390db7a9440fbbb1e61dd773142d95a Mon Sep 17 00:00:00 2001
From: Jerome Humbert <djeedai@gmail.com>
Date: Sat, 12 Feb 2022 11:19:27 +0000
Subject: [PATCH] Fix non-`Once` animation playback

Ensure the `TweenState::Ended` is set only for `TweeningType::Once`,
which is the only one with a finite duration, so which can end. Other
tweening types repeat indefinitely until stopped, so have no end.
---
 examples/menu.rs | 2 +-
 src/tweenable.rs | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/examples/menu.rs b/examples/menu.rs
index 4f3dbf3..eb09eeb 100644
--- a/examples/menu.rs
+++ b/examples/menu.rs
@@ -43,7 +43,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
             color: UiColor(Color::NONE),
             ..Default::default()
         })
-        .insert(Name::new("container"))
+        .insert(Name::new("menu"))
         .id();
 
     let mut start_time_ms = 0;
diff --git a/src/tweenable.rs b/src/tweenable.rs
index bdb5ab2..ae706b2 100644
--- a/src/tweenable.rs
+++ b/src/tweenable.rs
@@ -165,7 +165,10 @@ impl<T> Tweenable<T> for Tween<T> {
         self.lens.lerp(target, factor);
 
         if self.timer.just_finished() {
-            self.state = TweenState::Ended;
+            if self.tweening_type == TweeningType::Once {
+                self.state = TweenState::Ended;
+            }
+
             // This is always true for non ping-pong, and is true for ping-pong when
             // coming back to start after a full cycle start -> end -> start.
             if self.direction == TweeningDirection::Forward {
-- 
GitLab