Преглед изворни кода

Add animation_finished signal and fix frame_changed signal for AnimatedSprite3D

Fixes #40301.
Fixes #45947.

(cherry picked from commit c3be0c2c041656bf18aa7aef51a9bf671f0fbd21)
Jitesh пре 5 година
родитељ
комит
d968a03cbc
2 измењених фајлова са 8 додато и 0 уклоњено
  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

@@ -1047,12 +1047,14 @@ void AnimatedSprite3D::_notification(int p_what) {
 						} else {
 							frame = fc - 1;
 						}
+						emit_signal(SceneStringNames::get_singleton()->animation_finished);
 					} else {
 						frame++;
 					}
 
 					_queue_update();
 					_change_notify("frame");
+					emit_signal(SceneStringNames::get_singleton()->frame_changed);
 				}
 
 				float to_process = MIN(timeout, remaining);
@@ -1246,6 +1248,7 @@ void AnimatedSprite3D::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("_res_changed"), &AnimatedSprite3D::_res_changed);
 
 	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, "animation"), "set_animation", "get_animation");