extends CanvasLayer signal exited @onready var master_bus_slider = %HSliderMasterBus as HSlider @onready var sfx_bus_slider = %HSliderSfxBus as HSlider @onready var dialog_bus_slider = %HSliderDialogBus as HSlider @onready var autosave_box = %AutoSaveCheckBox as CheckBox @onready var autosave_time_edit = %SaveTimeLineEdit as LineEdit @onready var fullscreen_box = %FullscreenBox as CheckBox @onready var top_box = %TopBox as CheckBox @onready var index_btn = %IndexBtn as Button @onready var exit_btn = %ExitBtn as Button @onready var diary_btn = %DiaryBtn as Button func _ready(): layer = GlobalConfig.CANVAS_LAYER_SETTINGS visibility_changed.connect(_on_visibility_changed) # bus master_bus_slider.value = db_to_linear( AudioServer.get_bus_volume_db(AudioServer.get_bus_index("Master")) ) sfx_bus_slider.value = db_to_linear( AudioServer.get_bus_volume_db(AudioServer.get_bus_index("game_sfx")) ) dialog_bus_slider.value = db_to_linear( AudioServer.get_bus_volume_db(AudioServer.get_bus_index("dialog")) ) master_bus_slider.value_changed.connect(_on_master_bus_slider_value_changed) sfx_bus_slider.value_changed.connect(_on_sfx_bus_slider_value_changed) dialog_bus_slider.value_changed.connect(_on_dialog_bus_slider_value_changed) # auto save autosave_box.button_pressed = GlobalConfigManager.config.auto_save_enabled autosave_time_edit.editable = GlobalConfigManager.config.auto_save_enabled autosave_time_edit.text = str(GlobalConfigManager.config.auto_save_seconds) autosave_box.toggled.connect(_on_autosave_box_toggled) autosave_time_edit.text_submitted.connect(_on_autosave_time_edit_text_submitted) autosave_time_edit.focus_exited.connect(_on_autosave_time_edit_text_submitted) # window fullscreen_box.button_pressed = GlobalConfigManager.config.window_fullscreen top_box.button_pressed = GlobalConfigManager.config.window_top fullscreen_box.toggled.connect(_on_fullscreen_box_toggled) top_box.toggled.connect(_on_top_box_toggled) # navigation exit_btn.pressed.connect(_on_exit_btn_pressed) index_btn.pressed.connect(_on_index_btn_pressed) diary_btn.pressed.connect(_on_diary_btn_pressed) func _on_visibility_changed() -> void: if visible: get_tree().paused = true SceneManager.lock_player() else: get_tree().paused = false SceneManager.unlock_player() func exit_settings(): visible = false exited.emit() func _on_master_bus_slider_value_changed(value: float) -> void: var db_value = linear_to_db(value) GlobalConfigManager.config.db_master = db_value AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), db_value) func _on_sfx_bus_slider_value_changed(value: float) -> void: var db_value = linear_to_db(value) GlobalConfigManager.config.db_game_sfx = db_value AudioServer.set_bus_volume_db(AudioServer.get_bus_index("game_sfx"), db_value) func _on_dialog_bus_slider_value_changed(value: float) -> void: var db_value = linear_to_db(value) GlobalConfigManager.config.db_dialog = db_value AudioServer.set_bus_volume_db(AudioServer.get_bus_index("dialog"), db_value) func _on_autosave_box_toggled(is_pressed: bool) -> void: GlobalConfigManager.config.auto_save_enabled = is_pressed autosave_time_edit.editable = GlobalConfigManager.config.auto_save_enabled func _on_autosave_time_edit_text_submitted(_text = null) -> void: var seconds = autosave_time_edit.text.to_int() # limit the value, at least 10 seconds if seconds < 10: seconds = 10 autosave_time_edit.text = str(seconds) GlobalConfigManager.config.auto_save_seconds = seconds func _on_fullscreen_box_toggled(is_pressed: bool) -> void: if is_pressed: get_window().mode = Window.MODE_FULLSCREEN else: get_window().mode = Window.MODE_WINDOWED GlobalConfigManager.config.window_fullscreen = is_pressed func _on_top_box_toggled(is_pressed: bool) -> void: get_window().always_on_top = is_pressed GlobalConfigManager.config.window_top = is_pressed func _on_exit_btn_pressed() -> void: SceneManager.quit_game() func _on_index_btn_pressed() -> void: ArchiveManager.save_all() SceneManager.checkout_index_page() func _on_diary_btn_pressed() -> void: pass # Replace with function body. func _unhandled_key_input(event: InputEvent) -> void: if not visible: return # settings 界面接受所有输入事件 get_viewport().set_input_as_handled() if event.is_action_pressed("escape"): exit_settings()