diff --git a/ruf-der-pilze/scripts/lobby.gd b/ruf-der-pilze/scripts/lobby.gd new file mode 100644 index 0000000..7b769ca --- /dev/null +++ b/ruf-der-pilze/scripts/lobby.gd @@ -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!")