57 lines
2.0 KiB
GDScript
57 lines
2.0 KiB
GDScript
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()
|