This commit is contained in:
team3
2026-09-16 16:15:13 +02:00
parent b9d6b115c0
commit f1c78f66f4
17 changed files with 676 additions and 458 deletions

View File

@@ -6,34 +6,51 @@ var game: Node
func _ready() -> void:
# Es laufen zwei Räume zugleich. Jedes Spiel bekommt tempo 0, jedes Ende
# wird gemeldet; nach dem zweiten Ende noch kurz auf die Nochmal-Partien warten.
var t := 0.0
var runden := 0
var letzte := ""
var zuletzt := "" # letzter gesehener Stand - die Clients gehen sofort,
# dann räumt der Server den Raum ab, bevor wir gucken
while t < 1500.0:
var gesehen := {} # Spielknoten -> {runden, letzte}
var enden := 0
var nochmal := 0
while t < 1500.0 and enden < 2:
await get_tree().create_timer(0.2).timeout
t += 0.2
if game == null:
game = _find(get_tree().root, "Game")
if game != null:
game.tempo = 0.0
var raeume := get_tree().root.get_node_or_null("Main/Raeume")
if raeume == null:
continue
if not is_instance_valid(game):
break
if game.phase != letzte:
letzte = game.phase
if letzte == "roll":
runden += 1
var staende: Array = game.seats.map(func(x): return "%s=%d" % [x.name, x.count])
zuletzt = "%s '%s' Runden=%d %s" % [game.phase, game.banner, runden, staende]
if game.phase == "over":
break
print("SERVER: Ende %s" % zuletzt)
var alt: Node = game
var neu := await _warte(func(): game = _find(get_tree().root, "Game"); return game != null and game != alt, 15.0)
if neu:
game.tempo = 0.0
print("SERVER: Nochmal-Partie aufgebaut=%s" % neu)
await get_tree().create_timer(15.0).timeout
for raum in raeume.get_children():
var g := raum.get_node_or_null("Container/Viewport/Game")
if g == null:
continue
if not gesehen.has(g):
gesehen[g] = {"runden": 0, "letzte": "", "raum": raum.name, "fertig": false}
g.tempo = 0.0
if gesehen.size() > 2:
nochmal += 1
var info: Dictionary = gesehen[g]
if g.phase != info.letzte:
info.letzte = g.phase
if g.phase == "roll":
info.runden += 1
if g.phase == "over" and not info.fertig:
info.fertig = true
enden += 1
var staende: Array = g.seats.map(func(x): return "%s=%d" % [x.name, x.count])
print("SERVER: Raum %s Ende '%s' Runden=%d %s" % [raum.name, g.banner, info.runden, staende])
# Die Nochmal-Partien leben nur kurz: die Clients prüfen sie und gehen,
# dann schliesst der Raum. Also laufend schauen statt einmal am Ende.
var w := 0.0
while w < 8.0:
await get_tree().create_timer(0.1).timeout
w += 0.1
var raeume2 := get_tree().root.get_node_or_null("Main/Raeume")
if raeume2 == null:
continue
for raum in raeume2.get_children():
var g := raum.get_node_or_null("Container/Viewport/Game")
if g != null and not gesehen.has(g):
gesehen[g] = {"runden": 0, "letzte": "", "raum": raum.name, "fertig": false}
nochmal += 1
print("SERVER: Räume gesehen=%d, Nochmal-Partien=%d" % [gesehen.size() - nochmal, nochmal])
await get_tree().create_timer(10.0).timeout
get_tree().quit()