extends Control const max_vol = 30 const min_vol = -30 @onready var MasterValue = $Control/VBoxContainer/GridContainer/VolumeMasterContainer/VolumeMasterValue @onready var MasterSlider = $Control/VBoxContainer/GridContainer/VolumeMasterContainer/VolumeMasterSlider @onready var MusicValue = $Control/VBoxContainer/GridContainer/VolumeMusicContainer/VolumeMusicValue @onready var MusicSlider = $Control/VBoxContainer/GridContainer/VolumeMusicContainer/VolumeMusicSlider @onready var SFXValue = $Control/VBoxContainer/GridContainer/VolumeSFXContainer/VolumeSFXValue @onready var SFXSlider = $Control/VBoxContainer/GridContainer/VolumeSFXContainer/VolumeSFXSlider func _ready(): # When scene is instanced, load the settings from singleton refresh_menu(global_variables.volume_master, MasterValue, MasterSlider) refresh_menu(global_variables.volume_music, MusicValue, MusicSlider) refresh_menu(global_variables.volume_sfx, SFXValue, SFXSlider) $Control/VBoxContainer/GridContainer/FullscreenCheckButton.set_pressed_no_signal(((get_window().mode == 4) or (get_window().mode == 3))) func _input(event): if event.is_action_pressed("escape"): queue_free() func _on_ReturnButton_pressed(): queue_free() func _on_VolumeMasterSlider_value_changed(value): update_audio(value, 0, MasterSlider, "volume_master_enabled", "volume_master", MasterValue) func _on_VolumeMusicSlider_value_changed(value): update_audio(value, 1, MusicSlider, "volume_music_enabled", "volume_music", MusicValue) func _on_VolumeSFXSlider_value_changed(value): update_audio(value, 2, SFXSlider, "volume_sfx_enabled", "volume_sfx", SFXValue) func _on_FullscreenCheckButton_toggled(_button_pressed): get_window().mode = 4 if (!((get_window().mode == 4) or (get_window().mode == 3))) else 0 func update_audio(value, bus, slider, enabled_var, volume_var, valuelabel): # Converts percentage into a range value var new_volume = ((value/100) * (max_vol - min_vol)) + min_vol global_variables.set(volume_var, new_volume) valuelabel.text = str(value) + "%" AudioServer.set_bus_volume_db(bus, new_volume) if value == slider.min_value: AudioServer.set_bus_mute(bus, true) global_variables.set(enabled_var, false) else: AudioServer.set_bus_mute(bus, false) global_variables.set(enabled_var, false) func refresh_menu(value, valuelabel, slider): # Converts stored range values back into a percentage value var percentage = ((float(value) - min_vol) / (max_vol - min_vol) ) * 100 valuelabel.text = str(percentage) + "%" slider.value = percentage