extends Control signal back_to_main_menu @onready var master_slider = $SettingsContainer/MasterVolumeContainer/MasterVolumeSlider @onready var music_slider = $SettingsContainer/MusicVolumeContainer/MusicVolumeSlider @onready var sfx_slider = $SettingsContainer/SFXVolumeContainer/SFXVolumeSlider @onready var language_selector = $SettingsContainer/LanguageContainer/LanguageSelector @export var settings_manager: Node = SettingsManager @export var localization_manager: Node = LocalizationManager var language_codes = [] func _ready(): 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() update_text() func _on_volume_slider_changed(value, setting_key): settings_manager.set_setting(setting_key, value) var bus_map = { "master_volume": "Master", "music_volume": "Music", "sfx_volume": "SFX" } if bus_map.has(setting_key): var bus_index = AudioServer.get_bus_index(bus_map[setting_key]) if bus_index < 0: return if setting_key == "music_volume": AudioManager.update_music_volume(value) else: AudioServer.set_bus_volume_db(bus_index, linear_to_db(value)) func _exit_settings(): print("Exiting settings") settings_manager.save_settings() back_to_main_menu.emit() func _input(event): if event.is_action_pressed("ui_cancel") or event.is_action_pressed("ui_menu_toggle"): print("ESC pressed in settings") _exit_settings() get_viewport().set_input_as_handled() func _on_back_button_pressed(): print("Back button pressed") _exit_settings() func setup_language_selector(): var languages_data = settings_manager.get_languages_data() if languages_data.has("languages"): language_selector.clear() language_codes.clear() for lang_code in languages_data.languages.keys(): language_codes.append(lang_code) var display_name = languages_data.languages[lang_code]["display_name"] language_selector.add_item(display_name) 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_language_selector_item_selected(index: int): if index < language_codes.size(): var selected_lang = language_codes[index] settings_manager.set_setting("language", selected_lang) print("Language changed to: ", selected_lang) localization_manager.change_language(selected_lang) func update_text(): $SettingsContainer/SettingsTitle.text = tr("settings_title") $SettingsContainer/MasterVolumeContainer/MasterVolume.text = tr("master_volume") $SettingsContainer/MusicVolumeContainer/MusicVolume.text = tr("music_volume") $SettingsContainer/SFXVolumeContainer/SFXVolume.text = tr("sfx_volume") $SettingsContainer/LanguageContainer/LanguageLabel.text = tr("language") $BackButtonContainer/BackButton.text = tr("back")