Usability improvements

This commit is contained in:
Serhii Snitsaruk 2024-01-25 22:01:14 +01:00
parent a22860b244
commit f912f0acc4
7 changed files with 45 additions and 15 deletions

View File

@ -175,14 +175,27 @@ void BlackboardPlan::rename_var(const String &p_name, const String &p_new_name)
emit_changed(); emit_changed();
} }
void BlackboardPlan::swap_vars(int p_idx_a, int p_idx_b) { void BlackboardPlan::move_var(int p_index, int p_new_index) {
ERR_FAIL_INDEX(p_idx_a, (int)var_map.size()); ERR_FAIL_INDEX(p_index, (int)var_map.size());
ERR_FAIL_INDEX(p_idx_b, (int)var_map.size()); ERR_FAIL_INDEX(p_new_index, (int)var_map.size());
Pair<String, BBVariable> a = var_list[p_idx_a]; if (p_index == p_new_index) {
Pair<String, BBVariable> b = var_list[p_idx_b]; return;
}
var_list.swap(var_list.find(a), var_list.find(b)); List<Pair<String, BBVariable>>::Element *E = var_list.front();
for (int i = 0; i < p_index; i++) {
E = E->next();
}
List<Pair<String, BBVariable>>::Element *E2 = var_list.front();
for (int i = 0; i < p_new_index; i++) {
E2 = E2->next();
}
var_list.move_before(E, E2);
if (p_new_index > p_index) {
var_list.move_before(E2, E);
}
notify_property_list_changed(); notify_property_list_changed();
emit_changed(); emit_changed();

View File

@ -60,7 +60,7 @@ public:
PackedStringArray list_vars() const; PackedStringArray list_vars() const;
String get_var_name(const BBVariable &p_var) const; String get_var_name(const BBVariable &p_var) const;
void rename_var(const String &p_name, const String &p_new_name); void rename_var(const String &p_name, const String &p_new_name);
void swap_vars(int idx_a, int idx_b); void move_var(int p_index, int p_new_index);
void sync_with_base_plan(); void sync_with_base_plan();
bool is_derived() const { return base.is_valid(); } bool is_derived() const { return base.is_valid(); }

View File

@ -113,13 +113,16 @@ void BlackboardPlanEditor::_hint_chosen(int id) {
void BlackboardPlanEditor::_drag_button_down(Control *p_row) { void BlackboardPlanEditor::_drag_button_down(Control *p_row) {
drag_index = p_row->get_index(); drag_index = p_row->get_index();
drag_start = drag_index;
drag_mouse_y_delta = 0.0; drag_mouse_y_delta = 0.0;
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED); Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
} }
void BlackboardPlanEditor::_drag_button_up() { void BlackboardPlanEditor::_drag_button_up() {
drag_index = -1;
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
plan->move_var(drag_start, drag_index);
drag_index = -1;
drag_start = -1;
_refresh(); _refresh();
} }
@ -140,13 +143,11 @@ void BlackboardPlanEditor::_drag_button_gui_input(const Ref<InputEvent> &p_event
return; return;
} }
float required_distance = 20.0f * EDSCALE; float required_distance = 30.0f * EDSCALE;
if (ABS(drag_mouse_y_delta) > required_distance) { if (ABS(drag_mouse_y_delta) > required_distance) {
int drag_dir = drag_mouse_y_delta > 0.0f ? 1 : -1; int drag_dir = drag_mouse_y_delta > 0.0f ? 1 : -1;
drag_mouse_y_delta -= required_distance * drag_dir; drag_mouse_y_delta -= required_distance * drag_dir;
plan->swap_vars(drag_index, drag_index + drag_dir);
Control *row = Object::cast_to<Control>(rows_vbox->get_child(drag_index)); Control *row = Object::cast_to<Control>(rows_vbox->get_child(drag_index));
Control *other_row = Object::cast_to<Control>(rows_vbox->get_child(drag_index + drag_dir)); Control *other_row = Object::cast_to<Control>(rows_vbox->get_child(drag_index + drag_dir));
ERR_FAIL_NULL(row); ERR_FAIL_NULL(row);
@ -412,21 +413,23 @@ void EditorInspectorPluginBBPlan::_parse_begin(Object *p_object) {
VBoxContainer *toolbar = memnew(VBoxContainer); VBoxContainer *toolbar = memnew(VBoxContainer);
margin_container->add_child(toolbar); margin_container->add_child(toolbar);
toolbar->set_h_size_flags(Control::SIZE_SHRINK_CENTER); toolbar->set_h_size_flags(Control::SIZE_EXPAND_FILL);
if (plan->is_derived()) { if (plan->is_derived()) {
Button *goto_btn = memnew(Button); Button *goto_btn = memnew(Button);
toolbar->add_child(goto_btn); toolbar->add_child(goto_btn);
goto_btn->set_text(TTR("Edit Base")); goto_btn->set_text(TTR("Edit Base"));
goto_btn->set_h_size_flags(Control::SIZE_SHRINK_CENTER); goto_btn->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
goto_btn->set_custom_minimum_size(Size2(200.0, 0.0) * EDSCALE); goto_btn->set_custom_minimum_size(Size2(150.0, 0.0) * EDSCALE);
BUTTON_SET_ICON(goto_btn, EditorInterface::get_singleton()->get_editor_theme()->get_icon(LW_NAME(Edit), LW_NAME(EditorIcons)));
goto_btn->connect(LW_NAME(pressed), callable_mp(this, &EditorInspectorPluginBBPlan::_open_base_plan).bind(plan)); goto_btn->connect(LW_NAME(pressed), callable_mp(this, &EditorInspectorPluginBBPlan::_open_base_plan).bind(plan));
} else { } else {
Button *edit_btn = memnew(Button); Button *edit_btn = memnew(Button);
toolbar->add_child(edit_btn); toolbar->add_child(edit_btn);
edit_btn->set_text(TTR("Manage...")); edit_btn->set_text(TTR("Manage..."));
edit_btn->set_h_size_flags(Control::SIZE_SHRINK_CENTER); edit_btn->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
edit_btn->set_custom_minimum_size(Size2(200.0, 0.0) * EDSCALE); edit_btn->set_custom_minimum_size(Size2(150.0, 0.0) * EDSCALE);
BUTTON_SET_ICON(edit_btn, EditorInterface::get_singleton()->get_editor_theme()->get_icon(LW_NAME(EditAddRemove), LW_NAME(EditorIcons)));
edit_btn->connect(LW_NAME(pressed), callable_mp(this, &EditorInspectorPluginBBPlan::_edit_plan).bind(plan)); edit_btn->connect(LW_NAME(pressed), callable_mp(this, &EditorInspectorPluginBBPlan::_edit_plan).bind(plan));
} }

View File

@ -46,6 +46,7 @@ private:
int last_index = 0; int last_index = 0;
int drag_mouse_y_delta = 0; int drag_mouse_y_delta = 0;
int drag_start = -1;
int drag_index = -1; int drag_index = -1;
Ref<BlackboardPlan> plan; Ref<BlackboardPlan> plan;

View File

@ -184,8 +184,9 @@ void LimboAIEditor::_update_history_buttons() {
} }
void LimboAIEditor::_new_bt() { void LimboAIEditor::_new_bt() {
BehaviorTree *bt = memnew(BehaviorTree); Ref<BehaviorTree> bt = memnew(BehaviorTree);
bt->set_root_task(memnew(BTSelector)); bt->set_root_task(memnew(BTSelector));
bt->set_blackboard_plan(memnew(BlackboardPlan));
EDIT_RESOURCE(bt); EDIT_RESOURCE(bt);
} }
@ -222,6 +223,11 @@ void LimboAIEditor::edit_bt(Ref<BehaviorTree> p_behavior_tree, bool p_force_refr
return; return;
} }
#ifdef LIMBOAI_MODULE
p_behavior_tree->editor_set_section_unfold("blackboard_plan", true);
p_behavior_tree->notify_property_list_changed();
#endif // LIMBOAI_MODULE
task_tree->load_bt(p_behavior_tree); task_tree->load_bt(p_behavior_tree);
int idx = history.find(p_behavior_tree); int idx = history.find(p_behavior_tree);
@ -698,6 +704,9 @@ void LimboAIEditor::_on_visibility_changed() {
void LimboAIEditor::_on_header_pressed() { void LimboAIEditor::_on_header_pressed() {
_update_header(); _update_header();
task_tree->deselect(); task_tree->deselect();
#ifdef LIMBOAI_MODULE
task_tree->get_bt()->editor_set_section_unfold("blackboard_plan", true);
#endif // LIMBOAI_MODULE
EDIT_RESOURCE(task_tree->get_bt()); EDIT_RESOURCE(task_tree->get_bt());
} }

View File

@ -64,6 +64,8 @@ LimboStringNames::LimboStringNames() {
doc_italic = SN("doc_italic"); doc_italic = SN("doc_italic");
draw = SN("draw"); draw = SN("draw");
Duplicate = SN("Duplicate"); Duplicate = SN("Duplicate");
Edit = SN("Edit");
EditAddRemove = SN("EditAddRemove");
Editor = SN("Editor"); Editor = SN("Editor");
EditorFonts = SN("EditorFonts"); EditorFonts = SN("EditorFonts");
EditorIcons = SN("EditorIcons"); EditorIcons = SN("EditorIcons");

View File

@ -78,6 +78,8 @@ public:
StringName doc_italic; StringName doc_italic;
StringName draw; StringName draw;
StringName Duplicate; StringName Duplicate;
StringName Edit;
StringName EditAddRemove;
StringName Editor; StringName Editor;
StringName EditorFonts; StringName EditorFonts;
StringName EditorIcons; StringName EditorIcons;