diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-11 22:03:35 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-11 22:03:35 +0100 |
commit | 9075d5e93245858a19b07c4c7dcf74e9ecb707ce (patch) | |
tree | f3ca93732cd2eca8e2ffbbf62d4ce823afcd8bc9 | |
parent | 775f46099519b906f9eb830a6ff8d091a3ae1d01 (diff) | |
parent | 2a0beb1ef36db00006c441e8038201a798917b37 (diff) |
Merge pull request #73120 from TokageItLab/fix-transition-reset-fade
Fix remaining fade doesn't clear when reset in AnimationNodeTransition
-rw-r--r-- | scene/animation/animation_blend_tree.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index 221e66499b..5e75bd7722 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -826,6 +826,7 @@ double AnimationNodeTransition::process(double p_time, bool p_seek, bool p_is_ex bool switched = false; bool restart = false; + bool clear_remaining_fade = false; if (pending_update) { if (cur_current_index < 0 || cur_current_index >= get_input_count()) { @@ -843,6 +844,10 @@ double AnimationNodeTransition::process(double p_time, bool p_seek, bool p_is_ex pending_update = false; } + if (p_time == 0 && p_seek && !p_is_external_seeking) { + clear_remaining_fade = true; // Reset occurs. + } + if (!cur_transition_request.is_empty()) { int new_idx = find_input(cur_transition_request); if (new_idx >= 0) { @@ -850,10 +855,7 @@ double AnimationNodeTransition::process(double p_time, bool p_seek, bool p_is_ex if (allow_transition_to_self) { // Transition to same state. restart = input_data[cur_current_index].reset; - cur_prev_xfading = 0; - set_parameter(prev_xfading, 0); - cur_prev_index = -1; - set_parameter(prev_index, -1); + clear_remaining_fade = true; } } else { switched = true; @@ -870,6 +872,13 @@ double AnimationNodeTransition::process(double p_time, bool p_seek, bool p_is_ex set_parameter(transition_request, cur_transition_request); } + if (clear_remaining_fade) { + cur_prev_xfading = 0; + set_parameter(prev_xfading, 0); + cur_prev_index = -1; + set_parameter(prev_index, -1); + } + // Special case for restart. if (restart) { set_parameter(time, 0); |