diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index d6a6af3f0891..8193bbf3f16a 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 10c7a272ef16..053b4fac4660 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -225,6 +225,7 @@ class PropertyTweener : public Tweener { double delay = 0; bool do_continue = true; + bool do_continue_delayed = false; bool relative = false; };