From c1741fe98e82a65a36a2999a05c2fec851b5342b Mon Sep 17 00:00:00 2001 From: "Silc Lizard (Tokage) Renew" <61938263+TokageItLab@users.noreply.github.com> Date: Sat, 23 Mar 2024 12:23:24 +0900 Subject: [PATCH] Fix AnimationPlaybackTrack seeking behavior overall Co-authored-by: jsjtxietian Co-authored-by: Miguel0312 Co-authored-by: BruceLiCong --- scene/animation/animation_mixer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index 7080a5338bce..22f919ad36ab 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -1596,7 +1596,7 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { } } break; case Animation::TYPE_ANIMATION: { - if (p_update_only || Math::is_zero_approx(blend)) { + if (Math::is_zero_approx(blend)) { continue; } TrackCacheAnimation *t = static_cast(track); @@ -1623,10 +1623,10 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { double at_anim_pos = 0.0; switch (anim->get_loop_mode()) { case Animation::LOOP_NONE: { - at_anim_pos = MAX((double)anim->get_length(), time - pos); //seek to end + at_anim_pos = MIN((double)anim->get_length(), time - pos); // Seek to end. } break; case Animation::LOOP_LINEAR: { - at_anim_pos = Math::fposmod(time - pos, (double)anim->get_length()); //seek to loop + at_anim_pos = Math::fposmod(time - pos, (double)anim->get_length()); // Seek to loop. } break; case Animation::LOOP_PINGPONG: { at_anim_pos = Math::pingpong(time - pos, (double)a->get_length()); @@ -1634,14 +1634,14 @@ void AnimationMixer::_blend_process(double p_delta, bool p_update_only) { default: break; } - if (player2->is_playing() || seeked) { - player2->seek(at_anim_pos); + if (player2->is_playing()) { + player2->seek(at_anim_pos, false, p_update_only); player2->play(anim_name); t->playing = true; playing_caches.insert(t); } else { player2->set_assigned_animation(anim_name); - player2->seek(at_anim_pos, true); + player2->seek(at_anim_pos, true, p_update_only); } } else { // Find stuff to play.