From 9566606bdc29616c6cacbb85f7bf77a4f70506d8 Mon Sep 17 00:00:00 2001 From: betalars Date: Mon, 7 Oct 2024 11:16:18 +0200 Subject: [PATCH] WIP: enhancing setting focus handling --- src/dev-util/settings_popup.gd | 9 ++++++++ src/logic-scenes/main menu/audio_settings.gd | 9 ++++++-- .../main menu/content_settings.gd | 5 ++++- .../main menu/content_settings.tscn | 1 + .../main menu/gameplay_settings.gd | 5 ++++- src/logic-scenes/main menu/video_settings.gd | 6 ++++-- src/tab_container.gd | 21 +++++++++++++++++++ 7 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 src/dev-util/settings_popup.gd create mode 100644 src/tab_container.gd diff --git a/src/dev-util/settings_popup.gd b/src/dev-util/settings_popup.gd new file mode 100644 index 0000000..2274090 --- /dev/null +++ b/src/dev-util/settings_popup.gd @@ -0,0 +1,9 @@ +class_name SettingsPopup extends PanelContainer + +func show_settings(id: int = 0): + $AnimationPlayer.play("reveal") + $TabContainer.current_tab = id + State.pass_stage_to($TabContainer) + +func vanish(): + $AnimationPlayer.play("vanish") diff --git a/src/logic-scenes/main menu/audio_settings.gd b/src/logic-scenes/main menu/audio_settings.gd index 8215e1e..c62d51c 100644 --- a/src/logic-scenes/main menu/audio_settings.gd +++ b/src/logic-scenes/main menu/audio_settings.gd @@ -1,12 +1,16 @@ extends VBoxContainer signal changed +signal leave_stage var has_stage:bool = false: set(stage): has_stage = stage - visible = has_stage - %MusicPreview.playing = has_stage + if is_node_ready(): + %MusicPreview.playing = has_stage + if has_stage: + music_mute_switch.grab_focus() + var current_music_decay:float = 0 @@ -67,5 +71,6 @@ func update_ui_from_state(): sum_slider.value = State.main_volume func _on_exit_button_pressed() -> void: + leave_stage.emit() State.save_settings() State.leave_stage(self) diff --git a/src/logic-scenes/main menu/content_settings.gd b/src/logic-scenes/main menu/content_settings.gd index bbdfff5..b34c2ee 100644 --- a/src/logic-scenes/main menu/content_settings.gd +++ b/src/logic-scenes/main menu/content_settings.gd @@ -1,11 +1,13 @@ extends VBoxContainer signal changed +signal leave_stage var has_stage:bool = false: set(stage): has_stage = stage - visible = has_stage + if is_node_ready() and has_stage: + %ExpandButton.grab_focus() @export var is_in_beginning: bool = false var current_music_decay:float = 0 @@ -37,5 +39,6 @@ func update_ui_from_state(): allow_skip_button.button_pressed = State.allow_skipping func _on_exit_button_pressed() -> void: + leave_stage.emit() State.save_settings() State.leave_stage(self) diff --git a/src/logic-scenes/main menu/content_settings.tscn b/src/logic-scenes/main menu/content_settings.tscn index 04ca1ea..b3d400b 100644 --- a/src/logic-scenes/main menu/content_settings.tscn +++ b/src/logic-scenes/main menu/content_settings.tscn @@ -127,6 +127,7 @@ layout_mode = 2 [node name="Button" type="Button" parent="ScrollContainer/Content Notes/VBoxContainer1"] layout_mode = 2 +focus_neighbor_bottom = NodePath("../../../../SaveButton") toggle_mode = true button_group = SubResource("ButtonGroup_v7ly6") text = "Is this game for or about me?" diff --git a/src/logic-scenes/main menu/gameplay_settings.gd b/src/logic-scenes/main menu/gameplay_settings.gd index 8b5786d..148d439 100644 --- a/src/logic-scenes/main menu/gameplay_settings.gd +++ b/src/logic-scenes/main menu/gameplay_settings.gd @@ -1,11 +1,13 @@ extends VBoxContainer signal changed +signal leave_stage var has_stage:bool = false: set(stage): has_stage = stage - visible = has_stage + if is_node_ready() and has_stage: + y_switch.grab_focus() var current_music_decay:float = 0 @@ -28,5 +30,6 @@ func update_ui_from_state(): stream_overlay_picker.select(State.stream_overlay_position) func _on_exit_button_pressed() -> void: + leave_stage.emit() State.save_settings() State.leave_stage(self) diff --git a/src/logic-scenes/main menu/video_settings.gd b/src/logic-scenes/main menu/video_settings.gd index bf1ed67..21dccdd 100644 --- a/src/logic-scenes/main menu/video_settings.gd +++ b/src/logic-scenes/main menu/video_settings.gd @@ -1,11 +1,11 @@ extends VBoxContainer signal changed +signal leave_stage var has_stage:bool = false: set(stage): has_stage = stage - visible = has_stage preset_selected = preset_selected @export_file(".json") var settings_path = "user://video_settings.json" @@ -48,7 +48,6 @@ var fps_enabled: bool: fps_enabled = value @onready var fps_selector: SpinBox = %MaxFps -@onready var fps_placeholder:PanelContainer = %FPSPlaceholder @export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3: set(value): @@ -111,6 +110,7 @@ func _ready() -> void: preset_selected = preset_selected + %ExitButton.pressed.connect(_on_exit_button_pressed) %ConfirmExit.pressed.connect(_on_exit_confirmed) %ConfirmSave.pressed.connect(_on_confirm_button_pressed) %ConfirmAbort.pressed.connect($Popup.hide) @@ -161,12 +161,14 @@ func save_settings(): has_changed = false func _on_exit_confirmed() -> void: + leave_stage.emit() State.leave_stage(self) func _on_exit_button_pressed() -> void: if has_changed: $Popup.show() else: + leave_stage.emit() State.leave_stage(self) func _on_confirm_button_pressed() -> void: diff --git a/src/tab_container.gd b/src/tab_container.gd new file mode 100644 index 0000000..87c5690 --- /dev/null +++ b/src/tab_container.gd @@ -0,0 +1,21 @@ +extends TabContainer + +var pass_to_actor + +func _ready() -> void: + for child in get_children(): + if "leave_stage" in child: + child.leave_stage.connect(get_parent().vanish) + tab_changed.connect(_on_tab_changed) + pass_to_actor = get_child(current_tab) + +func _on_tab_changed(tab_id: int): + var child_has_stage:bool = false + for child in get_children(): + if "has_stage" in child: + if child.has_stage: + child_has_stage = true + if child_has_stage: + State.pass_stage_to(get_child(tab_id)) + + pass_to_actor = get_child(tab_id)