Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replaced loops_current with end_loop in AnimationNodeStateMachinePlayback #60247

Merged
merged 1 commit into from
Apr 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions scene/animation/animation_node_state_machine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,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;

Expand Down Expand Up @@ -352,7 +350,6 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s

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)) {
Expand Down Expand Up @@ -388,12 +385,8 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
}

{ //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
}

Expand Down Expand Up @@ -443,15 +436,15 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
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
Expand All @@ -478,7 +471,6 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
}

rem = len_current; //so it does not show 0 on transition
loops_current = 0;
}
}

Expand Down
2 changes: 1 addition & 1 deletion scene/animation/animation_node_state_machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class AnimationNodeStateMachinePlayback : public Resource {

float len_current = 0.0;
float pos_current = 0.0;
int loops_current = 0;
bool end_loop = false;

StringName current;

Expand Down