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()