From 9e0489a0344095ae4e906286afcc3e4c541c14c6 Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Tue, 28 May 2024 11:16:37 +0200 Subject: [PATCH] Editor: Tab button to inspect blackboard plan --- editor/limbo_ai_editor_plugin.cpp | 11 +++++++++++ editor/limbo_ai_editor_plugin.h | 1 + editor/task_tree.cpp | 1 + gdextension/limboai.gdextension | 3 +++ icons/LimboEditBlackboard.svg | 1 + 5 files changed, 17 insertions(+) create mode 100644 icons/LimboEditBlackboard.svg diff --git a/editor/limbo_ai_editor_plugin.cpp b/editor/limbo_ai_editor_plugin.cpp index 2fbc58e..24807c5 100644 --- a/editor/limbo_ai_editor_plugin.cpp +++ b/editor/limbo_ai_editor_plugin.cpp @@ -1000,6 +1000,9 @@ void LimboAIEditor::_update_tabs() { tab_name = history[i]->get_path().trim_prefix("res://"); } tab_bar->add_tab(tab_name, LimboUtility::get_singleton()->get_task_icon("BehaviorTree")); + if (i == idx_history) { + tab_bar->set_tab_button_icon(tab_bar->get_tab_count() - 1, LimboUtility::get_singleton()->get_task_icon("LimboEditBlackboard")); + } } if (idx_history >= 0) { @@ -1090,6 +1093,13 @@ void LimboAIEditor::_tab_menu_option_selected(int p_id) { } } +void LimboAIEditor::_tab_plan_edited(int p_tab) { + ERR_FAIL_INDEX(p_tab, history.size()); + if (history[p_tab]->get_blackboard_plan().is_valid()) { + EDIT_RESOURCE(history[p_tab]->get_blackboard_plan()); + } +} + void LimboAIEditor::_reload_modified() { for (const String &res_path : disk_changed_files) { Ref res = RESOURCE_LOAD(res_path, "BehaviorTree"); @@ -1319,6 +1329,7 @@ void LimboAIEditor::_notification(int p_what) { tab_bar->connect("tab_close_pressed", callable_mp(this, &LimboAIEditor::_tab_closed)); tab_bar->connect(LW_NAME(gui_input), callable_mp(this, &LimboAIEditor::_tab_input)); tab_menu->connect(LW_NAME(id_pressed), callable_mp(this, &LimboAIEditor::_tab_menu_option_selected)); + tab_bar->connect("tab_button_pressed", callable_mp(this, &LimboAIEditor::_tab_plan_edited)); EDITOR_FILE_SYSTEM()->connect("resources_reload", callable_mp(this, &LimboAIEditor::_on_resources_reload)); diff --git a/editor/limbo_ai_editor_plugin.h b/editor/limbo_ai_editor_plugin.h index 123f668..b8f9879 100644 --- a/editor/limbo_ai_editor_plugin.h +++ b/editor/limbo_ai_editor_plugin.h @@ -204,6 +204,7 @@ private: void _tab_input(const Ref &p_input); void _show_tab_context_menu(); void _tab_menu_option_selected(int p_id); + void _tab_plan_edited(int p_tab); void _reload_modified(); void _resave_modified(String _str = ""); diff --git a/editor/task_tree.cpp b/editor/task_tree.cpp index 725e888..e292901 100644 --- a/editor/task_tree.cpp +++ b/editor/task_tree.cpp @@ -431,6 +431,7 @@ TaskTree::TaskTree() { tree->set_anchor(SIDE_RIGHT, ANCHOR_END); tree->set_anchor(SIDE_BOTTOM, ANCHOR_END); tree->set_allow_rmb_select(true); + tree->set_allow_reselect(true); tree->set_drag_forwarding(callable_mp(this, &TaskTree::_get_drag_data_fw), callable_mp(this, &TaskTree::_can_drop_data_fw), callable_mp(this, &TaskTree::_drop_data_fw)); } diff --git a/gdextension/limboai.gdextension b/gdextension/limboai.gdextension index b6f22c7..604181b 100644 --- a/gdextension/limboai.gdextension +++ b/gdextension/limboai.gdextension @@ -75,6 +75,7 @@ BehaviorTreeView = "res://addons/limboai/icons/BehaviorTreeView.svg" BlackboardPlan = "res://addons/limboai/icons/BlackboardPlan.svg" LimboAI = "res://addons/limboai/icons/LimboAI.svg" LimboDeselectAll = "res://addons/limboai/icons/LimboDeselectAll.svg" +LimboEditBlackboard = "res://addons/limboai/icons/LimboEditBlackboard.svg" LimboExtraBlackboard = "res://addons/limboai/icons/LimboExtraBlackboard.svg" LimboExtraClock = "res://addons/limboai/icons/LimboExtraClock.svg" LimboExtraVariable = "res://addons/limboai/icons/LimboExtraVariable.svg" @@ -84,6 +85,8 @@ LimboPercent = "res://addons/limboai/icons/LimboPercent.svg" LimboSelectAll = "res://addons/limboai/icons/LimboSelectAll.svg" LimboState = "res://addons/limboai/icons/LimboState.svg" LimboVarAdd = "res://addons/limboai/icons/LimboVarAdd.svg" +LimboVarEmpty = "res://addons/limboai/icons/LimboVarEmpty.svg" +LimboVarError = "res://addons/limboai/icons/LimboVarError.svg" LimboVarExists = "res://addons/limboai/icons/LimboVarExists.svg" LimboVarNotFound = "res://addons/limboai/icons/LimboVarNotFound.svg" LimboVarPrivate = "res://addons/limboai/icons/LimboVarPrivate.svg" diff --git a/icons/LimboEditBlackboard.svg b/icons/LimboEditBlackboard.svg new file mode 100644 index 0000000..45ffb92 --- /dev/null +++ b/icons/LimboEditBlackboard.svg @@ -0,0 +1 @@ + \ No newline at end of file