@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: 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()