diff --git a/scripts/SettingsManager.gd b/scripts/SettingsManager.gd index c23b64b..ab9cf92 100644 --- a/scripts/SettingsManager.gd +++ b/scripts/SettingsManager.gd @@ -82,3 +82,9 @@ func load_languages(): func get_languages_data(): return languages_data + +func reset_settings_to_defaults() -> void: + for key in default_settings.keys(): + settings[key] = default_settings[key] + _apply_setting_side_effect(key, settings[key]) + save_settings() diff --git a/scripts/SettingsMenu.gd b/scripts/SettingsMenu.gd index 595eedf..d7e21bd 100644 --- a/scripts/SettingsMenu.gd +++ b/scripts/SettingsMenu.gd @@ -13,22 +13,38 @@ signal back_to_main_menu var language_codes = [] func _ready(): + add_to_group("localizable") print("SettingsMenu ready") - - var volume_sliders = { - "master_volume": master_slider, - "music_volume": music_slider, - "sfx_volume": sfx_slider - } - - for setting_key in volume_sliders.keys(): - var slider = volume_sliders[setting_key] - slider.value = settings_manager.get_setting(setting_key) - slider.value_changed.connect(_on_volume_slider_changed.bind(setting_key)) - setup_language_selector() + + var master_callback = _on_volume_slider_changed.bind("master_volume") + if not master_slider.value_changed.is_connected(master_callback): + master_slider.value_changed.connect(master_callback) + + var music_callback = _on_volume_slider_changed.bind("music_volume") + if not music_slider.value_changed.is_connected(music_callback): + music_slider.value_changed.connect(music_callback) + + var sfx_callback = _on_volume_slider_changed.bind("sfx_volume") + if not sfx_slider.value_changed.is_connected(sfx_callback): + sfx_slider.value_changed.connect(sfx_callback) + + if not language_selector.item_selected.is_connected(Callable(self, "_on_language_selector_item_selected")): + language_selector.item_selected.connect(_on_language_selector_item_selected) + + _update_controls_from_settings() update_text() +func _update_controls_from_settings(): + master_slider.value = settings_manager.get_setting("master_volume") + music_slider.value = settings_manager.get_setting("music_volume") + sfx_slider.value = settings_manager.get_setting("sfx_volume") + + var current_lang = settings_manager.get_setting("language") + var lang_index = language_codes.find(current_lang) + if lang_index >= 0: + language_selector.selected = lang_index + func _on_volume_slider_changed(value, setting_key): settings_manager.set_setting(setting_key, value) @@ -77,3 +93,10 @@ func update_text(): $SettingsContainer/SFXVolumeContainer/SFXVolume.text = tr("sfx_volume") $SettingsContainer/LanguageContainer/LanguageLabel.text = tr("language") $BackButtonContainer/BackButton.text = tr("back") + + +func _on_reset_setting_button_pressed() -> void: + print("Resetting settings") + settings_manager.reset_settings_to_defaults() + _update_controls_from_settings() + localization_manager.change_language(settings_manager.get_setting("language")) diff --git a/ui/SettingsMenu.tscn b/ui/SettingsMenu.tscn index 0bc13df..bf9514e 100644 --- a/ui/SettingsMenu.tscn +++ b/ui/SettingsMenu.tscn @@ -150,3 +150,4 @@ text = "Reset settings to default" [connection signal="value_changed" from="SettingsContainer/SFXVolumeContainer/SFXVolumeSlider" to="." method="_on_sfx_volume_changed"] [connection signal="item_selected" from="SettingsContainer/LanguageContainer/LanguageSelector" to="." method="_on_language_selector_item_selected"] [connection signal="pressed" from="BackButtonContainer/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="pressed" from="ResetSettingsContainer/ResetSettingButton" to="." method="_on_reset_setting_button_pressed"]