@@ -399,8 +399,7 @@ void LimboAIEditor::_set_as_dirty(const Ref<BehaviorTree> &p_bt, bool p_dirty) {
399
399
}
400
400
}
401
401
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) {
404
403
ERR_FAIL_COND_MSG (DirAccess::dir_exists_absolute (task_dir), " LimboAIEditor: Directory already exists: " + task_dir);
405
404
406
405
Error err = DirAccess::make_dir_recursive_absolute (task_dir);
@@ -1045,7 +1044,10 @@ void LimboAIEditor::_on_filesystem_changed() {
1045
1044
}
1046
1045
1047
1046
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" ));
1049
1051
}
1050
1052
1051
1053
void LimboAIEditor::_task_type_selected (const String &p_class_or_path) {
@@ -1415,12 +1417,12 @@ void LimboAIEditor::_update_banners() {
1415
1417
}
1416
1418
}
1417
1419
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) {
1420
1422
if (!task_dir.is_empty () && !DirAccess::dir_exists_absolute (task_dir)) {
1421
1423
ActionBanner *banner = memnew (ActionBanner);
1422
1424
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 );
1424
1426
banner->add_action (TTR (" Edit Path..." ), callable_mp (this , &LimboAIEditor::_edit_project_settings));
1425
1427
banner->add_spacer ();
1426
1428
banner->add_action (TTR (" Help..." ), callable_mp (LimboUtility::get_singleton (), &LimboUtility::open_doc_custom_tasks));
@@ -1893,9 +1895,9 @@ LimboAIEditor::LimboAIEditor() {
1893
1895
BASE_CONTROL ()->add_child (disk_changed);
1894
1896
1895
1897
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 );
1899
1901
1900
1902
String bt_default_dir = GLOBAL_GET (" limbo_ai/behavior_tree/behavior_tree_default_dir" );
1901
1903
save_dialog->set_current_dir (bt_default_dir);
0 commit comments