Browse Source

Merge pull request #27644 from lupoDharkael/bus

Allow default audio bus layout modification
Rémi Verschelde 6 years ago
parent
commit
a994db62df

+ 2 - 0
core/project_settings.cpp

@@ -1004,6 +1004,8 @@ ProjectSettings::ProjectSettings() {
 	GLOBAL_DEF("application/config/use_custom_user_dir", false);
 	GLOBAL_DEF("application/config/custom_user_dir_name", "");
 	GLOBAL_DEF("application/config/project_settings_override", "");
+	GLOBAL_DEF("audio/default_bus_layout", "res://default_bus_layout.tres");
+	custom_prop_info["audio/default_bus_layout"] = PropertyInfo(Variant::STRING, "audio/default_bus_layout", PROPERTY_HINT_FILE, "*.tres");
 
 	action = Dictionary();
 	action["deadzone"] = Variant(0.5f);

+ 5 - 1
editor/dependency_editor.cpp

@@ -496,7 +496,8 @@ void DependencyRemoveDialog::ok_pressed() {
 			res->set_path("");
 		}
 
-		// If the file we are deleting for e.g. the main scene or default environment, we must clear its definition in Project Settings.
+		// If the file we are deleting for e.g. the main scene, default environment,
+		// or audio bus layout, we must clear its definition in Project Settings.
 		if (files_to_delete[i] == ProjectSettings::get_singleton()->get("application/config/icon")) {
 			ProjectSettings::get_singleton()->set("application/config/icon", "");
 		}
@@ -518,6 +519,9 @@ void DependencyRemoveDialog::ok_pressed() {
 		if (files_to_delete[i] == ProjectSettings::get_singleton()->get("gui/theme/custom_font")) {
 			ProjectSettings::get_singleton()->set("gui/theme/custom_font", "");
 		}
+		if (files_to_delete[i] == ProjectSettings::get_singleton()->get("audio/default_bus_layout")) {
+			ProjectSettings::get_singleton()->set("audio/default_bus_layout", "");
+		}
 
 		String path = OS::get_singleton()->get_resource_dir() + files_to_delete[i].replace_first("res://", "/");
 		print_verbose("Moving to trash: " + path);

+ 7 - 5
editor/editor_audio_buses.cpp

@@ -1180,14 +1180,16 @@ void EditorAudioBuses::_load_layout() {
 
 void EditorAudioBuses::_load_default_layout() {
 
-	Ref<AudioBusLayout> state = ResourceLoader::load("res://default_bus_layout.tres");
+	String layout_path = ProjectSettings::get_singleton()->get("audio/default_bus_layout");
+
+	Ref<AudioBusLayout> state = ResourceLoader::load(layout_path);
 	if (state.is_null()) {
-		EditorNode::get_singleton()->show_warning(TTR("There is no 'res://default_bus_layout.tres' file."));
+		EditorNode::get_singleton()->show_warning(vformat(TTR("There is no '%s' file."), layout_path));
 		return;
 	}
 
-	edited_path = "res://default_bus_layout.tres";
-	file->set_text(edited_path.get_file());
+	edited_path = layout_path;
+	file->set_text(layout_path.get_file());
 	AudioServer::get_singleton()->set_bus_layout(state);
 	_update_buses();
 	EditorNode::get_singleton()->get_undo_redo()->clear_history();
@@ -1316,7 +1318,7 @@ EditorAudioBuses::EditorAudioBuses() {
 
 	set_v_size_flags(SIZE_EXPAND_FILL);
 
-	edited_path = "res://default_bus_layout.tres";
+	edited_path = ProjectSettings::get_singleton()->get("audio/default_bus_layout");
 
 	file_dialog = memnew(EditorFileDialog);
 	List<String> ext;

+ 4 - 2
servers/audio_server.cpp

@@ -1045,8 +1045,10 @@ void AudioServer::update() {
 
 void AudioServer::load_default_bus_layout() {
 
-	if (ResourceLoader::exists("res://default_bus_layout.tres")) {
-		Ref<AudioBusLayout> default_layout = ResourceLoader::load("res://default_bus_layout.tres");
+	String layout_path = ProjectSettings::get_singleton()->get("audio/default_bus_layout");
+
+	if (ResourceLoader::exists(layout_path)) {
+		Ref<AudioBusLayout> default_layout = ResourceLoader::load(layout_path);
 		if (default_layout.is_valid()) {
 			set_bus_layout(default_layout);
 		}