extends "res://tests/basis.gd" ## Spielserver im Zeitraffer. Meldet Ende und Endstand, wartet dann noch, ## damit die Clients ihr Ende selbst sehen. 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 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 var raeume := get_tree().root.get_node_or_null("Main/Raeume") if raeume == null: continue 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()