Skip to content

Commit

Permalink
Open owner scene when builtin BT is edited (or tab switched)
Browse files Browse the repository at this point in the history
  • Loading branch information
limbonaut committed Nov 4, 2024
1 parent 0347672 commit e5849d2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
34 changes: 22 additions & 12 deletions editor/limbo_ai_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,29 @@
#include <godot_cpp/classes/ref_counted.hpp>
#include <godot_cpp/classes/resource_loader.hpp>
#include <godot_cpp/classes/resource_saver.hpp>
#include <godot_cpp/classes/scene_tree.hpp>
#include <godot_cpp/classes/script.hpp>
#include <godot_cpp/classes/script_editor.hpp>
#include <godot_cpp/classes/script_editor_base.hpp>
#include <godot_cpp/classes/v_separator.hpp>
#include <godot_cpp/core/error_macros.hpp>
#endif // LIMBOAI_GDEXTENSION

namespace {

// If built-in resource - switch to the owner scene (open it if not already).
inline void _switch_to_owner_scene_if_builtin(const Ref<BehaviorTree> &p_behavior_tree) {
if (p_behavior_tree.is_valid() && p_behavior_tree->get_path().contains("::")) {
String current_scene = SCENE_TREE()->get_edited_scene_root()->get_scene_file_path();
String scene_path = p_behavior_tree->get_path().get_slice("::", 0);
if (current_scene != scene_path) {
EditorInterface::get_singleton()->open_scene_from_path(scene_path);
}
}
}

} // unnamed namespace

//**** LimboAIEditor

_FORCE_INLINE_ String _get_script_template_path() {
Expand Down Expand Up @@ -291,6 +307,8 @@ void LimboAIEditor::_disable_editing() {
void LimboAIEditor::edit_bt(const Ref<BehaviorTree> &p_behavior_tree, bool p_force_refresh) {
ERR_FAIL_COND_MSG(p_behavior_tree.is_null(), "p_behavior_tree is null");

_switch_to_owner_scene_if_builtin(p_behavior_tree);

if (!p_force_refresh && task_tree->get_bt() == p_behavior_tree) {
return;
}
Expand Down Expand Up @@ -882,6 +900,7 @@ void LimboAIEditor::_on_tree_task_activated() {

void LimboAIEditor::_on_visibility_changed() {
if (task_tree->is_visible_in_tree()) {
_switch_to_owner_scene_if_builtin(task_tree->get_bt());
Ref<BTTask> sel = task_tree->get_selected();
if (sel.is_valid()) {
EDIT_RESOURCE(sel);
Expand All @@ -899,16 +918,6 @@ void LimboAIEditor::_on_visibility_changed() {
}
}

void LimboAIEditor::_on_header_pressed() {
task_tree->clear_selection();
#ifdef LIMBOAI_MODULE
if (task_tree->get_bt().is_valid()) {
task_tree->get_bt()->editor_set_section_unfold("blackboard_plan", true);
}
#endif // LIMBOAI_MODULE
EDIT_RESOURCE(task_tree->get_bt());
}

void LimboAIEditor::_on_save_pressed() {
if (task_tree->get_bt().is_null()) {
return;
Expand Down Expand Up @@ -1959,8 +1968,9 @@ void LimboAIEditorPlugin::edit(Object *p_object) {
#elif LIMBOAI_GDEXTENSION
void LimboAIEditorPlugin::_edit(Object *p_object) {
#endif
if (Object::cast_to<BehaviorTree>(p_object)) {
limbo_ai_editor->edit_bt(Object::cast_to<BehaviorTree>(p_object));
Ref<BehaviorTree> bt = Object::cast_to<BehaviorTree>(p_object);
if (bt.is_valid()) {
limbo_ai_editor->edit_bt(bt);
}
}

Expand Down
1 change: 0 additions & 1 deletion editor/limbo_ai_editor_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,6 @@ class LimboAIEditor : public Control {
void _on_tree_task_selected(const Ref<BTTask> &p_task);
void _on_tree_task_activated();
void _on_visibility_changed();
void _on_header_pressed();
void _on_save_pressed();
void _on_history_back();
void _on_history_forward();
Expand Down

0 comments on commit e5849d2

Please sign in to comment.