From 25ef0aaf3eed38fed62a4b0f9e971eca85e65046 Mon Sep 17 00:00:00 2001 From: ScottVMariotte Date: Thu, 14 Apr 2022 14:28:42 -0400 Subject: [PATCH] Replaced loops_current with end_loop (cherry picked from commit c526ee6683b74a8e0b283b1630dd29c5280aae19) --- scene/animation/animation_node_state_machine.cpp | 16 ++++------------ scene/animation/animation_node_state_machine.h | 6 +++--- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp index b7e470ef890..3a1435a12b6 100644 --- a/scene/animation/animation_node_state_machine.cpp +++ b/scene/animation/animation_node_state_machine.cpp @@ -183,8 +183,6 @@ bool AnimationNodeStateMachinePlayback::_travel(AnimationNodeStateMachine *p_sta return true; //nothing to do } - loops_current = 0; // reset loops, so fade does not happen immediately - Vector2 current_pos = p_state_machine->states[current].position; Vector2 target_pos = p_state_machine->states[p_travel].position; @@ -350,7 +348,6 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_st len_current = p_state_machine->blend_node(current, p_state_machine->states[current].node, 0, true, 1.0, AnimationNode::FILTER_IGNORE, false); pos_current = 0; - loops_current = 0; } if (!p_state_machine->states.has(current)) { @@ -386,12 +383,8 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_st } { //advance and loop check - float next_pos = len_current - rem; - - if (next_pos < pos_current) { - loops_current++; - } + end_loop = next_pos < pos_current; pos_current = next_pos; //looped } @@ -441,15 +434,15 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_st bool goto_next = false; if (switch_mode == AnimationNodeStateMachineTransition::SWITCH_MODE_AT_END) { - goto_next = next_xfade >= (len_current - pos_current) || loops_current > 0; - if (loops_current > 0) { + goto_next = next_xfade >= (len_current - pos_current) || end_loop; + if (end_loop) { next_xfade = 0; } } else { goto_next = fading_from == StringName(); } - if (goto_next) { //loops should be used because fade time may be too small or zero and animation may have looped + if (goto_next) { //end_loop should be used because fade time may be too small or zero and animation may have looped if (next_xfade) { //time to fade, baby @@ -476,7 +469,6 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_st } rem = len_current; //so it does not show 0 on transition - loops_current = 0; } } diff --git a/scene/animation/animation_node_state_machine.h b/scene/animation/animation_node_state_machine.h index 3153b05ebfb..7f83714842f 100644 --- a/scene/animation/animation_node_state_machine.h +++ b/scene/animation/animation_node_state_machine.h @@ -95,9 +95,9 @@ class AnimationNodeStateMachinePlayback : public Resource { float len_total; - float len_current; - float pos_current; - int loops_current; + float len_current = 0.0; + float pos_current = 0.0; + bool end_loop = false; StringName current;