diff options
-rw-r--r-- | client/global.gd | 10 | ||||
-rw-r--r-- | client/menu/character_menu.gd | 3 | ||||
-rw-r--r-- | client/menu/credits_menu.gd | 3 | ||||
-rw-r--r-- | client/menu/credits_menu.tscn | 10 | ||||
-rw-r--r-- | client/menu/ingame_menu.gd | 11 | ||||
-rw-r--r-- | client/menu/ingame_menu.tscn | 27 | ||||
-rw-r--r-- | client/menu/main_menu.gd | 17 | ||||
-rw-r--r-- | client/menu/main_menu.tscn | 10 | ||||
-rw-r--r-- | client/menu/menu_manager.gd | 34 | ||||
-rw-r--r-- | client/menu/menu_manager.tscn | 38 | ||||
-rw-r--r-- | client/menu/scene_transition.gd | 7 | ||||
-rw-r--r-- | client/menu/settings_menu.gd | 4 | ||||
-rw-r--r-- | client/menu/settings_menu.tscn | 10 | ||||
-rw-r--r-- | client/project.godot | 2 |
14 files changed, 128 insertions, 58 deletions
diff --git a/client/global.gd b/client/global.gd index 095deec8..83517b2d 100644 --- a/client/global.gd +++ b/client/global.gd @@ -50,3 +50,13 @@ func load_profile(): settings[i] = saved_settings[i] print("Loaded settings: ", settings) + +func focus_first_button(node: Node) -> bool: + if node is Button: + node.grab_focus() + print("Node %s (%s) was selected for focus" % [node.name, node]) + return true + for c in node.get_children(): + if focus_first_button(c): + return true + return false diff --git a/client/menu/character_menu.gd b/client/menu/character_menu.gd index f4b878be..f0c17f18 100644 --- a/client/menu/character_menu.gd +++ b/client/menu/character_menu.gd @@ -21,9 +21,10 @@ extends Control func _ready(): $VBoxContainer/top_panel/a/username.text = Global.settings["username"] character.select_hairstyle(Global.settings["character"]) + Global.focus_first_button(self) func _on_back_pressed(): - $SceneTransition.transition_to("res://menu/main_menu.tscn") + $SceneTransition.transition_to("res://menu/menu_manager.tscn") func _on_username_text_changed(new_text): Global.settings["username"] = new_text diff --git a/client/menu/credits_menu.gd b/client/menu/credits_menu.gd index e3ea4c51..e4eac72d 100644 --- a/client/menu/credits_menu.gd +++ b/client/menu/credits_menu.gd @@ -21,6 +21,7 @@ var cc_by_3 := { "Glasses": "Jeremy Edelblut" } +@onready var menu_manager: MenuManager = get_parent() @onready var label = $Panel/MarginContainer/VBoxContainer/RichTextLabel func _ready(): @@ -36,4 +37,4 @@ func _ready(): label.text += "[b]Additional CC0 assets by:[/b]\n" + "\n".join(cc_0) func _on_back_pressed(): - $SceneTransition.transition_to("res://menu/main_menu.tscn") + menu_manager.goBack() diff --git a/client/menu/credits_menu.tscn b/client/menu/credits_menu.tscn index a6536e16..372664d4 100644 --- a/client/menu/credits_menu.tscn +++ b/client/menu/credits_menu.tscn @@ -1,9 +1,7 @@ -[gd_scene load_steps=6 format=3 uid="uid://7mqbxa054bjv"] +[gd_scene load_steps=4 format=3 uid="uid://7mqbxa054bjv"] [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme.tres" id="1_emk5o"] [ext_resource type="Script" path="res://menu/credits_menu.gd" id="1_igs63"] -[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="2_k0853"] -[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="4_fbbdb"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_p2qmw"] bg_color = Color(0, 0, 0, 0.878431) @@ -18,8 +16,6 @@ grow_vertical = 2 theme = ExtResource("1_emk5o") script = ExtResource("1_igs63") -[node name="MenuBackground" parent="." instance=ExtResource("2_k0853")] - [node name="Panel" type="Panel" parent="."] layout_mode = 1 anchors_preset = 15 @@ -58,8 +54,4 @@ bbcode_enabled = true layout_mode = 2 text = "Back" -[node name="SceneTransition" parent="." instance=ExtResource("4_fbbdb")] -visible = false -layout_mode = 1 - [connection signal="pressed" from="Panel/MarginContainer/VBoxContainer/back" to="." method="_on_back_pressed"] diff --git a/client/menu/ingame_menu.gd b/client/menu/ingame_menu.gd index 21bfa8ac..9987f8ca 100644 --- a/client/menu/ingame_menu.gd +++ b/client/menu/ingame_menu.gd @@ -1,6 +1,17 @@ extends Control @onready var anim = $AnimationPlayer +@onready var options = $Side/Margin/Options + +func act(): + show() + anim.play("activate") + Global.focus_first_button(options) + +func deact(): + anim.play_backwards("activate") + await anim.animation_finished + hide() func _on_main_menu_pressed(): get_parent().transition_to("res://menu/main_menu.tscn") diff --git a/client/menu/ingame_menu.tscn b/client/menu/ingame_menu.tscn index cf35a7e7..920c8724 100644 --- a/client/menu/ingame_menu.tscn +++ b/client/menu/ingame_menu.tscn @@ -10,7 +10,7 @@ length = 0.001 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("side:position:x") +tracks/0/path = NodePath("Side:position:x") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -24,7 +24,7 @@ resource_name = "activate" tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("side:position:x") +tracks/0/path = NodePath("Side:position:x") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -65,26 +65,27 @@ libraries = { } speed_scale = 8.0 -[node name="side" type="PanelContainer" parent="."] +[node name="Side" type="PanelContainer" parent="."] material = SubResource("ShaderMaterial_o2vtr") layout_mode = 1 anchors_preset = 9 anchor_bottom = 1.0 offset_left = -400.0 offset_right = -90.0 +offset_bottom = 648.0 grow_vertical = 2 -[node name="margin" type="MarginContainer" parent="side"] +[node name="Margin" type="MarginContainer" parent="Side"] layout_mode = 2 theme_override_constants/margin_left = 20 theme_override_constants/margin_top = 20 theme_override_constants/margin_right = 20 theme_override_constants/margin_bottom = 20 -[node name="options" type="VBoxContainer" parent="side/margin"] +[node name="Options" type="VBoxContainer" parent="Side/Margin"] layout_mode = 2 -[node name="title" type="Label" parent="side/margin/options"] +[node name="Title" type="Label" parent="Side/Margin/Options"] layout_mode = 2 auto_translate = false theme_override_colors/font_outline_color = Color(0.566408, 0.208917, 0.266045, 1) @@ -93,25 +94,25 @@ theme_override_fonts/font = SubResource("FontVariation_ud3l8") theme_override_font_sizes/font_size = 48 text = "Undercooked" -[node name="spacer" type="Control" parent="side/margin/options"] +[node name="Spacer" type="Control" parent="Side/Margin/Options"] custom_minimum_size = Vector2(0, 10) layout_mode = 2 -[node name="reconnect" type="Button" parent="side/margin/options"] +[node name="Reconnect" type="Button" parent="Side/Margin/Options"] layout_mode = 2 text = "Reconnect" alignment = 0 -[node name="main_menu" type="Button" parent="side/margin/options"] +[node name="MainMenu" type="Button" parent="Side/Margin/Options"] layout_mode = 2 text = "Main Menu" alignment = 0 -[node name="quit" type="Button" parent="side/margin/options"] +[node name="Quit" type="Button" parent="Side/Margin/Options"] layout_mode = 2 text = "Quit" alignment = 0 -[connection signal="pressed" from="side/margin/options/reconnect" to="." method="_on_reconnect_pressed"] -[connection signal="pressed" from="side/margin/options/main_menu" to="." method="_on_main_menu_pressed"] -[connection signal="pressed" from="side/margin/options/quit" to="." method="_on_quit_pressed"] +[connection signal="pressed" from="Side/Margin/Options/Reconnect" to="." method="_on_reconnect_pressed"] +[connection signal="pressed" from="Side/Margin/Options/MainMenu" to="." method="_on_main_menu_pressed"] +[connection signal="pressed" from="Side/Margin/Options/Quit" to="." method="_on_quit_pressed"] diff --git a/client/menu/main_menu.gd b/client/menu/main_menu.gd index 31ca5462..5e66646b 100644 --- a/client/menu/main_menu.gd +++ b/client/menu/main_menu.gd @@ -16,25 +16,24 @@ # extends Control -@onready var transition = $SceneTransition -@onready var quick_connect = $side/margin/options/quick_connect +@onready var menu_manager: MenuManager = get_parent() + @onready var quit_button = $side/margin/options/quit @onready var connect_uri = $side/margin/options/connect/uri func _ready(): - quick_connect.grab_focus() if OS.has_feature("web"): quit_button.hide() connect_uri.text = Global.settings["last_server_url"] func _on_quit_pressed(): - transition.quit() + menu_manager.transition.quit() func _on_credits_pressed(): - transition.transition_to("res://menu/credits_menu.tscn") + menu_manager.goto("credits") func _on_connect_pressed(): - var url = $side/margin/options/connect/uri.text + var url = connect_uri.text Global.settings["last_server_url"] = url Global.save_profile() connect_to(url) @@ -52,10 +51,10 @@ func _on_quick_connect_pressed(): func connect_to(url): print("Connecting to %s" % url) Global.server_url = url - transition.transition_to("res://game.tscn") + menu_manager.transition.transition_to("res://game.tscn") func _on_change_character_pressed(): - transition.transition_to("res://menu/character_menu.tscn") + menu_manager.transition.transition_to("res://menu/character_menu.tscn") func _on_settings_pressed(): - transition.transition_to("res://menu/settings_menu.tscn") + menu_manager.goto("settings") diff --git a/client/menu/main_menu.tscn b/client/menu/main_menu.tscn index 0deeb748..c42a90c1 100644 --- a/client/menu/main_menu.tscn +++ b/client/menu/main_menu.tscn @@ -1,11 +1,9 @@ -[gd_scene load_steps=9 format=3 uid="uid://dbj8508whxgwv"] +[gd_scene load_steps=7 format=3 uid="uid://dbj8508whxgwv"] [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme.tres" id="1_nlcpo"] [ext_resource type="Script" path="res://menu/main_menu.gd" id="2_qot2j"] [ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="4_050xu"] [ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/font-sansita-swashed.woff2" id="4_mfs30"] -[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="4_ydj5p"] -[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="5_651nk"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_irdo3"] shader = ExtResource("4_050xu") @@ -27,8 +25,6 @@ grow_vertical = 2 theme = ExtResource("1_nlcpo") script = ExtResource("2_qot2j") -[node name="MenuBackground" parent="." instance=ExtResource("4_ydj5p")] - [node name="side" type="PanelContainer" parent="."] material = SubResource("ShaderMaterial_irdo3") layout_mode = 1 @@ -98,10 +94,6 @@ layout_mode = 2 text = "Quit" alignment = 0 -[node name="SceneTransition" parent="." instance=ExtResource("5_651nk")] -visible = false -layout_mode = 1 - [connection signal="pressed" from="side/margin/options/quick_connect" to="." method="_on_quick_connect_pressed"] [connection signal="pressed" from="side/margin/options/connect/connect" to="." method="_on_connect_pressed"] [connection signal="pressed" from="side/margin/options/change_character" to="." method="_on_change_character_pressed"] diff --git a/client/menu/menu_manager.gd b/client/menu/menu_manager.gd new file mode 100644 index 00000000..dc6afce8 --- /dev/null +++ b/client/menu/menu_manager.gd @@ -0,0 +1,34 @@ +extends Control +class_name MenuManager + +@onready var menus = { + "main": $MainMenu, + "credits": $CreditsMenu, + "settings": $SettingsMenu +} +@onready var transition = $SceneTransition + +var menu_stack = ["main"] + +func _ready(): + Global.focus_first_button(menus[menu_stack.back()]) + +func goto(menu_name: String): + show_menu(menu_name) + menu_stack.push_back(menu_name) + print("Go to called. Stack: " + str(menu_stack)) + +func goBack(): + menu_stack.pop_back() + if menu_stack.is_empty(): + Global.showError("Menu stack empty") + show_menu(menu_stack.back()) + print("Go back called. Stack: " + str(menu_stack)) + +func show_menu(menu_name: String): + for k in menus.keys(): + if k == menu_name: + menus[k].visible = true + Global.focus_first_button(menus[k]) + else: + menus[k].visible = false diff --git a/client/menu/menu_manager.tscn b/client/menu/menu_manager.tscn new file mode 100644 index 00000000..6b2d7b33 --- /dev/null +++ b/client/menu/menu_manager.tscn @@ -0,0 +1,38 @@ +[gd_scene load_steps=7 format=3 uid="uid://cd52sr1cmo8oj"] + +[ext_resource type="Script" path="res://menu/menu_manager.gd" id="1_c0rjm"] +[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="2_nf7b6"] +[ext_resource type="PackedScene" uid="uid://dbj8508whxgwv" path="res://menu/main_menu.tscn" id="3_ccpur"] +[ext_resource type="PackedScene" uid="uid://7mqbxa054bjv" path="res://menu/credits_menu.tscn" id="4_xhcd8"] +[ext_resource type="PackedScene" uid="uid://8ic77jmadadj" path="res://menu/settings_menu.tscn" id="5_lifj8"] +[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="6_p4u45"] + +[node name="MenuManager" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_c0rjm") + +[node name="MenuBackground" parent="." instance=ExtResource("2_nf7b6")] + +[node name="MainMenu" parent="." instance=ExtResource("3_ccpur")] +layout_mode = 1 + +[node name="CreditsMenu" parent="." instance=ExtResource("4_xhcd8")] +visible = false +layout_mode = 1 + +[node name="SettingsMenu" parent="." instance=ExtResource("5_lifj8")] +visible = false +layout_mode = 1 + +[node name="SceneTransition" parent="." instance=ExtResource("6_p4u45")] +layout_mode = 0 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +grow_horizontal = 1 +grow_vertical = 1 diff --git a/client/menu/scene_transition.gd b/client/menu/scene_transition.gd index 8d9f38cf..87a1ec1b 100644 --- a/client/menu/scene_transition.gd +++ b/client/menu/scene_transition.gd @@ -45,9 +45,6 @@ func out(): func _process(_delta): if ingame: if not menu.visible and Input.is_action_just_pressed("pause"): - menu.visible = true - menu.anim.play("activate") + menu.act() elif menu.visible and Input.is_action_just_pressed("pause"): - menu.anim.play_backwards("activate") - await menu.anim.animation_finished - menu.visible = false + menu.deact() diff --git a/client/menu/settings_menu.gd b/client/menu/settings_menu.gd index a023cf36..c92a64f3 100644 --- a/client/menu/settings_menu.gd +++ b/client/menu/settings_menu.gd @@ -15,5 +15,7 @@ # extends Control +@onready var menu_manager: MenuManager = get_parent() + func _on_back_pressed(): - $SceneTransition.transition_to("res://menu/main_menu.tscn") + menu_manager.goBack() diff --git a/client/menu/settings_menu.tscn b/client/menu/settings_menu.tscn index 18a32759..e1fefa47 100644 --- a/client/menu/settings_menu.tscn +++ b/client/menu/settings_menu.tscn @@ -1,9 +1,7 @@ -[gd_scene load_steps=5 format=3 uid="uid://8ic77jmadadj"] +[gd_scene load_steps=3 format=3 uid="uid://8ic77jmadadj"] [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme.tres" id="1_foq3a"] -[ext_resource type="PackedScene" uid="uid://l4vm07dtda4j" path="res://menu/menu_background.tscn" id="1_wi8ti"] [ext_resource type="Script" path="res://menu/settings_menu.gd" id="2_3hgm8"] -[ext_resource type="PackedScene" uid="uid://bg2d78ycorcqk" path="res://menu/scene_transition.tscn" id="2_t0one"] [node name="SettingsMenu" type="Control"] layout_mode = 3 @@ -15,8 +13,6 @@ grow_vertical = 2 theme = ExtResource("1_foq3a") script = ExtResource("2_3hgm8") -[node name="MenuBackground" parent="." instance=ExtResource("1_wi8ti")] - [node name="outer_gap" type="MarginContainer" parent="."] layout_mode = 1 anchors_preset = 15 @@ -58,8 +54,4 @@ layout_mode = 2 size_flags_vertical = 8 text = "Back to Main Menu" -[node name="SceneTransition" parent="." instance=ExtResource("2_t0one")] -visible = false -layout_mode = 1 - [connection signal="pressed" from="outer_gap/panel/inner_gap/back" to="." method="_on_back_pressed"] diff --git a/client/project.godot b/client/project.godot index bb2b6896..e6c1caaf 100644 --- a/client/project.godot +++ b/client/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="undercooked" -run/main_scene="res://menu/main_menu.tscn" +run/main_scene="res://menu/menu_manager.tscn" config/features=PackedStringArray("4.2", "Forward Plus") boot_splash/bg_color=Color(0.282353, 0.141176, 0.141176, 1) boot_splash/image="res://icon.png" |