Skip to content
This repository was archived by the owner on Apr 22, 2026. It is now read-only.

Commit 60e82fe

Browse files
committed
chore: better server preview
1 parent 1ab8300 commit 60e82fe

6 files changed

Lines changed: 86 additions & 11 deletions

File tree

components/managers/lobby_manager.gd

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,16 @@ func _ready():
2626
map_spawner.spawn_function = map_manager.spawn_map
2727
Steam.join_requested.connect(_on_lobby_join_requested)
2828
Steam.lobby_joined.connect(_on_lobby_joined)
29+
Steam.lobby_kicked.connect(_on_lobby_kicked)
2930

3031
check_command_line()
3132

33+
func _on_lobby_kicked(lobby_id: int, _admin_id: int, _due_to_disconnect: int) -> void:
34+
Steam.leaveLobby(lobby_id)
35+
menu_manager.show_main_canvas()
36+
menu_manager.hide_all_menus()
37+
menu_manager._on_public_multiplayer_button_pressed()
38+
3239
func _on_lobby_joined(_lobby: int, _permissions: int, _locked: bool, response: int):
3340
if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
3441
menu_manager.hide_main_canvas()
@@ -130,16 +137,15 @@ func refresh_steam_lobby_list():
130137
func _on_steam_lobby_match_list(lobbies):
131138
for lobby in lobbies:
132139
var lobby_name: String = Steam.getLobbyData(lobby, "name")
133-
var lobby_mode: String = Steam.getLobbyData(lobby, "mode")
140+
var _lobby_mode: String = Steam.getLobbyData(lobby, "mode")
134141
if lobby_name.is_empty():
135142
continue
136143

137144
var lobby_num_members: int = Steam.getNumLobbyMembers(lobby)
138145

139-
var lobby_btn = Button.new()
140-
lobby_btn.set_text("Lobby %s: %s [%s] - %s Player(s)" % [lobby, lobby_name, lobby_mode, lobby_num_members])
141-
lobby_btn.set_size(Vector2(800, 50))
142-
lobby_btn.set_name("lobby_%s" % lobby)
143-
lobby_btn.connect("pressed", Callable(self, "join_steam_lobby").bind(lobby))
144-
146+
var lobby_btn: ServerPanel = menu_manager.server_panel.instantiate()
145147
lobby_v_box_container.add_child(lobby_btn)
148+
lobby_btn.server_name.text = lobby_name
149+
lobby_btn.player_count.text = "%s Player(s)" % lobby_num_members
150+
lobby_btn.name = "lobby_%s" % lobby
151+
lobby_btn.join_button.connect("pressed", Callable(self, "join_steam_lobby").bind(lobby))

components/managers/menu_manager.gd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
class_name MenuManager extends Node
22

3+
@export var server_panel: PackedScene
34
@export var main_canvas: CanvasLayer
45
@export var main_menu: Control
56
@export var multiplayer_select_menu: Control

components/ui/server_panel.gd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class_name ServerPanel extends Panel
2+
3+
@onready var server_name: Label = %ServerName
4+
@onready var player_count: Label = %PlayerCount
5+
@onready var join_button: Button = %JoinButton

components/ui/server_panel.gd.uid

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bktvkdny3qe33

scenes/game_controller.tscn

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
[gd_scene load_steps=8 format=3 uid="uid://dctiktpqyar4l"]
1+
[gd_scene load_steps=9 format=3 uid="uid://dctiktpqyar4l"]
22

33
[ext_resource type="Script" uid="uid://bqrnoubyb5xyt" path="res://components/managers/lobby_manager.gd" id="1_rc0pn"]
44
[ext_resource type="Script" uid="uid://djqwyk1iv2mw3" path="res://components/managers/network_manager.gd" id="2_h843c"]
55
[ext_resource type="Script" uid="uid://dnirqbsrgss6i" path="res://components/managers/menu_manager.gd" id="3_e85df"]
66
[ext_resource type="Script" uid="uid://busevdy2omq1l" path="res://components/managers/map_manager.gd" id="4_burlk"]
77
[ext_resource type="PackedScene" uid="uid://cl3jbmjvdq0xr" path="res://scenes/levels/lobby.tscn" id="5_e85df"]
88
[ext_resource type="PackedScene" uid="uid://c0hrn5pe2ti1e" path="res://scenes/levels/main_menu.tscn" id="5_h843c"]
9+
[ext_resource type="PackedScene" uid="uid://besrfb02v4ttt" path="res://scenes/ui/server.tscn" id="6_burlk"]
910

