diff options
author | Guilherme Felipe <guilhermefelipecgs@gmail.com> | 2019-01-05 20:04:01 -0200 |
---|---|---|
committer | Guilherme Felipe <guilhermefelipecgs@gmail.com> | 2019-01-13 16:00:33 -0200 |
commit | 771fbd282a3e98aa487878b9b6fac8d891074e65 (patch) | |
tree | 89c8965c0e0c74762ab933549bf5997e67d8dbb1 | |
parent | 9eb93356086a67b84a79e3dbce9d53141f3df2a2 (diff) |
Show play position of sub state machine
Sub state machine now show the play position of the current state
playing.
-rw-r--r-- | editor/plugins/animation_state_machine_editor.cpp | 23 | ||||
-rw-r--r-- | editor/plugins/animation_state_machine_editor.h | 1 |
2 files changed, 22 insertions, 2 deletions
diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index 197ee77254..80d1eaa822 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -876,7 +876,7 @@ void AnimationNodeStateMachineEditor::_state_machine_pos_draw() { float len = MAX(0.0001, playback->get_current_length()); - float pos = CLAMP(playback->get_current_play_pos(), 0, len); + float pos = CLAMP(play_pos, 0, len); float c = pos / len; Color fg = get_color("font_color", "Label"); Color bg = fg; @@ -1011,7 +1011,7 @@ void AnimationNodeStateMachineEditor::_notification(int p_what) { bool is_playing = false; StringName current_node; StringName blend_from_node; - float play_pos = 0; + play_pos = 0; if (playback.is_valid()) { tp = playback->get_travel_path(); @@ -1046,6 +1046,25 @@ void AnimationNodeStateMachineEditor::_notification(int p_what) { state_machine_play_pos->update(); } + { + if (current_node != StringName() && state_machine->has_node(current_node)) { + + String next = current_node; + Ref<AnimationNodeStateMachine> anodesm = state_machine->get_node(next); + Ref<AnimationNodeStateMachinePlayback> current_node_playback; + + while (anodesm.is_valid()) { + current_node_playback = AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + next + "/playback"); + next += "/" + current_node_playback->get_current_node(); + anodesm = anodesm->get_node(current_node_playback->get_current_node()); + } + + // when current_node is a state machine, use playback of current_node to set play_pos + if (current_node_playback.is_valid()) + play_pos = current_node_playback->get_current_play_pos(); + } + } + if (last_play_pos != play_pos) { last_play_pos = play_pos; diff --git a/editor/plugins/animation_state_machine_editor.h b/editor/plugins/animation_state_machine_editor.h index 1c4c06090a..135aff9027 100644 --- a/editor/plugins/animation_state_machine_editor.h +++ b/editor/plugins/animation_state_machine_editor.h @@ -160,6 +160,7 @@ class AnimationNodeStateMachineEditor : public AnimationTreeNodeEditorPlugin { StringName last_current_node; Vector<StringName> last_travel_path; float last_play_pos; + float play_pos; float error_time; String error_text; |