From 492b0c322af4f0c1f17cfbe3a71a95d59f23723a Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 2 Dec 2023 20:20:50 +0100 Subject: [PATCH] Fix Tween loop initial value (cherry picked from commit 20aecefd9bdde8c806645432e3989f11ddc6e90d) --- scene/animation/tween.cpp | 13 ++++++++----- scene/animation/tween.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index d6a6af3f089..8193bbf3f16 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -549,9 +549,12 @@ void PropertyTweener::start() { return; } - if (do_continue && Math::is_zero_approx(delay)) { - initial_val = target_instance->get_indexed(property); - do_continue = false; + if (do_continue) { + if (Math::is_zero_approx(delay)) { + initial_val = target_instance->get_indexed(property); + } else { + do_continue_delayed = true; + } } if (relative) { @@ -576,10 +579,10 @@ bool PropertyTweener::step(double &r_delta) { if (elapsed_time < delay) { r_delta = 0; return true; - } else if (do_continue && !Math::is_zero_approx(delay)) { + } else if (do_continue_delayed && !Math::is_zero_approx(delay)) { initial_val = target_instance->get_indexed(property); delta_val = Animation::subtract_variant(final_val, initial_val); - do_continue = false; + do_continue_delayed = false; } double time = MIN(elapsed_time - delay, duration); diff --git a/scene/animation/tween.h b/scene/animation/tween.h index 10c7a272ef1..053b4fac466 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -225,6 +225,7 @@ private: double delay = 0; bool do_continue = true; + bool do_continue_delayed = false; bool relative = false; };