net: add lobby.gd with join flow and wait room logic
This commit is contained in:
61
ruf-der-pilze/scripts/lobby.gd
Normal file
61
ruf-der-pilze/scripts/lobby.gd
Normal 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!")
|
||||
Reference in New Issue
Block a user