Forráskód Böngészése

Prevent errors if Tween callback's object is freed

kobewi 1 éve
szülő
commit
598d9972c8

+ 1 - 0
doc/classes/CallbackTweener.xml

@@ -5,6 +5,7 @@
 	</brief_description>
 	<description>
 		[CallbackTweener] is used to call a method in a tweening sequence. See [method Tween.tween_callback] for more usage information.
+		The tweener will finish automatically if the callback's target object is freed.
 		[b]Note:[/b] [method Tween.tween_callback] is the only correct way to create [CallbackTweener]. Any [CallbackTweener] created manually will not function correctly.
 	</description>
 	<tutorials>

+ 1 - 0
doc/classes/MethodTweener.xml

@@ -5,6 +5,7 @@
 	</brief_description>
 	<description>
 		[MethodTweener] is similar to a combination of [CallbackTweener] and [PropertyTweener]. It calls a method providing an interpolated value as a parameter. See [method Tween.tween_method] for more usage information.
+		The tweener will finish automatically if the callback's target object is freed.
 		[b]Note:[/b] [method Tween.tween_method] is the only correct way to create [MethodTweener]. Any [MethodTweener] created manually will not function correctly.
 	</description>
 	<tutorials>

+ 8 - 0
scene/animation/tween.cpp

@@ -675,6 +675,10 @@ bool CallbackTweener::step(double &r_delta) {
 		return false;
 	}
 
+	if (!callback.get_object()) {
+		return false;
+	}
+
 	elapsed_time += r_delta;
 	if (elapsed_time >= delay) {
 		Variant result;
@@ -736,6 +740,10 @@ bool MethodTweener::step(double &r_delta) {
 		return false;
 	}
 
+	if (!callback.get_object()) {
+		return false;
+	}
+
 	elapsed_time += r_delta;
 
 	if (elapsed_time < delay) {