Merge pull request #34011 from nekomatata/state-machine-travel-on-ready
Handle state machine travel before the start node is processed
This commit is contained in:
commit
5bf04d16f0
|
@ -312,27 +312,36 @@ float AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_st
|
|||
bool play_start = false;
|
||||
|
||||
if (start_request != StringName()) {
|
||||
|
||||
if (start_request_travel) {
|
||||
if (!playing) {
|
||||
String node_name = start_request;
|
||||
start_request = StringName();
|
||||
ERR_FAIL_V_MSG(0, "Can't travel to '" + node_name + "' if state machine is not playing.");
|
||||
}
|
||||
|
||||
if (!_travel(p_state_machine, start_request)) {
|
||||
//can't travel, then teleport
|
||||
path.clear();
|
||||
current = start_request;
|
||||
if (!stop_request && p_state_machine->start_node) {
|
||||
// can restart, just postpone traveling
|
||||
path.clear();
|
||||
current = p_state_machine->start_node;
|
||||
playing = true;
|
||||
play_start = true;
|
||||
} else {
|
||||
// stopped, invalid state
|
||||
String node_name = start_request;
|
||||
start_request = StringName(); //clear start request
|
||||
ERR_FAIL_V_MSG(0, "Can't travel to '" + node_name + "' if state machine is not playing.");
|
||||
}
|
||||
} else {
|
||||
if (!_travel(p_state_machine, start_request)) {
|
||||
// can't travel, then teleport
|
||||
path.clear();
|
||||
current = start_request;
|
||||
}
|
||||
start_request = StringName(); //clear start request
|
||||
}
|
||||
} else {
|
||||
// teleport to start
|
||||
path.clear();
|
||||
current = start_request;
|
||||
playing = true;
|
||||
play_start = true;
|
||||
start_request = StringName(); //clear start request
|
||||
}
|
||||
|
||||
start_request = StringName(); //clear start request
|
||||
}
|
||||
|
||||
bool do_start = (p_seek && p_time == 0) || play_start || current == StringName();
|
||||
|
|
Loading…
Reference in New Issue