2026-09-21 21:46:43 +03:00
|
|
|
extends VBoxContainer
|
2026-10-03 13:21:53 +03:00
|
|
|
|
|
|
|
|
const MIN_VOLUME_DB := -50.0
|
|
|
|
|
const SILENT_VOLUME_DB := -80.0
|
|
|
|
|
|
|
|
|
|
@onready var sound_button: TextureButton = $Media/Sound
|
|
|
|
|
@onready var music_button: TextureButton = $Media/Music
|
|
|
|
|
@onready var sound_volume: HSlider = $Volume/SoundVolume
|
|
|
|
|
@onready var music_volume: HSlider = $Volume/MusicVolume
|
|
|
|
|
@onready var effects_player: OwniverseEffectsPlayer = $"../../FXPlayer"
|
|
|
|
|
@onready var music_player: OwniverseMusicPlayer = $"../../MusicPlayer"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
SaveManager.load_settings()
|
|
|
|
|
sound_button.set_pressed_no_signal(bool(Global.Settings.sound_enabled))
|
|
|
|
|
music_button.set_pressed_no_signal(bool(Global.Settings.music_enabled))
|
|
|
|
|
sound_volume.set_value_no_signal(float(Global.Settings.sound_volume) * sound_volume.max_value)
|
|
|
|
|
music_volume.set_value_no_signal(float(Global.Settings.music_volume) * music_volume.max_value)
|
|
|
|
|
_apply_sound_settings()
|
|
|
|
|
_apply_music_settings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_sound_pressed() -> void:
|
|
|
|
|
Global.Settings.sound_enabled = sound_button.button_pressed
|
|
|
|
|
_apply_sound_settings()
|
|
|
|
|
SaveManager.save_settings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_music_pressed() -> void:
|
|
|
|
|
Global.Settings.music_enabled = music_button.button_pressed
|
|
|
|
|
_apply_music_settings()
|
|
|
|
|
SaveManager.save_settings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_sound_volume_value_changed(value: float) -> void:
|
|
|
|
|
Global.Settings.sound_volume = value / sound_volume.max_value
|
|
|
|
|
_apply_bus_volume("FX", float(Global.Settings.sound_volume))
|
|
|
|
|
SaveManager.save_settings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _on_music_volume_value_changed(value: float) -> void:
|
|
|
|
|
Global.Settings.music_volume = value / music_volume.max_value
|
|
|
|
|
_apply_bus_volume("Music", float(Global.Settings.music_volume))
|
|
|
|
|
SaveManager.save_settings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _apply_sound_settings() -> void:
|
|
|
|
|
var bus_index: int = AudioServer.get_bus_index("FX")
|
|
|
|
|
AudioServer.set_bus_mute(bus_index, not bool(Global.Settings.sound_enabled))
|
|
|
|
|
effects_player.set_enabled(bool(Global.Settings.sound_enabled))
|
|
|
|
|
_apply_bus_volume("FX", float(Global.Settings.sound_volume))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _apply_music_settings() -> void:
|
|
|
|
|
music_player.set_enabled(bool(Global.Settings.music_enabled))
|
|
|
|
|
_apply_bus_volume("Music", float(Global.Settings.music_volume))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _apply_bus_volume(bus_name: String, value: float) -> void:
|
|
|
|
|
var bus_index: int = AudioServer.get_bus_index(bus_name)
|
|
|
|
|
if bus_index < 0:
|
|
|
|
|
push_warning("Missing audio bus: " + bus_name)
|
|
|
|
|
return
|
|
|
|
|
var normalized: float = clampf(value, 0.0, 1.0)
|
|
|
|
|
var volume_db: float = SILENT_VOLUME_DB if is_zero_approx(normalized) else lerpf(MIN_VOLUME_DB, 0.0, normalized)
|
|
|
|
|
AudioServer.set_bus_volume_db(bus_index, volume_db)
|