瀏覽代碼

Merge pull request #24796 from guilhermefelipecgs/fix_play_pos_sm

Show play position of sub state machine
Hein-Pieter van Braam 6 年之前
父節點
當前提交
2ea75764c0
共有 2 個文件被更改,包括 22 次插入2 次删除
  1. 21 2
      editor/plugins/animation_state_machine_editor.cpp
  2. 1 0
      editor/plugins/animation_state_machine_editor.h

+ 21 - 2
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;

+ 1 - 0
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;