net: add lobby.gd with join flow and wait room logic

This commit is contained in:
2026-04-13 21:13:49 +02:00
parent df2e365a0c
commit 45d891b8a4

View File

@@ -0,0 +1,61 @@
extends Control
var _local_role: String = ""
func _ready() -> void:
$JoinPanel/RoleOption.add_item("Spieler")
$JoinPanel/RoleOption.add_item("DM")
$JoinPanel/JoinButton.pressed.connect(_on_join_pressed)
$WaitPanel/StartButton.pressed.connect(_on_start_pressed)
NetworkManager.connected_to_server.connect(_on_connected)
NetworkManager.connection_failed.connect(_on_connection_failed)
NetworkManager.player_joined.connect(_on_player_joined)
NetworkManager.player_left.connect(_on_player_left)
NetworkManager.player_list_synced.connect(_rebuild_player_list)
NetworkManager.game_started.connect(_on_game_started)
func _on_join_pressed() -> void:
var player_name := $JoinPanel/NameInput.text.strip_edges()
if player_name.is_empty():
return
_local_role = "dm" if $JoinPanel/RoleOption.selected == 1 else "player"
NetworkManager.join_server("127.0.0.1", 4242)
func _on_connected() -> void:
var player_name := $JoinPanel/NameInput.text.strip_edges()
NetworkManager.register.rpc_id(1, player_name, _local_role)
$JoinPanel.visible = false
$WaitPanel.visible = true
$WaitPanel/StartButton.visible = (_local_role == "dm")
func _on_connection_failed() -> void:
push_error("[Lobby] Verbindung fehlgeschlagen")
func _on_player_joined(_peer_id: int, _player_name: String, _role: String) -> void:
_rebuild_player_list()
func _on_player_left(_peer_id: int) -> void:
_rebuild_player_list()
func _rebuild_player_list() -> void:
$WaitPanel/PlayerList.clear()
for p in NetworkManager.players.values():
$WaitPanel/PlayerList.add_item("%s (%s)" % [p.name, p.role])
func _on_start_pressed() -> void:
NetworkManager.request_start_game.rpc_id(1)
func _on_game_started() -> void:
# Platzhalter: Szenen-Wechsel kommt im nächsten Feature
print("[Lobby] Spiel gestartet!")