From 771fbd282a3e98aa487878b9b6fac8d891074e65 Mon Sep 17 00:00:00 2001 From: Guilherme Felipe Date: Sat, 5 Jan 2019 20:04:01 -0200 Subject: [PATCH] Show play position of sub state machine Sub state machine now show the play position of the current state playing. --- .../animation_state_machine_editor.cpp | 23 +++++++++++++++++-- .../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 197ee772540..80d1eaa822e 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 anodesm = state_machine->get_node(next); + Ref 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 1c4c06090a9..135aff9027f 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 last_travel_path; float last_play_pos; + float play_pos; float error_time; String error_text;