Skip to content

Commit 0982804

Browse files
authored
Remove arbitrary limit on user task directories (#263)
Resolves GH-256
1 parent dd427c2 commit 0982804

File tree

3 files changed

+15
-13
lines changed

3 files changed

+15
-13
lines changed

editor/limbo_ai_editor_plugin.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,7 @@ void LimboAIEditor::_set_as_dirty(const Ref<BehaviorTree> &p_bt, bool p_dirty) {
399399
}
400400
}
401401

402-
void LimboAIEditor::_create_user_task_dir() {
403-
String task_dir = GLOBAL_GET("limbo_ai/behavior_tree/user_task_dir_1");
402+
void LimboAIEditor::_create_user_task_dir(String task_dir) {
404403
ERR_FAIL_COND_MSG(DirAccess::dir_exists_absolute(task_dir), "LimboAIEditor: Directory already exists: " + task_dir);
405404

406405
Error err = DirAccess::make_dir_recursive_absolute(task_dir);
@@ -1045,7 +1044,10 @@ void LimboAIEditor::_on_filesystem_changed() {
10451044
}
10461045

10471046
void LimboAIEditor::_on_new_script_pressed() {
1048-
SCRIPT_EDITOR()->open_script_create_dialog("BTAction", String(GLOBAL_GET("limbo_ai/behavior_tree/user_task_dir_1")).path_join("new_task"));
1047+
PackedStringArray user_task_directories = GLOBAL_GET("limbo_ai/behavior_tree/user_task_dirs");
1048+
ERR_FAIL_INDEX_MSG(0, user_task_directories.size(), "LimboAI: No user task directory set");
1049+
String default_task_dir = user_task_directories[0];
1050+
SCRIPT_EDITOR()->open_script_create_dialog("BTAction", default_task_dir.path_join("new_task"));
10491051
}
10501052

10511053
void LimboAIEditor::_task_type_selected(const String &p_class_or_path) {
@@ -1415,12 +1417,12 @@ void LimboAIEditor::_update_banners() {
14151417
}
14161418
}
14171419

1418-
for (String dir_setting : { "limbo_ai/behavior_tree/user_task_dir_1", "limbo_ai/behavior_tree/user_task_dir_2", "limbo_ai/behavior_tree/user_task_dir_3" }) {
1419-
String task_dir = GLOBAL_GET(dir_setting);
1420+
PackedStringArray user_task_directories = GLOBAL_GET("limbo_ai/behavior_tree/user_task_dirs");
1421+
for (const String &task_dir : user_task_directories) {
14201422
if (!task_dir.is_empty() && !DirAccess::dir_exists_absolute(task_dir)) {
14211423
ActionBanner *banner = memnew(ActionBanner);
14221424
banner->set_text(vformat(TTR("Task folder not found: %s"), task_dir));
1423-
banner->add_action(TTR("Create"), callable_mp(this, &LimboAIEditor::_create_user_task_dir), true);
1425+
banner->add_action(TTR("Create"), callable_mp(this, &LimboAIEditor::_create_user_task_dir).bind(task_dir), true);
14241426
banner->add_action(TTR("Edit Path..."), callable_mp(this, &LimboAIEditor::_edit_project_settings));
14251427
banner->add_spacer();
14261428
banner->add_action(TTR("Help..."), callable_mp(LimboUtility::get_singleton(), &LimboUtility::open_doc_custom_tasks));
@@ -1893,9 +1895,9 @@ LimboAIEditor::LimboAIEditor() {
18931895
BASE_CONTROL()->add_child(disk_changed);
18941896

18951897
GLOBAL_DEF(PropertyInfo(Variant::STRING, "limbo_ai/behavior_tree/behavior_tree_default_dir", PROPERTY_HINT_DIR), "res://ai/trees");
1896-
GLOBAL_DEF(PropertyInfo(Variant::STRING, "limbo_ai/behavior_tree/user_task_dir_1", PROPERTY_HINT_DIR), "res://ai/tasks");
1897-
GLOBAL_DEF(PropertyInfo(Variant::STRING, "limbo_ai/behavior_tree/user_task_dir_2", PROPERTY_HINT_DIR), "");
1898-
GLOBAL_DEF(PropertyInfo(Variant::STRING, "limbo_ai/behavior_tree/user_task_dir_3", PROPERTY_HINT_DIR), "");
1898+
PackedStringArray user_task_dir_default;
1899+
user_task_dir_default.append("res://ai/tasks");
1900+
GLOBAL_DEF(PropertyInfo(Variant::PACKED_STRING_ARRAY, "limbo_ai/behavior_tree/user_task_dirs", PROPERTY_HINT_TYPE_STRING, vformat("%s/%s:", Variant::STRING, PROPERTY_HINT_DIR)), user_task_dir_default);
18991901

19001902
String bt_default_dir = GLOBAL_GET("limbo_ai/behavior_tree/behavior_tree_default_dir");
19011903
save_dialog->set_current_dir(bt_default_dir);

editor/limbo_ai_editor_plugin.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class LimboAIEditor : public Control {
211211
void _update_task_tree(const Ref<BehaviorTree> &p_bt, const Ref<BTTask> &p_specific_task = nullptr);
212212
void _disable_editing();
213213
void _set_as_dirty(const Ref<BehaviorTree> &p_bt, bool p_dirty);
214-
void _create_user_task_dir();
214+
void _create_user_task_dir(String task_dir);
215215
void _remove_task_from_favorite(const String &p_task);
216216
void _save_and_restart();
217217
void _extract_subtree(const String &p_path);

util/limbo_task_db.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ void LimboTaskDB::scan_user_tasks() {
9595
tasks_cache[LimboTaskDB::get_misc_category()] = List<String>();
9696
}
9797

98-
for (int i = 1; i < 4; i++) {
99-
String dir1 = ProjectSettings::get_singleton()->get_setting_with_override("limbo_ai/behavior_tree/user_task_dir_" + itos(i));
100-
_populate_from_user_dir(dir1, &tasks_cache);
98+
PackedStringArray user_task_directories = GLOBAL_GET("limbo_ai/behavior_tree/user_task_dirs");
99+
for (const String &user_task_dir : user_task_directories) {
100+
_populate_from_user_dir(user_task_dir, &tasks_cache);
101101
}
102102

103103
for (KeyValue<String, List<String>> &E : tasks_cache) {

0 commit comments

Comments
 (0)