diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index 1003754ba8d..973f36f675d 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -873,8 +873,22 @@ bool Tween::start() { return true; } + pending_update++; + for (List::Element *E = interpolates.front(); E; E = E->next()) { + InterpolateData &data = E->get(); + data.active = true; + } + pending_update--; + // We want to be activated set_active(true); + + // Don't resume from current position if stop_all() function has been used + if (was_stopped) { + seek(0); + } + was_stopped = false; + return true; } @@ -947,6 +961,7 @@ bool Tween::stop(Object *p_object, StringName p_key) { bool Tween::stop_all() { // We no longer need to be active since all tweens have been stopped set_active(false); + was_stopped = true; // For each interpolation... pending_update++; diff --git a/scene/animation/tween.h b/scene/animation/tween.h index e14f9d74f38..571a3ac40ae 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -114,7 +114,7 @@ private: float speed_scale; mutable int pending_update; int uid; - + bool was_stopped = false; List interpolates; struct PendingCommand {