summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2021-02-17 15:28:23 +0100
committerGitHub <noreply@github.com>2021-02-17 15:28:23 +0100
commit5d8abd5bad71e667f6b612cebfeb64333d7232f6 (patch)
treea7ca9886c629a2e81c0292cfcdb2efa2b919c741
parentab4f5c0668d2c90055f66f9fde98b4deecb19128 (diff)
parentc3be0c2c041656bf18aa7aef51a9bf671f0fbd21 (diff)
Merge pull request #40316 from jiteshvm/missing-animatedsprite3d-signals
adding animation_finished signal and fix frame_changed signal not firing
-rw-r--r--doc/classes/AnimatedSprite3D.xml5
-rw-r--r--scene/3d/sprite_3d.cpp3
2 files changed, 8 insertions, 0 deletions
diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml
index e1fb78e5b5..02ccab4e05 100644
--- a/doc/classes/AnimatedSprite3D.xml
+++ b/doc/classes/AnimatedSprite3D.xml
@@ -49,6 +49,11 @@
</member>
</members>
<signals>
+ <signal name="animation_finished">
+ <description>
+ Emitted when the animation is finished (when it plays the last frame). If the animation is looping, this signal is emitted every time the last frame is drawn.
+ </description>
+ </signal>
<signal name="frame_changed">
<description>
Emitted when [member frame] changed.
diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp
index c26224d0e3..cb2df9130f 100644
--- a/scene/3d/sprite_3d.cpp
+++ b/scene/3d/sprite_3d.cpp
@@ -888,11 +888,13 @@ void AnimatedSprite3D::_notification(int p_what) {
} else {
frame = fc - 1;
}
+ emit_signal(SceneStringNames::get_singleton()->animation_finished);
} else {
frame++;
}
_queue_update();
+ emit_signal(SceneStringNames::get_singleton()->frame_changed);
}
float to_process = MIN(timeout, remaining);
@@ -1082,6 +1084,7 @@ void AnimatedSprite3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_frame"), &AnimatedSprite3D::get_frame);
ADD_SIGNAL(MethodInfo("frame_changed"));
+ ADD_SIGNAL(MethodInfo("animation_finished"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "frames", PROPERTY_HINT_RESOURCE_TYPE, "SpriteFrames"), "set_sprite_frames", "get_sprite_frames");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "animation"), "set_animation", "get_animation");