feat: Introduce lobby functionality with UI, server selection, and game state management.

This commit is contained in:
Yogi Wiguna
2026-02-06 13:48:18 +08:00
parent fb0d27ce43
commit 10aa309148
4 changed files with 352 additions and 68 deletions
+266 -12
View File
@@ -220,7 +220,6 @@ layout_mode = 2
text = "PROFILE"
[node name="LobbyPanel" type="Control" parent="." unique_id=1745714811]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -382,10 +381,10 @@ layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -150.0
offset_top = 99.0
offset_right = 150.0
offset_bottom = 159.0
offset_left = 363.0
offset_top = 84.0
offset_right = 663.0
offset_bottom = 144.0
grow_horizontal = 2
[node name="HostBannerLabel" type="Label" parent="LobbyPanel/HostBanner" unique_id=1011182924]
@@ -418,10 +417,10 @@ anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -450.0
offset_top = -120.0
offset_right = 450.0
offset_bottom = 200.0
offset_left = -678.0
offset_top = -299.0
offset_right = 222.0
offset_bottom = 21.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 30
@@ -488,7 +487,6 @@ text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot2" type="VBoxContainer" parent="LobbyPanel/PlayersContainer" unique_id=1012954493]
visible = false
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
@@ -550,7 +548,6 @@ text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot3" type="VBoxContainer" parent="LobbyPanel/PlayersContainer" unique_id=1033758492]
visible = false
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
@@ -612,7 +609,6 @@ text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot4" type="VBoxContainer" parent="LobbyPanel/PlayersContainer" unique_id=62963750]
visible = false
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
@@ -673,6 +669,264 @@ theme_override_font_sizes/font_size = 12
text = "NOT READY"
horizontal_alignment = 1
[node name="PlayersContainer2" type="HBoxContainer" parent="LobbyPanel" unique_id=76585227]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -770.0
offset_top = -356.0
offset_right = -38.0
offset_bottom = -132.0
grow_horizontal = 0
grow_vertical = 0
[node name="PlayerSlot5" type="VBoxContainer" parent="LobbyPanel/PlayersContainer2" unique_id=1217356581]
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
[node name="PlayerName5" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot5" unique_id=1274835923]
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 16
text = "Player 5"
horizontal_alignment = 1
[node name="CharacterPreview5" type="TextureRect" parent="LobbyPanel/PlayersContainer2/PlayerSlot5" unique_id=2028052012]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
size_flags_horizontal = 4
expand_mode = 1
stretch_mode = 5
[node name="CharacterNav5" type="HBoxContainer" parent="LobbyPanel/PlayersContainer2/PlayerSlot5" unique_id=955633493]
visible = false
layout_mode = 2
alignment = 1
[node name="CharLeftBtn5" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot5/CharacterNav5" unique_id=1774553781]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "◀"
[node name="CharacterName5" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot5/CharacterNav5" unique_id=1718870722]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CharRightBtn5" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot5/CharacterNav5" unique_id=766449735]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "▶"
[node name="CharacterNameLabel5" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot5" unique_id=1436179077]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
[node name="ReadyStatus5" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot5" unique_id=1075029896]
layout_mode = 2
theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 1)
theme_override_font_sizes/font_size = 12
text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot6" type="VBoxContainer" parent="LobbyPanel/PlayersContainer2" unique_id=1038068961]
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
[node name="PlayerName6" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot6" unique_id=2146003972]
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 16
text = "Player 6"
horizontal_alignment = 1
[node name="CharacterPreview6" type="TextureRect" parent="LobbyPanel/PlayersContainer2/PlayerSlot6" unique_id=786683689]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
size_flags_horizontal = 4
expand_mode = 1
stretch_mode = 5
[node name="CharacterNav6" type="HBoxContainer" parent="LobbyPanel/PlayersContainer2/PlayerSlot6" unique_id=344279994]
visible = false
layout_mode = 2
alignment = 1
[node name="CharLeftBtn6" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot6/CharacterNav6" unique_id=1348787091]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "◀"
[node name="CharacterName6" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot6/CharacterNav6" unique_id=816635166]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CharRightBtn6" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot6/CharacterNav6" unique_id=989121448]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "▶"
[node name="CharacterNameLabel6" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot6" unique_id=2048468168]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
[node name="ReadyStatus6" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot6" unique_id=1888412229]
layout_mode = 2
theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 1)
theme_override_font_sizes/font_size = 12
text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot7" type="VBoxContainer" parent="LobbyPanel/PlayersContainer2" unique_id=1161417031]
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
[node name="PlayerName7" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot7" unique_id=705333888]
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 16
text = "Player 4"
horizontal_alignment = 1
[node name="CharacterPreview7" type="TextureRect" parent="LobbyPanel/PlayersContainer2/PlayerSlot7" unique_id=2051783230]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
size_flags_horizontal = 4
expand_mode = 1
stretch_mode = 5
[node name="CharacterNav7" type="HBoxContainer" parent="LobbyPanel/PlayersContainer2/PlayerSlot7" unique_id=154400222]
visible = false
layout_mode = 2
alignment = 1
[node name="CharLeftBtn7" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot7/CharacterNav7" unique_id=767340905]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "◀"
[node name="CharacterName7" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot7/CharacterNav7" unique_id=1897622173]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CharRightBtn7" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot7/CharacterNav7" unique_id=981330220]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "▶"
[node name="CharacterNameLabel7" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot7" unique_id=1783984199]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
[node name="ReadyStatus7" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot7" unique_id=2098796095]
layout_mode = 2
theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 1)
theme_override_font_sizes/font_size = 12
text = "NOT READY"
horizontal_alignment = 1
[node name="PlayerSlot8" type="VBoxContainer" parent="LobbyPanel/PlayersContainer2" unique_id=2019344700]
custom_minimum_size = Vector2(180, 0)
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
[node name="PlayerName8" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot8" unique_id=13133480]
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_font_sizes/font_size = 16
text = "Player 4"
horizontal_alignment = 1
[node name="CharacterPreview8" type="TextureRect" parent="LobbyPanel/PlayersContainer2/PlayerSlot8" unique_id=2109465785]
custom_minimum_size = Vector2(140, 140)
layout_mode = 2
size_flags_horizontal = 4
expand_mode = 1
stretch_mode = 5
[node name="CharacterNav8" type="HBoxContainer" parent="LobbyPanel/PlayersContainer2/PlayerSlot8" unique_id=429359375]
visible = false
layout_mode = 2
alignment = 1
[node name="CharLeftBtn8" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot8/CharacterNav8" unique_id=1934659357]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "◀"
[node name="CharacterName8" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot8/CharacterNav8" unique_id=1417755564]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CharRightBtn8" type="Button" parent="LobbyPanel/PlayersContainer2/PlayerSlot8/CharacterNav8" unique_id=513653330]
custom_minimum_size = Vector2(40, 36)
layout_mode = 2
theme_override_font_sizes/font_size = 18
text = "▶"
[node name="CharacterNameLabel8" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot8" unique_id=594360558]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_colors/font_color = Color(0.992, 0.796, 0.047, 1)
theme_override_font_sizes/font_size = 14
text = "Bob"
horizontal_alignment = 1
[node name="ReadyStatus8" type="Label" parent="LobbyPanel/PlayersContainer2/PlayerSlot8" unique_id=434057613]
layout_mode = 2
theme_override_colors/font_color = Color(0.6, 0.6, 0.6, 1)
theme_override_font_sizes/font_size = 12
text = "NOT READY"
horizontal_alignment = 1
[node name="AreaSelector" type="HBoxContainer" parent="LobbyPanel" unique_id=696178336]
clip_contents = true
layout_mode = 1