Explorar o código

Fix Tween loop initial value

kobewi hai 1 ano
pai
achega
20aecefd9b
Modificáronse 2 ficheiros con 9 adicións e 5 borrados
  1. 8 5
      scene/animation/tween.cpp
  2. 1 0
      scene/animation/tween.h

+ 8 - 5
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);

+ 1 - 0
scene/animation/tween.h

@@ -225,6 +225,7 @@ private:
 
 	double delay = 0;
 	bool do_continue = true;
+	bool do_continue_delayed = false;
 	bool relative = false;
 };