Fix remaining fade doesn't clear when reset in AnimationNodeTransition

This commit is contained in:
Silc Renew 2023-02-12 04:12:15 +09:00
parent 44b41ded82
commit 2a0beb1ef3
1 changed files with 13 additions and 4 deletions

View File

@ -825,6 +825,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()) {
@ -842,6 +843,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) {
@ -849,10 +854,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;
@ -869,6 +871,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);