This commit is contained in:
team3
2026-09-16 13:21:56 +02:00
parent 7979d5c336
commit 3be22351a3
25 changed files with 734 additions and 195 deletions

View File

@@ -13,6 +13,9 @@ extends Node
signal lobby_changed
signal game_started(code: String, cfg: Dictionary)
signal room_closed(code: String)
## Nur Server: jemand will in eine laufende Partie zurück. Der Raum prüft,
## ob es einen verwaisten Platz mit dem Namen gibt.
signal rejoin_requested(code: String, peer: int, pname: String)
signal connection_failed(reason: String)
signal server_closed
@@ -172,7 +175,9 @@ func _req_join(code: String, pname: String) -> void:
_abgewiesen.rpc_id(id, "Den Code %s gibt es nicht." % code)
return
if raum.in_game:
_abgewiesen.rpc_id(id, "In dem Raum läuft schon eine Partie.")
# Kein Neuling, aber vielleicht ein Rückkehrer: dessen Platz spielt
# gerade ein Bot weiter. Der Raum entscheidet.
rejoin_requested.emit(code, id, pname.substr(0, 16))
return
if raum.lobby.size() >= MAX_HUMANS:
_abgewiesen.rpc_id(id, "Der Raum ist voll.")
@@ -182,6 +187,23 @@ func _req_join(code: String, pname: String) -> void:
_lobby_senden(code)
## Rückkehrer aufnehmen: in die Lobby eintragen und mit der laufenden
## Aufstellung starten lassen. `cfg` beschreibt alle Plätze, nicht nur Peers.
func rejoin_annehmen(code: String, peer: int, pname: String, cfg: Dictionary) -> void:
var raum: Dictionary = raeume.get(code, {})
if raum.is_empty():
return
raum.lobby[peer] = pname
peer_raum[peer] = code
raum.bestaetigt.erase(peer)
_begin.rpc_id(peer, code, cfg)
print("%s kehrt in Raum %s zurück." % [pname, code])
func abweisen(peer: int, grund: String) -> void:
_abgewiesen.rpc_id(peer, grund)
## Ein Broadcast würde alle Räume treffen, also gezielt an die eigenen Peers.
func _lobby_senden(code: String) -> void:
var raum: Dictionary = raeume.get(code, {})