Files
pirate-dice/tests/kampagne.gd
2026-09-16 17:55:28 +02:00

79 lines
3.5 KiB
GDScript

extends "res://tests/basis.gd"
## Kampagne: Wertung, Rang, Verschwinden und Rückkehr der Kapitäne,
## Speichern und Laden, und eine echte Partie gegen einen Kapitän im
## Simulationsmodus.
var game: Node
func _ready() -> void:
Kampagne.datei = "user://kampagne_test.json"
Kampagne.zuruecksetzen()
add_child(preload("res://scenes/main.tscn").instantiate())
await get_tree().process_frame
_lauf()
func _seats(alive: Array, namen: Array) -> Array:
var out: Array = []
for i in namen.size():
out.append({"name": namen[i], "alive": alive[i]})
return out
func _lauf() -> void:
# --- Wertung und Rang
_pruef("Start: 1000, Matrose", int(Kampagne.elo) == 1000 and Kampagne.mein_rang() == "Matrose")
_pruef("Rang steigt mit der Wertung", Kampagne.rang(1300) == "Kapitän" and Kampagne.rang(800) == "Schiffsjunge")
# --- Sieg: Kapitän verschwindet, Wertung steigt
Kampagne.aktiv = "Roter Jack"
Kampagne.ergebnis(_seats([true, false], ["Spieler", "Roter Jack"]), [1])
var jack: Dictionary = Kampagne.kapitaen("Roter Jack")
_pruef("Sieg: Wertung steigt", Kampagne.elo > 1000.0)
_pruef("Sieg: Kapitän geht auf See", int(jack.weg) == Kampagne.AUF_SEE and int(jack.geschlagen) == 1)
_pruef("Ergebnistext steht", Kampagne.letztes.begins_with("Sieg gegen Roter Jack"))
Kampagne.starten("Roter Jack")
_pruef("Kein Start gegen einen auf See", Kampagne.aktiv == "" and _find(get_tree().root, "Game") == null)
var vorher := Kampagne.elo
# --- Niederlage: Spieler fliegt vor dem Kapitän
Kampagne.aktiv = "Salz-Marie"
Kampagne.ergebnis(_seats([false, false, true], ["Spieler", "Salz-Marie", "Maat 1"]), [0, 1])
_pruef("Niederlage: Wertung sinkt", Kampagne.elo < vorher)
_pruef("Niederlage: Kapitänin bleibt", int(Kampagne.kapitaen("Salz-Marie").weg) == 0)
_pruef("Jack rückt näher", int(Kampagne.kapitaen("Roter Jack").weg) == Kampagne.AUF_SEE - 1)
# --- Sieg, weil der Kapitän vor dem Spieler ging, obwohl ein Maat gewann
Kampagne.aktiv = "Salz-Marie"
Kampagne.ergebnis(_seats([false, false, true], ["Spieler", "Salz-Marie", "Maat 1"]), [1, 0])
_pruef("Kapitän vor mir raus zählt als Sieg", int(Kampagne.kapitaen("Salz-Marie").weg) == Kampagne.AUF_SEE)
jack = Kampagne.kapitaen("Roter Jack")
_pruef("Jack ist zurück, stärker", int(jack.weg) == 0 and int(jack.stufe) == 1 and float(jack.elo) > 900.0)
# --- Speichern und Laden
var elo_alt := Kampagne.elo
Kampagne.speichern()
Kampagne.elo = 0.0
Kampagne.laden()
_pruef("Laden stellt Wertung und Kapitäne wieder her",
absf(Kampagne.elo - elo_alt) < 0.01 and int(Kampagne.kapitaen("Salz-Marie").weg) == Kampagne.AUF_SEE
and int(Kampagne.kapitaen("Roter Jack").stufe) == 1)
# --- Echte Partie gegen Jack im Simulationsmodus
var partien_vorher := Kampagne.partien
Kampagne.starten("Roter Jack")
await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 20.0)
_pruef("Partie gegen den Kapitän steht", game != null and game.seats.size() == 2
and String(game.seats[1].name) == "Roter Jack" and int(game.seats[1].stufe) == 1)
game.tempo = 0.0
game.simulation = true
game.seats[game.local_seat].ai = true
await _warte(func(): return game.phase == "over", 120.0)
_pruef("Partie endet", game.phase == "over")
_pruef("Ergebnis verbucht", Kampagne.partien == partien_vorher + 1 and Kampagne.aktiv == "" and Kampagne.letztes != "")
_pruef("Endfeld zeigt Wertung", game.hud.over_slot.visible and Kampagne.letztes in game.hud.over_title.text
and game.hud.over_karte.visible)
DirAccess.remove_absolute(ProjectSettings.globalize_path(Kampagne.datei))
_fertig()