diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-30 09:59:35 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-30 09:59:35 +0200 |
commit | 7d9ab705c990d06e68f7556ef7d29264f469475e (patch) | |
tree | 651e6c6b281e4e3139ed162e1d8e4ff5488419f5 | |
parent | 228a4e7a1d3b2a065ce05170ed82c87d5b95b54e (diff) | |
parent | 1abd67caace2c51fbf5577ec817f44d4ccc677c7 (diff) | |
download | redot-engine-7d9ab705c990d06e68f7556ef7d29264f469475e.tar.gz |
Merge pull request #96216 from BlackShift/master
Fix Tweeners to emit `finished()` when underlying object is deleted
-rw-r--r-- | doc/classes/PropertyTweener.xml | 1 | ||||
-rw-r--r-- | doc/classes/Tweener.xml | 2 | ||||
-rw-r--r-- | scene/animation/tween.cpp | 3 |
3 files changed, 5 insertions, 1 deletions
diff --git a/doc/classes/PropertyTweener.xml b/doc/classes/PropertyTweener.xml index b7aa6947d9..76cf4cbfeb 100644 --- a/doc/classes/PropertyTweener.xml +++ b/doc/classes/PropertyTweener.xml @@ -5,6 +5,7 @@ </brief_description> <description> [PropertyTweener] is used to interpolate a property in an object. See [method Tween.tween_property] for more usage information. + The tweener will finish automatically if the target object is freed. [b]Note:[/b] [method Tween.tween_property] is the only correct way to create [PropertyTweener]. Any [PropertyTweener] created manually will not function correctly. </description> <tutorials> diff --git a/doc/classes/Tweener.xml b/doc/classes/Tweener.xml index 65148e875d..88f5f9978c 100644 --- a/doc/classes/Tweener.xml +++ b/doc/classes/Tweener.xml @@ -11,7 +11,7 @@ <signals> <signal name="finished"> <description> - Emitted when the [Tweener] has just finished its job. + Emitted when the [Tweener] has just finished its job or became invalid (e.g. due to a freed object). </description> </signal> </signals> diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index f8bbd704f4..e1fd8abede 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -579,6 +579,7 @@ bool PropertyTweener::step(double &r_delta) { Object *target_instance = ObjectDB::get_instance(target); if (!target_instance) { + _finish(); return false; } elapsed_time += r_delta; @@ -706,6 +707,7 @@ bool CallbackTweener::step(double &r_delta) { } if (!callback.is_valid()) { + _finish(); return false; } @@ -770,6 +772,7 @@ bool MethodTweener::step(double &r_delta) { } if (!callback.is_valid()) { + _finish(); return false; } |