From 3bd5f489ceb4e21b0a758aad6fa3e062076d82a9 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 24 Dec 2025 00:56:03 +0300 Subject: [PATCH] Added audio settings saving --- game/entities/world/game.gd | 2 - game/managers/save_manager.gd | 1 - game/managers/settings_manager.gd | 71 ++++++++++++++++++++++++++++--- game/menu/common/options.gd | 26 +++++++++-- game/menu/common/options.tscn | 10 +++-- 5 files changed, 94 insertions(+), 16 deletions(-) diff --git a/game/entities/world/game.gd b/game/entities/world/game.gd index 9a0f9bd..dfb733f 100644 --- a/game/entities/world/game.gd +++ b/game/entities/world/game.gd @@ -85,8 +85,6 @@ func _process_to_next_area() -> void: SaveManager.game_data.current_stage_index = 0 SaveManager.game_data.current_sector_index = 0 - print(SaveManager.game_data.current_area_index) - if SaveManager.game_data.current_area_index >= world_data.areas.size(): SaveManager.delete_game_data() victory_screen.show() diff --git a/game/managers/save_manager.gd b/game/managers/save_manager.gd index 3bfb6d6..33c7f82 100644 --- a/game/managers/save_manager.gd +++ b/game/managers/save_manager.gd @@ -90,7 +90,6 @@ func _set_player_values() -> void: var weapon_ids : Array[String] = [] for weapon in player_data.weapons: weapon_ids.append(weapon.id) - _save_file.set_value(CATEGORY_PLAYER, PLAYER_WEAPONS, weapon_ids) _save_file.set_value(CATEGORY_PLAYER, PLAYER_HULL, player_data.hull) diff --git a/game/managers/settings_manager.gd b/game/managers/settings_manager.gd index a9f129b..5718d69 100644 --- a/game/managers/settings_manager.gd +++ b/game/managers/settings_manager.gd @@ -7,13 +7,18 @@ const BASE_SIZE = Vector2i(640, 360) const CATEGORY_VIDEO = "video" const SETTING_FULLSCREEN = "fullscreen" const SETTING_WINDOW_FACTOR = "window_factor" +const CATEGORY_AUDIO = "audio" +const SETTING_MASTER_VOLUME = "master_volume" +const SETTING_UI_VOLUME = "ui_volume" +const SETTING_SFX_VOLUME = "sfx_volume" +const SETTING_MUSIC_VOLUME = "music_volume" var _config: ConfigFile var _fullscreen := false var fullscreen : bool: - get: + get(): return _fullscreen set(value): _fullscreen = value @@ -22,13 +27,49 @@ var fullscreen : bool: var _window_factor := 1 var window_factor : int: - get: + get(): return _window_factor set(value): - _window_factor = value + _window_factor = clampi(value, 1, 5) _apply_video_settings() _save_settings() +var _master_volume := 100 +var master_volume : int: + get(): + return _master_volume + set(value): + _master_volume = clampi(value, 0, 100) + _apply_audio_settings() + _save_settings() + +var _ui_volume := 100 +var ui_volume : int: + get(): + return _ui_volume + set(value): + _ui_volume = clampi(value, 0, 100) + _apply_audio_settings() + _save_settings() + +var _sfx_volume := 100 +var sfx_volume : int: + get(): + return _sfx_volume + set(value): + _sfx_volume = clampi(value, 0, 100) + _apply_audio_settings() + _save_settings() + +var _music_volume := 100 +var music_volume : int: + get(): + return _music_volume + set(value): + _music_volume = clampi(value, 0, 100) + _apply_audio_settings() + _save_settings() + func _ready() -> void: _config = ConfigFile.new() @@ -39,9 +80,14 @@ func _ready() -> void: func _load_settings() -> void: if _config.load(CONFIG_FILE) == OK: - _fullscreen = _config.get_value(CATEGORY_VIDEO, SETTING_FULLSCREEN, false) - _window_factor = _config.get_value(CATEGORY_VIDEO, SETTING_WINDOW_FACTOR, 0) - + _fullscreen = _config.get_value(CATEGORY_VIDEO, SETTING_FULLSCREEN, _fullscreen) + _window_factor = _config.get_value(CATEGORY_VIDEO, SETTING_WINDOW_FACTOR, _window_factor) + + _master_volume = _config.get_value(CATEGORY_AUDIO, SETTING_MASTER_VOLUME, _master_volume) + _ui_volume = _config.get_value(CATEGORY_AUDIO, SETTING_UI_VOLUME, _ui_volume) + _sfx_volume = _config.get_value(CATEGORY_AUDIO, SETTING_SFX_VOLUME, _sfx_volume) + _music_volume = _config.get_value(CATEGORY_AUDIO, SETTING_MUSIC_VOLUME, _music_volume) + _save_settings() @@ -52,11 +98,17 @@ func _save_settings() -> void: _config.set_value(CATEGORY_VIDEO, SETTING_FULLSCREEN, _fullscreen) _config.set_value(CATEGORY_VIDEO, SETTING_WINDOW_FACTOR, _window_factor) + _config.set_value(CATEGORY_AUDIO, SETTING_MASTER_VOLUME, _master_volume) + _config.set_value(CATEGORY_AUDIO, SETTING_UI_VOLUME, _ui_volume) + _config.set_value(CATEGORY_AUDIO, SETTING_SFX_VOLUME, _sfx_volume) + _config.set_value(CATEGORY_AUDIO, SETTING_MUSIC_VOLUME, _music_volume) + _config.save(CONFIG_FILE) func _apply_all_settings() -> void: _apply_video_settings() + _apply_audio_settings() func _apply_video_settings() -> void: @@ -67,6 +119,13 @@ func _apply_video_settings() -> void: _apply_window_scale() +func _apply_audio_settings() -> void: + AudioServer.set_bus_volume_linear(AudioServer.get_bus_index("Master"), _master_volume/100.0) + AudioServer.set_bus_volume_linear(AudioServer.get_bus_index("UI"), _ui_volume/100.0) + AudioServer.set_bus_volume_linear(AudioServer.get_bus_index("SFX"), _sfx_volume/100.0) + AudioServer.set_bus_volume_linear(AudioServer.get_bus_index("Music"), _music_volume/100.0) + + func _apply_window_scale() -> void: if _fullscreen: return diff --git a/game/menu/common/options.gd b/game/menu/common/options.gd index 53d12a1..ca57cf1 100644 --- a/game/menu/common/options.gd +++ b/game/menu/common/options.gd @@ -13,7 +13,7 @@ signal back @onready var credits_button : Button = $%CreditsButton @onready var back_button : Button = $%BackButton @onready var master_slider : Slider = $%MasterSlider -@onready var menu_slider : Slider = $%MenuSlider +@onready var ui_slider : Slider = $%UISlider @onready var sfx_slider : Slider = $%SFXSlider @onready var music_slider : Slider = $%MusicSlider @@ -52,17 +52,19 @@ func _setup_neighbors() -> void: func _load_current_settings() -> void: - print(SettingsManager.window_factor) fullscreen_button.button_pressed = SettingsManager.fullscreen for child in window_factor_buttons.get_children(): if child is Button: var button : Button = child var window_factor : int = button.get_meta(WINDOW_FACTOR, 0) - print(window_factor) if window_factor == SettingsManager.window_factor: button.button_pressed = true - print(button) _update_window_factor_disabled() + + master_slider.value = SettingsManager.master_volume + ui_slider.value = SettingsManager.ui_volume + sfx_slider.value = SettingsManager.sfx_volume + music_slider.value = SettingsManager.music_volume func _update_window_factor_disabled() -> void: @@ -88,3 +90,19 @@ func _on_window_factor_button_pressed(button: Button) -> void: var window_factor : int = button.get_meta(WINDOW_FACTOR, 0) if window_factor > 0: SettingsManager.window_factor = window_factor + + +func _on_master_volume_changed(value: float) -> void: + SettingsManager.master_volume = floor(value) + + +func _on_ui_volume_changed(value: float) -> void: + SettingsManager.ui_volume = floor(value) + + +func _on_sfx_volume_changed(value: float) -> void: + SettingsManager.sfx_volume = floor(value) + + +func _on_music_volume_changed(value: float) -> void: + SettingsManager.music_volume = floor(value) diff --git a/game/menu/common/options.tscn b/game/menu/common/options.tscn index 3afa10b..55baaee 100644 --- a/game/menu/common/options.tscn +++ b/game/menu/common/options.tscn @@ -119,11 +119,11 @@ value = 100.0 rounded = true scrollable = false -[node name="MenuLabel" type="Label" parent="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer"] +[node name="UILabel" type="Label" parent="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer"] layout_mode = 2 -text = "Menu Volume" +text = "UI Volume" -[node name="MenuSlider" type="HSlider" parent="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer"] +[node name="UISlider" type="HSlider" parent="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(100, 0) layout_mode = 2 @@ -190,5 +190,9 @@ alignment = 1 [connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="toggled" from="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer/FullscreenCheckButton" to="." method="_on_fullscreen_check_button_toggled"] +[connection signal="value_changed" from="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer/MasterSlider" to="." method="_on_master_volume_changed"] +[connection signal="value_changed" from="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer/UISlider" to="." method="_on_ui_volume_changed"] +[connection signal="value_changed" from="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer/SFXSlider" to="." method="_on_sfx_volume_changed"] +[connection signal="value_changed" from="MarginContainer/ScrollContainer/MarginContainer/OptionsGridContainer/MusicSlider" to="." method="_on_music_volume_changed"] [connection signal="pressed" from="MarginContainer/HBoxContainer/CreditsButton" to="." method="_on_credits_button_pressed"] [connection signal="pressed" from="MarginContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"]