TaskPalette: Shift+Click to add task after the selected and on the same level as the selected task.
This commit is contained in:
parent
c20e0dfc2d
commit
a2a2ba1f7b
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "core/error/error_macros.h"
|
#include "core/error/error_macros.h"
|
||||||
|
#include "core/input/input.h"
|
||||||
#include "editor/debugger/editor_debugger_node.h"
|
#include "editor/debugger/editor_debugger_node.h"
|
||||||
#include "editor/debugger/script_editor_debugger.h"
|
#include "editor/debugger/script_editor_debugger.h"
|
||||||
#include "editor/editor_file_system.h"
|
#include "editor/editor_file_system.h"
|
||||||
|
@ -49,21 +50,34 @@ void LimboAIEditor::_add_task(const Ref<BTTask> &p_task) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ERR_FAIL_COND(p_task.is_null());
|
ERR_FAIL_COND(p_task.is_null());
|
||||||
|
|
||||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||||
undo_redo->create_action(TTR("Add BT Task"));
|
undo_redo->create_action(TTR("Add BT Task"));
|
||||||
Ref<BTTask> parent = task_tree->get_selected();
|
|
||||||
|
int insert_idx = -1;
|
||||||
|
Ref<BTTask> selected = task_tree->get_selected();
|
||||||
|
Ref<BTTask> parent = selected;
|
||||||
if (parent.is_null()) {
|
if (parent.is_null()) {
|
||||||
|
// When no task is selected, use the root task.
|
||||||
parent = task_tree->get_bt()->get_root_task();
|
parent = task_tree->get_bt()->get_root_task();
|
||||||
|
selected = parent;
|
||||||
}
|
}
|
||||||
if (parent.is_null()) {
|
if (parent.is_null()) {
|
||||||
|
// When tree is empty.
|
||||||
undo_redo->add_do_method(task_tree->get_bt().ptr(), SNAME("set_root_task"), p_task);
|
undo_redo->add_do_method(task_tree->get_bt().ptr(), SNAME("set_root_task"), p_task);
|
||||||
undo_redo->add_undo_method(task_tree->get_bt().ptr(), SNAME("set_root_task"), task_tree->get_bt()->get_root_task());
|
undo_redo->add_undo_method(task_tree->get_bt().ptr(), SNAME("set_root_task"), task_tree->get_bt()->get_root_task());
|
||||||
} else {
|
} else {
|
||||||
undo_redo->add_do_method(parent.ptr(), SNAME("add_child"), p_task);
|
if (Input::get_singleton()->is_key_pressed(Key::SHIFT) && selected->get_parent().is_valid()) {
|
||||||
|
// When shift is pressed, insert task after the currently selected and on the same level.
|
||||||
|
parent = selected->get_parent();
|
||||||
|
insert_idx = selected->get_index() + 1;
|
||||||
|
}
|
||||||
|
undo_redo->add_do_method(parent.ptr(), SNAME("add_child_at_index"), p_task, insert_idx);
|
||||||
undo_redo->add_undo_method(parent.ptr(), SNAME("remove_child"), p_task);
|
undo_redo->add_undo_method(parent.ptr(), SNAME("remove_child"), p_task);
|
||||||
}
|
}
|
||||||
undo_redo->add_do_method(task_tree, SNAME("update_tree"));
|
undo_redo->add_do_method(task_tree, SNAME("update_tree"));
|
||||||
undo_redo->add_undo_method(task_tree, SNAME("update_tree"));
|
undo_redo->add_undo_method(task_tree, SNAME("update_tree"));
|
||||||
|
|
||||||
undo_redo->commit_action();
|
undo_redo->commit_action();
|
||||||
_mark_as_dirty(true);
|
_mark_as_dirty(true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue