Skip to content

Commit

Permalink
Merge pull request #82898 from TokageItLab/fix-unwanted-start-in-anim…
Browse files Browse the repository at this point in the history
…ation-player

Fix `AnimationPlayer::play()` process unwanted start between the same animations
  • Loading branch information
akien-mga committed Oct 6, 2023
2 parents c05f521 + d46c962 commit 249e724
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions scene/animation/animation_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,28 +415,31 @@ void AnimationPlayer::play(const StringName &p_name, double p_custom_blend, floa
}

c.current.from = &animation_set[name];
c.current.speed_scale = p_custom_scale;

if (!end_reached) {
playback_queue.clear();
}

if (c.assigned != name) { // Reset.
c.current.pos = p_from_end ? c.current.from->animation->get_length() : 0;
c.assigned = name;
emit_signal(SNAME("current_animation_changed"), c.assigned);
} else {
if (p_from_end && c.current.pos == 0) {
// Animation reset but played backwards, set position to the end.
c.current.pos = c.current.from->animation->get_length();
} else if (!p_from_end && c.current.pos == c.current.from->animation->get_length()) {
// Animation resumed but already ended, set position to the beginning.
c.current.pos = 0;
} else if (playing) {
return;
}
}

c.current.speed_scale = p_custom_scale;
c.assigned = name;
emit_signal(SNAME("current_animation_changed"), c.assigned);
c.seeked = false;
c.started = true;

if (!end_reached) {
playback_queue.clear();
}
_set_process(true); // Always process when starting an animation.
playing = true;

Expand Down

0 comments on commit 249e724

Please sign in to comment.