promiscuity/scenes/UI/Settings.gd

64 lines
2.7 KiB
GDScript

extends Node2D
@onready var _tab_bar: TabBar = $MarginContainer/VBoxContainer/TabBar
@onready var _tab_container: TabContainer = $MarginContainer/VBoxContainer/TabContainer
@onready var _music_volume_slider: HSlider = $MarginContainer/VBoxContainer/TabContainer/Audio/AudioVBox/MusicVolumeGroup/MusicVolumeSlider
@onready var _music_volume_value: Label = $MarginContainer/VBoxContainer/TabContainer/Audio/AudioVBox/MusicVolumeGroup/MusicVolumeValue
@onready var _music_mute_checkbox: CheckBox = $MarginContainer/VBoxContainer/TabContainer/Audio/AudioVBox/MusicVolumeGroup/MusicMuteCheckBox
@onready var _menu_music: AudioStreamPlayer = get_tree().get_root().get_node_or_null("MenuMusic")
func _ready() -> void:
_tab_bar.tab_changed.connect(_on_tab_bar_tab_changed)
_tab_container.tab_changed.connect(_on_tab_container_tab_changed)
_tab_container.current_tab = _tab_bar.current_tab
_music_volume_slider.value_changed.connect(_on_music_volume_changed)
_music_mute_checkbox.toggled.connect(_on_music_mute_toggled)
_sync_audio_controls()
func _input(event):
if event.is_action_pressed("ui_cancel"):
get_tree().change_scene_to_file("uid://b4k81taauef4q")
func _on_tab_bar_tab_changed(tab_index: int) -> void:
if _tab_container.current_tab != tab_index:
_tab_container.current_tab = tab_index
func _on_tab_container_tab_changed(tab_index: int) -> void:
if _tab_bar.current_tab != tab_index:
_tab_bar.current_tab = tab_index
func _sync_audio_controls() -> void:
var value: float = 0.7
var muted: bool = false
if _menu_music:
if _menu_music.has_method("get_user_volume"):
value = _menu_music.get_user_volume()
if _menu_music.has_method("is_user_muted"):
muted = _menu_music.is_user_muted()
_music_volume_slider.set_block_signals(true)
_music_volume_slider.value = value
_music_volume_slider.set_block_signals(false)
_music_volume_slider.editable = not muted
_music_mute_checkbox.set_block_signals(true)
_music_mute_checkbox.button_pressed = muted
_music_mute_checkbox.set_block_signals(false)
_update_music_volume_label(value, muted)
func _on_music_volume_changed(value: float) -> void:
if _menu_music and _menu_music.has_method("set_user_volume"):
_menu_music.set_user_volume(value)
_update_music_volume_label(value, _music_mute_checkbox.button_pressed)
func _on_music_mute_toggled(pressed: bool) -> void:
if _menu_music and _menu_music.has_method("set_user_muted"):
_menu_music.set_user_muted(pressed)
_music_volume_slider.editable = not pressed
_update_music_volume_label(_music_volume_slider.value, pressed)
func _update_music_volume_label(value: float, muted: bool) -> void:
if muted:
_music_volume_value.text = "Muted"
else:
var percent: int = int(round(value * 100.0))
_music_volume_value.text = str(percent) + "%"