Fixes AnimatedSprite2D animation_finished signal triggering too early

This commit is contained in:
groud 2018-10-04 12:51:45 +02:00
parent cfa373c69f
commit 252d089e6f
2 changed files with 8 additions and 3 deletions

View file

@ -395,15 +395,17 @@ void AnimatedSprite::_notification(int p_what) {
int fc = frames->get_frame_count(animation);
if (frame >= fc - 1) {
if (frames->get_animation_loop(animation)) {
emit_signal(SceneStringNames::get_singleton()->animation_finished);
frame = 0;
} else {
if (!is_over) {
emit_signal(SceneStringNames::get_singleton()->animation_finished);
is_over = true;
}
frame = fc - 1;
}
} else {
frame++;
if (frame == fc - 1) {
emit_signal(SceneStringNames::get_singleton()->animation_finished);
}
}
update();
@ -625,6 +627,7 @@ void AnimatedSprite::_reset_timeout() {
return;
timeout = _get_frame_duration();
is_over = false;
}
void AnimatedSprite::set_animation(const StringName &p_animation) {
@ -712,4 +715,5 @@ AnimatedSprite::AnimatedSprite() {
playing = false;
animation = "default";
timeout = 0;
is_over = false;
}

View file

@ -135,6 +135,7 @@ class AnimatedSprite : public Node2D {
bool centered;
Point2 offset;
bool is_over;
float timeout;
bool hflip;