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:
Rémi Verschelde 2019-11-30 17:05:17 +01:00 committed by GitHub
commit 5bf04d16f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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();