1011
[sub_resource type="LabelSettings" id="LabelSettings_e85df"]
1112
font_color = Color(1, 0.172498, 0.208016, 1)
@@ -18,7 +19,7 @@ network_manager = NodePath("../NetworkManager")
1819
map_spawner = NodePath("../MapSpawner")
1920
map_manager = NodePath("../MapManager")
2021
menu_manager = NodePath("../MenuManager")
21-
lobby_v_box_container = NodePath("../CanvasLayer/Control/PublicMultiplayerMenu/Panel/ScrollContainer/VBoxContainer")
22+
lobby_v_box_container = NodePath("../CanvasLayer/Control/PublicMultiplayerMenu/Panel/ScrollContainer/MarginContainer/VBoxContainer")
2223
metadata/_custom_type_script = "uid://bqrnoubyb5xyt"
2324

2425
[node name="NetworkManager" type="Node" parent="."]
@@ -27,6 +28,7 @@ metadata/_custom_type_script = "uid://djqwyk1iv2mw3"
2728

2829
[node name="MenuManager" type="Node" parent="." node_paths=PackedStringArray("main_canvas", "main_menu", "multiplayer_select_menu", "local_multiplayer_menu", "public_multiplayer_menu", "mic_select", "restart_prompt", "lobby_manager", "network_manager")]
2930
script = ExtResource("3_e85df")
31+
server_panel = ExtResource("6_burlk")
3032
main_canvas = NodePath("../CanvasLayer")
3133
main_menu = NodePath("../CanvasLayer/Control/MainMenu")
3234
multiplayer_select_menu = NodePath("../CanvasLayer/Control/MultiplayerSelectMenu")
@@ -59,6 +61,7 @@ grow_horizontal = 2
5961
grow_vertical = 2
6062

6163
[node name="MainMenu" type="Control" parent="CanvasLayer/Control"]
64+
visible = false
6265
layout_mode = 1
6366
anchors_preset = 15
6467
anchor_right = 1.0
@@ -181,7 +184,6 @@ layout_mode = 2
181184
text = "Back"
182185

183186
[node name="PublicMultiplayerMenu" type="Control" parent="CanvasLayer/Control"]
184-
visible = false
185187
layout_mode = 1
186188
anchors_preset = 15
187189
anchor_right = 1.0
@@ -237,7 +239,16 @@ anchor_bottom = 1.0
237239
grow_horizontal = 2
238240
grow_vertical = 2
239241

240-
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/PublicMultiplayerMenu/Panel/ScrollContainer"]
242+
[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/Control/PublicMultiplayerMenu/Panel/ScrollContainer"]
243+
layout_mode = 2
244+
size_flags_horizontal = 3
245+
size_flags_vertical = 3
246+
theme_override_constants/margin_left = 10
247+
theme_override_constants/margin_top = 10
248+
theme_override_constants/margin_right = 10
249+
theme_override_constants/margin_bottom = 10
250+
251+
[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/PublicMultiplayerMenu/Panel/ScrollContainer/MarginContainer"]
241252
layout_mode = 2
242253
size_flags_horizontal = 3
243254
size_flags_vertical = 3

scenes/ui/server.tscn

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
[gd_scene load_steps=3 format=3 uid="uid://besrfb02v4ttt"]
2+
3+
[ext_resource type="Script" uid="uid://bktvkdny3qe33" path="res://components/ui/server_panel.gd" id="1_pbaku"]
4+
5+
[sub_resource type="LabelSettings" id="LabelSettings_burlk"]
6+
font_size = 12
7+
8+
[node name="Server" type="Panel"]
9+
clip_contents = true
10+
custom_minimum_size = Vector2(0, 50)
11+
script = ExtResource("1_pbaku")
12+
13+
[node name="HBoxContainer" type="HBoxContainer" parent="."]
14+
layout_mode = 1
15+
anchors_preset = 15
16+
anchor_right = 1.0
17+
anchor_bottom = 1.0
18+
grow_horizontal = 2
19+
grow_vertical = 2
20+
21+
[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer"]
22+
layout_mode = 2
23+
size_flags_horizontal = 3
24+
theme_override_constants/margin_left = 5
25+
theme_override_constants/margin_top = 5
26+
theme_override_constants/margin_right = 5
27+
theme_override_constants/margin_bottom = 5
28+
29+
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/MarginContainer"]
30+
layout_mode = 2
31+
size_flags_horizontal = 3
32+
33+
[node name="ServerName" type="Label" parent="HBoxContainer/MarginContainer/VBoxContainer"]
34+
unique_name_in_owner = true
35+
layout_mode = 2
36+
text = "Server Name"
37+
vertical_alignment = 1
38+
39+
[node name="PlayerCount" type="Label" parent="HBoxContainer/MarginContainer/VBoxContainer"]
40+
unique_name_in_owner = true
41+
layout_mode = 2
42+
text = "0/4"
43+
label_settings = SubResource("LabelSettings_burlk")
44+
vertical_alignment = 1
45+
46+
[node name="JoinButton" type="Button" parent="HBoxContainer"]
47+
unique_name_in_owner = true
48+
custom_minimum_size = Vector2(50, 50)
49+
layout_mode = 2
50+
text = "Join"
51+
flat = true

0 commit comments

Comments
 (0)