156 lines
5.0 KiB
GDScript
156 lines
5.0 KiB
GDScript
@tool
|
|
extends Control
|
|
class_name GuiSettings
|
|
|
|
@onready var settings: SettingsData = GameInfo.settings_data
|
|
|
|
@export_tool_button("Open", "Callable") var open_action = open_settings
|
|
@export_tool_button("Close", "Callable") var close_action = close_settings
|
|
|
|
func _ready():
|
|
setup_languages()
|
|
setup_sound()
|
|
setup_video()
|
|
setup_controls()
|
|
setup_difficulty()
|
|
setup_twitch()
|
|
update_twitch_pseudo()
|
|
show()
|
|
%SettingsWindow.hide()
|
|
%SettingsWindow.closed.connect(
|
|
func():
|
|
GameInfo.save_settings()
|
|
hide()
|
|
)
|
|
TwitchConnection.pseudo_gathered_updated.connect(
|
|
func(_p): update_twitch_pseudo()
|
|
)
|
|
hide()
|
|
|
|
func _process(_delta: float) -> void:
|
|
if settings and is_node_ready():
|
|
var window_mode := DisplayServer.window_get_mode()
|
|
if window_mode != settings.window_mode:
|
|
settings.window_mode = window_mode
|
|
GameInfo.save_settings()
|
|
if window_mode == DisplayServer.WINDOW_MODE_WINDOWED:
|
|
var window := get_tree().root.get_window()
|
|
var changed := false
|
|
if settings.window_size != window.size:
|
|
settings.window_size = window.size
|
|
changed = true
|
|
if settings.window_pos != window.position:
|
|
settings.window_pos = window.position
|
|
changed = true
|
|
if changed:
|
|
GameInfo.save_settings()
|
|
|
|
func open_settings():
|
|
setup_languages()
|
|
setup_sound()
|
|
setup_video()
|
|
setup_controls()
|
|
setup_difficulty()
|
|
setup_twitch()
|
|
update_twitch_pseudo()
|
|
show()
|
|
%SettingsWindow.open_window()
|
|
|
|
func close_settings():
|
|
GameInfo.save_settings()
|
|
%SettingsWindow.close_window()
|
|
hide()
|
|
|
|
func setup_languages():
|
|
var optionButton := (%LanguageOptionButton as OptionButton)
|
|
optionButton.clear()
|
|
for language in SettingsData.AVAILABLE_LANGUAGES_LABEL:
|
|
optionButton.add_item(language)
|
|
optionButton.selected = SettingsData.AVAILABLE_LANGUAGES.find(settings.language)
|
|
|
|
func setup_sound():
|
|
%MasterSlider.value = settings.master_volume
|
|
%MusicSlider.value = settings.music_volume
|
|
%EnvSlider.value = settings.ambiance_volume
|
|
%SFXSlider.value = settings.sfx_volume
|
|
|
|
func setup_video():
|
|
%FullScreenCheckBox.button_pressed = settings.window_mode == DisplayServer.WINDOW_MODE_FULLSCREEN
|
|
%UiSizeSlider.value = settings.ui_size
|
|
|
|
func setup_controls():
|
|
%AutoPickupCheckBox.button_pressed = settings.auto_pickup
|
|
%FovSlider.value = settings.fov
|
|
%SensibilitySlider.value = settings.mouse_sensivity
|
|
|
|
func setup_difficulty():
|
|
%StoryModeDifficultyOptionButton.selected = settings.story_mode_difficulty
|
|
|
|
func setup_twitch():
|
|
%TwitchActivationCheckBox.button_pressed = settings.activate_twitch_integration
|
|
%TwitchChannelLineEdit.text = settings.twitch_channel
|
|
|
|
func update_twitch_pseudo():
|
|
if GameInfo.settings_data.activate_twitch_integration:
|
|
%TwitchPseudoCount.text = tr("PSEUDO_GATHERED_%d") % len(TwitchConnection.pseudo_gathered)
|
|
else:
|
|
%TwitchPseudoCount.text = "TWITCH_NOT_CONNECTED"
|
|
|
|
|
|
func _on_language_option_button_item_selected(index: int):
|
|
settings.language = SettingsData.AVAILABLE_LANGUAGES[index]
|
|
|
|
|
|
func _on_full_screen_check_box_toggled(toggled_on: bool):
|
|
settings.window_mode = DisplayServer.WINDOW_MODE_FULLSCREEN if toggled_on else DisplayServer.WINDOW_MODE_WINDOWED
|
|
|
|
func _on_master_slider_drag_ended(_value_changed: bool) -> void:
|
|
%MasterTestPlayer.play()
|
|
settings.master_volume = clamp(%MasterSlider.value, 0.0, 1.0)
|
|
|
|
func _on_music_slider_drag_endeded(_value_changed: bool) -> void:
|
|
%MusicTestPlayer.play()
|
|
settings.music_volume = clamp(%MusicSlider.value, 0.0, 1.0)
|
|
|
|
func _on_env_slider_drag_endeded(_value_changed: bool) -> void:
|
|
%AmbianceTestPlayer.play()
|
|
settings.ambiance_volume = clamp(%EnvSlider.value, 0.0, 1.0)
|
|
|
|
func _on_sfx_slider_drag_endeded(_value_changed: bool) -> void:
|
|
%SfxTestPlayer.play()
|
|
settings.sfx_volume = clamp(%SFXSlider.value, 0.0, 1.0)
|
|
|
|
func _on_auto_pickup_check_box_toggled(toggled_on: bool):
|
|
settings.auto_pickup = toggled_on
|
|
|
|
func _on_fov_slider_value_changed(value):
|
|
if is_node_ready():
|
|
settings.fov = value
|
|
|
|
func _on_sensibility_slider_value_changed(value: float):
|
|
settings.mouse_sensivity = value
|
|
|
|
func _on_ui_size_slider_value_changed(value: float):
|
|
settings.ui_size = %UiSizeSlider.value
|
|
|
|
func _on_twitch_activation_check_box_toggled(toggled_on: bool):
|
|
settings.activate_twitch_integration = toggled_on
|
|
|
|
func _on_twitch_channel_line_edit_editing_toggled(toggled_on: bool):
|
|
if not toggled_on:
|
|
settings.twitch_channel = %TwitchChannelLineEdit.text
|
|
|
|
func _on_story_mode_difficulty_option_button_item_selected(index: int):
|
|
settings.story_mode_difficulty = index
|
|
|
|
func _on_reset_pressed() -> void:
|
|
settings.reset_settings()
|
|
setup_languages()
|
|
setup_sound()
|
|
setup_video()
|
|
setup_controls()
|
|
setup_difficulty()
|
|
setup_twitch()
|
|
update_twitch_pseudo()
|
|
GameInfo.save_settings()
|