Browse Source

Add animation_finished signal and fix frame_changed signal for AnimatedSprite3D

Fixes #40301.
Fixes #45947.
Jitesh 5 years ago
parent
commit
c3be0c2c04
2 changed files with 8 additions and 0 deletions
  1. 5 0
      doc/classes/AnimatedSprite3D.xml
  2. 3 0
      scene/3d/sprite_3d.cpp

+ 5 - 0
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.

+ 3 - 0
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");