From 399606357c0ed2f10b5ac52c4b180989630afc71 Mon Sep 17 00:00:00 2001 From: Sofia Date: Fri, 7 Aug 2026 20:52:22 +0300 Subject: [PATCH] Start adding main menu controller support --- godot/project.godot | 8 + godot/scenes/main.tscn | 556 ++++++++++++++++++++------------------- rust/src/ui/main_menu.rs | 13 + 3 files changed, 310 insertions(+), 267 deletions(-) diff --git a/godot/project.godot b/godot/project.godot index bd42714..cda2310 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -57,6 +57,14 @@ model_point_class_save_path="godot/maps/entity_models" [input] +ui_accept={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":16,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +] +} toggle_cli={ "deadzone": 0.2, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":167,"key_label":0,"unicode":167,"location":0,"echo":false,"script":null) diff --git a/godot/scenes/main.tscn b/godot/scenes/main.tscn index cfb6bda..ab69167 100644 --- a/godot/scenes/main.tscn +++ b/godot/scenes/main.tscn @@ -7,21 +7,22 @@ [ext_resource type="Texture2D" uid="uid://3gpd2qpyw5eq" path="res://assets/title.png" id="4_pm3ni"] [ext_resource type="PackedScene" uid="uid://c62c5iq0w72ka" path="res://maps/precipice/precipice_static.scn" id="6_tefeu"] -[node name="menu" type="MainMenu" unique_id=2036763876 node_paths=PackedStringArray("camera", "main_position", "host_position", "main_panel", "host_panel", "join_panel", "host_port", "join_addr", "join_port", "recent_servers_button", "popup_panel", "popup_title", "popup_text", "popup_button", "open_replay_dialog")] +[node name="menu" type="MainMenu" unique_id=2036763876 node_paths=PackedStringArray("camera", "main_position", "host_position", "host_main_button", "main_panel", "host_panel", "join_panel", "host_port", "join_addr", "join_port", "recent_servers_button", "popup_panel", "popup_title", "popup_text", "popup_button", "open_replay_dialog")] camera = NodePath("camera_3d") main_position = NodePath("main_pos") host_position = NodePath("host_pos") -main_panel = NodePath("main_panel") -host_panel = NodePath("host_panel") -join_panel = NodePath("join_panel") -host_port = NodePath("host_panel/v_box_container/host_port") -join_addr = NodePath("join_panel/v_box_container/margin_container/v_box_container/address_text") -join_port = NodePath("join_panel/v_box_container/margin_container/v_box_container/port_text") -recent_servers_button = NodePath("join_panel/v_box_container/margin_container/v_box_container/recent_servers") -popup_panel = NodePath("popup_panel") -popup_title = NodePath("popup_panel/v_box_container/title") -popup_text = NodePath("popup_panel/v_box_container/text") -popup_button = NodePath("popup_panel/v_box_container/ok") +host_main_button = NodePath("menus/main_panel/v_box_container/margin_container/v_box_container/host") +main_panel = NodePath("menus/main_panel") +host_panel = NodePath("menus/host_panel") +join_panel = NodePath("menus/join_panel") +host_port = NodePath("menus/host_panel/v_box_container/host_port") +join_addr = NodePath("menus/join_panel/v_box_container/margin_container/v_box_container/address_text") +join_port = NodePath("menus/join_panel/v_box_container/margin_container/v_box_container/port_text") +recent_servers_button = NodePath("menus/join_panel/v_box_container/margin_container/v_box_container/recent_servers") +popup_panel = NodePath("menus/popup_panel") +popup_title = NodePath("menus/popup_panel/v_box_container/title") +popup_text = NodePath("menus/popup_panel/v_box_container/text") +popup_button = NodePath("menus/popup_panel/v_box_container/ok") credits = ExtResource("1_sugp2") open_replay_dialog = NodePath("open_replay_dialog") @@ -38,256 +39,12 @@ transform = Transform3D(0.9823497, 0, 0.18705386, 0, 1, 0, -0.18705386, 0, 0.982 [node name="menu_player3" parent="." unique_id=1638403481 instance=ExtResource("1_o5qli")] transform = Transform3D(-0.26696783, 0, 0.9637054, 0, 1, 0, -0.9637054, 0, -0.26696783, -3.5550833, -2.3841858e-07, 2.7302406) -[node name="main_panel" type="Panel" parent="." unique_id=2078435804] -offset_left = 136.0 -offset_top = 111.0 -offset_right = 339.0 -offset_bottom = 508.0 -theme = ExtResource("3_jscy8") - -[node name="v_box_container" type="VBoxContainer" parent="main_panel" unique_id=287461844] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -47.0 -offset_top = -95.0 -offset_right = 47.0 -offset_bottom = 95.0 -grow_horizontal = 2 -grow_vertical = 2 -alignment = 1 - -[node name="texture_rect" type="TextureRect" parent="main_panel/v_box_container" unique_id=1881966626] -custom_minimum_size = Vector2(0, 30) -layout_mode = 2 -texture = ExtResource("4_pm3ni") -expand_mode = 3 -stretch_mode = 4 - -[node name="margin_container" type="MarginContainer" parent="main_panel/v_box_container" unique_id=143702935] -layout_mode = 2 -theme_override_constants/margin_top = 50 - -[node name="v_box_container" type="VBoxContainer" parent="main_panel/v_box_container/margin_container" unique_id=358951965] -layout_mode = 2 - -[node name="host" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=1962091117] -layout_mode = 2 -text = "Host Game" -metadata/_edit_lock_ = true - -[node name="join" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=1364459397] -layout_mode = 2 -text = "Join Game" -metadata/_edit_lock_ = true - -[node name="play_replay" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=275552647] -layout_mode = 2 -text = "Play Replay" -metadata/_edit_lock_ = true - -[node name="credits" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=953921422] -layout_mode = 2 -text = "Credits" -metadata/_edit_lock_ = true - -[node name="settings" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=1153899756] -layout_mode = 2 -text = "Settings" -metadata/_edit_lock_ = true - -[node name="quit" type="Button" parent="main_panel/v_box_container/margin_container/v_box_container" unique_id=1508139096] -layout_mode = 2 -text = "Quit" -metadata/_edit_lock_ = true - -[node name="host_panel" type="Panel" parent="." unique_id=1633876079] -visible = false -offset_left = 139.0 -offset_top = 167.0 -offset_right = 336.0 -offset_bottom = 474.0 -theme = ExtResource("3_jscy8") - -[node name="v_box_container" type="VBoxContainer" parent="host_panel" unique_id=1651169053] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -47.0 -offset_top = -95.0 -offset_right = 47.0 -offset_bottom = 95.0 -grow_horizontal = 2 -grow_vertical = 2 -alignment = 1 - -[node name="title" type="Label" parent="host_panel/v_box_container" unique_id=1539421918] -custom_minimum_size = Vector2(0, 50) -layout_mode = 2 -text = "Host Game" -horizontal_alignment = 1 -metadata/_edit_lock_ = true - -[node name="port_label" type="Label" parent="host_panel/v_box_container" unique_id=1618746525] -layout_mode = 2 -text = "Port" -horizontal_alignment = 1 - -[node name="host_port" type="SpinBox" parent="host_panel/v_box_container" unique_id=1116593197] -layout_mode = 2 -max_value = 16000.0 -value = 8080.0 -alignment = 1 - -[node name="host" type="Button" parent="host_panel/v_box_container" unique_id=312403378] -layout_mode = 2 -text = "Host" - -[node name="back" type="Button" parent="host_panel/v_box_container" unique_id=1658922684] -layout_mode = 2 -text = "Back" - -[node name="join_panel" type="Panel" parent="." unique_id=1630672771] -visible = false -offset_left = 122.0 -offset_top = 115.0 -offset_right = 352.0 -offset_bottom = 509.0 -theme = ExtResource("3_jscy8") - -[node name="v_box_container" type="VBoxContainer" parent="join_panel" unique_id=2029384993] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -47.0 -offset_top = -95.0 -offset_right = 47.0 -offset_bottom = 95.0 -grow_horizontal = 2 -grow_vertical = 2 -alignment = 1 - -[node name="title" type="Label" parent="join_panel/v_box_container" unique_id=268455606] -custom_minimum_size = Vector2(0, 50) -layout_mode = 2 -text = "Join Game" -horizontal_alignment = 1 -metadata/_edit_lock_ = true - -[node name="margin_container" type="MarginContainer" parent="join_panel/v_box_container" unique_id=979302447] -layout_mode = 2 -theme_override_constants/margin_top = 0 -theme_override_constants/margin_bottom = 30 - -[node name="v_box_container" type="VBoxContainer" parent="join_panel/v_box_container/margin_container" unique_id=1555998390] -layout_mode = 2 - -[node name="recent_servers_label" type="Label" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=683871668] -layout_mode = 2 -text = "Recent Servers" -horizontal_alignment = 1 - -[node name="recent_servers" type="OptionButton" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=486398131] -layout_mode = 2 - -[node name="address_label" type="Label" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=425811384] -layout_mode = 2 -text = "Address" -horizontal_alignment = 1 - -[node name="address_text" type="LineEdit" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=672176728] -custom_minimum_size = Vector2(150, 30) -layout_mode = 2 -text = "127.0.0.1" - -[node name="port_label" type="Label" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=1606834624] -layout_mode = 2 -text = "Port" -horizontal_alignment = 1 - -[node name="port_text" type="SpinBox" parent="join_panel/v_box_container/margin_container/v_box_container" unique_id=418812818] -custom_minimum_size = Vector2(150, 30) -layout_mode = 2 -min_value = 1.0 -max_value = 16000.0 -value = 8080.0 - -[node name="join" type="Button" parent="join_panel/v_box_container" unique_id=1953386108] -layout_mode = 2 -text = "Join" - -[node name="back" type="Button" parent="join_panel/v_box_container" unique_id=759190425] -layout_mode = 2 -text = "Back" - -[node name="settings" parent="." unique_id=999912383 instance=ExtResource("2_0wfyh")] -visible = false - [node name="main_pos" type="Node3D" parent="." unique_id=98241074] transform = Transform3D(0.98629165, -0.031186387, 0.16203767, -1.4054484e-08, 0.981978, 0.1889952, -0.16501155, -0.18640435, 0.9685167, 1.0974054, 1.7166122, 1.4909104) [node name="host_pos" type="Node3D" parent="." unique_id=663794107] transform = Transform3D(0.3960592, -0.17354009, 0.90167665, -1.9851193e-08, 0.981978, 0.18899521, -0.9182249, -0.0748533, 0.38892144, -1.0602233, 1.7166122, 3.759781) -[node name="popup_panel" type="Panel" parent="." unique_id=1792775604] -visible = false -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -153.0 -offset_top = -71.0 -offset_right = 153.0 -offset_bottom = 71.0 -grow_horizontal = 2 -grow_vertical = 2 -theme = ExtResource("3_jscy8") - -[node name="v_box_container" type="VBoxContainer" parent="popup_panel" unique_id=465766643] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -20.0 -offset_top = -20.0 -offset_right = 20.0 -offset_bottom = 20.0 -grow_horizontal = 2 -grow_vertical = 2 -alignment = 1 - -[node name="title" type="Label" parent="popup_panel/v_box_container" unique_id=1944397487] -layout_mode = 2 -size_flags_horizontal = 4 -theme_override_font_sizes/font_size = 25 -text = "Some Title" -horizontal_alignment = 1 - -[node name="text" type="Label" parent="popup_panel/v_box_container" unique_id=1988165424] -custom_minimum_size = Vector2(300, 0) -custom_maximum_size = Vector2(300, -1) -layout_mode = 2 -size_flags_horizontal = 4 -text = "Some text" -horizontal_alignment = 1 -autowrap_mode = 3 - -[node name="ok" type="Button" parent="popup_panel/v_box_container" unique_id=488898874] -layout_mode = 2 -text = "Ok" - [node name="open_replay_dialog" type="FileDialog" parent="." unique_id=925465558] title = "Open a File" file_mode = 0 @@ -318,14 +75,279 @@ spot_angle = 11.861256 [node name="precipice_static" parent="background" unique_id=1151780860 instance=ExtResource("6_tefeu")] transform = Transform3D(0.37768292, 0, 0.925935, 0, 1, 0, -0.925935, 0, 0.37768292, 34.79668, -16.012611, -118.59651) -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/host" to="." method="go_to_host_game"] -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/join" to="." method="go_to_join_game"] -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/play_replay" to="." method="open_replay_dialog"] -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/credits" to="." method="open_credits"] -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/settings" to="settings" method="open"] -[connection signal="pressed" from="main_panel/v_box_container/margin_container/v_box_container/quit" to="." method="quit_game"] -[connection signal="pressed" from="host_panel/v_box_container/host" to="." method="host_game"] -[connection signal="pressed" from="host_panel/v_box_container/back" to="." method="go_to_main_menu"] -[connection signal="pressed" from="join_panel/v_box_container/join" to="." method="join_game"] -[connection signal="pressed" from="join_panel/v_box_container/back" to="." method="go_to_main_menu"] -[connection signal="pressed" from="popup_panel/v_box_container/ok" to="." method="hide_popup"] +[node name="menus" type="Control" parent="." unique_id=63647336] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="main_panel" type="Panel" parent="menus" unique_id=2078435804] +layout_mode = 0 +offset_left = 136.0 +offset_top = 111.0 +offset_right = 339.0 +offset_bottom = 508.0 +theme = ExtResource("3_jscy8") + +[node name="v_box_container" type="VBoxContainer" parent="menus/main_panel" unique_id=287461844] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -47.0 +offset_top = -95.0 +offset_right = 47.0 +offset_bottom = 95.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="texture_rect" type="TextureRect" parent="menus/main_panel/v_box_container" unique_id=1881966626] +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 +texture = ExtResource("4_pm3ni") +expand_mode = 3 +stretch_mode = 4 + +[node name="margin_container" type="MarginContainer" parent="menus/main_panel/v_box_container" unique_id=143702935] +layout_mode = 2 +theme_override_constants/margin_top = 50 + +[node name="v_box_container" type="VBoxContainer" parent="menus/main_panel/v_box_container/margin_container" unique_id=358951965] +layout_mode = 2 + +[node name="host" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=1962091117] +layout_mode = 2 +text = "Host Game" +metadata/_edit_lock_ = true + +[node name="join" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=1364459397] +layout_mode = 2 +text = "Join Game" +metadata/_edit_lock_ = true + +[node name="play_replay" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=275552647] +layout_mode = 2 +text = "Play Replay" +metadata/_edit_lock_ = true + +[node name="credits" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=953921422] +layout_mode = 2 +text = "Credits" +metadata/_edit_lock_ = true + +[node name="settings" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=1153899756] +layout_mode = 2 +text = "Settings" +metadata/_edit_lock_ = true + +[node name="quit" type="Button" parent="menus/main_panel/v_box_container/margin_container/v_box_container" unique_id=1508139096] +layout_mode = 2 +text = "Quit" +metadata/_edit_lock_ = true + +[node name="host_panel" type="Panel" parent="menus" unique_id=1633876079] +visible = false +layout_mode = 0 +offset_left = 139.0 +offset_top = 167.0 +offset_right = 336.0 +offset_bottom = 474.0 +theme = ExtResource("3_jscy8") + +[node name="v_box_container" type="VBoxContainer" parent="menus/host_panel" unique_id=1651169053] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -47.0 +offset_top = -95.0 +offset_right = 47.0 +offset_bottom = 95.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="title" type="Label" parent="menus/host_panel/v_box_container" unique_id=1539421918] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +text = "Host Game" +horizontal_alignment = 1 +metadata/_edit_lock_ = true + +[node name="port_label" type="Label" parent="menus/host_panel/v_box_container" unique_id=1618746525] +layout_mode = 2 +text = "Port" +horizontal_alignment = 1 + +[node name="host_port" type="SpinBox" parent="menus/host_panel/v_box_container" unique_id=1116593197] +layout_mode = 2 +max_value = 16000.0 +value = 8080.0 +alignment = 1 + +[node name="host" type="Button" parent="menus/host_panel/v_box_container" unique_id=312403378] +layout_mode = 2 +text = "Host" + +[node name="back" type="Button" parent="menus/host_panel/v_box_container" unique_id=1658922684] +layout_mode = 2 +text = "Back" + +[node name="join_panel" type="Panel" parent="menus" unique_id=1630672771] +visible = false +layout_mode = 0 +offset_left = 122.0 +offset_top = 115.0 +offset_right = 352.0 +offset_bottom = 509.0 +theme = ExtResource("3_jscy8") + +[node name="v_box_container" type="VBoxContainer" parent="menus/join_panel" unique_id=2029384993] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -47.0 +offset_top = -95.0 +offset_right = 47.0 +offset_bottom = 95.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="title" type="Label" parent="menus/join_panel/v_box_container" unique_id=268455606] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 +text = "Join Game" +horizontal_alignment = 1 +metadata/_edit_lock_ = true + +[node name="margin_container" type="MarginContainer" parent="menus/join_panel/v_box_container" unique_id=979302447] +layout_mode = 2 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_bottom = 30 + +[node name="v_box_container" type="VBoxContainer" parent="menus/join_panel/v_box_container/margin_container" unique_id=1555998390] +layout_mode = 2 + +[node name="recent_servers_label" type="Label" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=683871668] +layout_mode = 2 +text = "Recent Servers" +horizontal_alignment = 1 + +[node name="recent_servers" type="OptionButton" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=486398131] +layout_mode = 2 + +[node name="address_label" type="Label" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=425811384] +layout_mode = 2 +text = "Address" +horizontal_alignment = 1 + +[node name="address_text" type="LineEdit" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=672176728] +custom_minimum_size = Vector2(150, 30) +layout_mode = 2 +text = "127.0.0.1" + +[node name="port_label" type="Label" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=1606834624] +layout_mode = 2 +text = "Port" +horizontal_alignment = 1 + +[node name="port_text" type="SpinBox" parent="menus/join_panel/v_box_container/margin_container/v_box_container" unique_id=418812818] +custom_minimum_size = Vector2(150, 30) +layout_mode = 2 +min_value = 1.0 +max_value = 16000.0 +value = 8080.0 + +[node name="join" type="Button" parent="menus/join_panel/v_box_container" unique_id=1953386108] +layout_mode = 2 +text = "Join" + +[node name="back" type="Button" parent="menus/join_panel/v_box_container" unique_id=759190425] +layout_mode = 2 +text = "Back" + +[node name="settings" parent="menus" unique_id=999912383 instance=ExtResource("2_0wfyh")] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 339.0 +offset_top = 67.0 +offset_right = -301.0 +offset_bottom = -69.0 + +[node name="popup_panel" type="Panel" parent="menus" unique_id=1792775604] +visible = false +layout_mode = 0 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -153.0 +offset_top = -71.0 +offset_right = 153.0 +offset_bottom = 71.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("3_jscy8") + +[node name="v_box_container" type="VBoxContainer" parent="menus/popup_panel" unique_id=465766643] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="title" type="Label" parent="menus/popup_panel/v_box_container" unique_id=1944397487] +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_font_sizes/font_size = 25 +text = "Some Title" +horizontal_alignment = 1 + +[node name="text" type="Label" parent="menus/popup_panel/v_box_container" unique_id=1988165424] +custom_minimum_size = Vector2(300, 0) +custom_maximum_size = Vector2(300, -1) +layout_mode = 2 +size_flags_horizontal = 4 +text = "Some text" +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="ok" type="Button" parent="menus/popup_panel/v_box_container" unique_id=488898874] +layout_mode = 2 +text = "Ok" + +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/host" to="." method="go_to_host_game"] +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/join" to="." method="go_to_join_game"] +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/play_replay" to="." method="open_replay_dialog"] +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/credits" to="." method="open_credits"] +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/settings" to="menus/settings" method="open"] +[connection signal="pressed" from="menus/main_panel/v_box_container/margin_container/v_box_container/quit" to="." method="quit_game"] +[connection signal="pressed" from="menus/host_panel/v_box_container/host" to="." method="host_game"] +[connection signal="pressed" from="menus/host_panel/v_box_container/back" to="." method="go_to_main_menu"] +[connection signal="pressed" from="menus/join_panel/v_box_container/join" to="." method="join_game"] +[connection signal="pressed" from="menus/join_panel/v_box_container/back" to="." method="go_to_main_menu"] +[connection signal="pressed" from="menus/popup_panel/v_box_container/ok" to="." method="hide_popup"] diff --git a/rust/src/ui/main_menu.rs b/rust/src/ui/main_menu.rs index 27b13f7..e75e88d 100644 --- a/rust/src/ui/main_menu.rs +++ b/rust/src/ui/main_menu.rs @@ -105,6 +105,12 @@ impl INode3D for MainMenu { MusicManager::singleton() .bind_mut() .play(Some(Music::MainMenu), false); + + if let Some(panel) = &mut self.main_panel { + if let Some(focus) = &mut panel.find_next_valid_focus() { + focus.grab_focus_ex().hide_focus(true).done(); + } + } } fn process(&mut self, _delta: f64) { @@ -154,13 +160,20 @@ impl INode3D for MainMenu { camera.set_global_rotation(new_rot); if let Some(mut panel) = target_panel { + let mut changed = false; if let Some(prev_panel) = &mut self.prev_panel { if prev_panel.instance_id() != panel.instance_id() { + changed = true; prev_panel.set_visible(false); } } self.prev_panel = Some(panel.clone()); panel.set_visible(true); + if changed { + if let Some(focus) = &mut panel.find_next_valid_focus() { + focus.grab_focus_ex().hide_focus(true).done(); + } + } } } }