first commit
This commit is contained in:
141
tests/Probe2.gd
Normal file
141
tests/Probe2.gd
Normal file
@@ -0,0 +1,141 @@
|
||||
extends Node3D
|
||||
|
||||
## Zweiter Durchlauf: Element-Auswahl, 3-Star, grosser Kampf, Spielende.
|
||||
|
||||
var main: Node3D
|
||||
var out_dir := "user://shots"
|
||||
var shot_no := 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var args := OS.get_cmdline_user_args()
|
||||
if args.size() > 0:
|
||||
out_dir = args[0]
|
||||
DirAccess.make_dir_recursive_absolute(out_dir)
|
||||
main = load("res://scenes/Main.tscn").instantiate()
|
||||
add_child(main)
|
||||
_run()
|
||||
|
||||
|
||||
func _wait(s: float) -> void:
|
||||
await get_tree().create_timer(s).timeout
|
||||
|
||||
|
||||
func _shot(n: String) -> void:
|
||||
await RenderingServer.frame_post_draw
|
||||
shot_no += 1
|
||||
get_viewport().get_texture().get_image().save_png("%s/%02d_%s.png" % [out_dir, shot_no, n])
|
||||
print("SHOT ", n)
|
||||
|
||||
|
||||
func _run() -> void:
|
||||
await _wait(0.5)
|
||||
var p: PlayerState = main.game.human
|
||||
|
||||
# 1) Spezialisierung beim Kauf.
|
||||
p.gold = 200
|
||||
main._on_buy(0)
|
||||
await _wait(0.4)
|
||||
print("Picker sichtbar: ", main.picker.visible)
|
||||
await _shot("kauf_spezialisierung")
|
||||
main.picker.hide()
|
||||
main.picker_cb.call(Data.Element.FEUER)
|
||||
await _wait(0.2)
|
||||
print("Gekauft: ", p.bench[0].display_name())
|
||||
p.move_slot({"kind": "bench", "index": 0}, {"kind": "board", "hex": Vector2i(3, 1)},
|
||||
main.game.round_no)
|
||||
main._refresh()
|
||||
await _wait(0.2)
|
||||
print("Aufgestellt: ", p.board.get(Vector2i(3, 1)).display_name())
|
||||
|
||||
# 2) Bis 3-Star aufwerten.
|
||||
for i in 2:
|
||||
p.bench[i] = Avatar.new(Data.Role.DPS, [Data.Element.FEUER] as Array[int], 1)
|
||||
p.upgrade(Vector2i(3, 1), Data.Element.WIND, main.game.pool)
|
||||
for i in 3:
|
||||
p.bench[i] = Avatar.new(Data.Role.DPS, [Data.Element.FEUER] as Array[int], 1)
|
||||
for i in range(3, 6):
|
||||
p.bench[i] = Avatar.new(Data.Role.TANK, [Data.Element.WIND] as Array[int], 1)
|
||||
main.sel_slot = {"kind": "board", "hex": Vector2i(3, 1)}
|
||||
main._refresh()
|
||||
await _wait(0.3)
|
||||
print("3-Star möglich: ", p.can_upgrade(Vector2i(3, 1)))
|
||||
await _shot("dreistern_bereit")
|
||||
p.upgrade(Vector2i(3, 1), Data.Element.BLITZ, main.game.pool)
|
||||
main._refresh()
|
||||
var a: Avatar = p.board[Vector2i(3, 1)]
|
||||
print("3-Star: ", a.display_name(), " star=", a.star, " hp=", int(a.base_stats()["hp"]))
|
||||
await _wait(0.3)
|
||||
await _shot("dreistern")
|
||||
|
||||
# 3) Grosses Team für einen sichtbaren Kampf.
|
||||
main.game.round_no = 14
|
||||
var setup := [
|
||||
[Vector2i(2, 0), Data.Role.TANK, Data.Element.ERDE],
|
||||
[Vector2i(4, 0), Data.Role.TANK, Data.Element.ERDE],
|
||||
[Vector2i(2, 1), Data.Role.DPS, Data.Element.FEUER],
|
||||
[Vector2i(4, 1), Data.Role.DPS, Data.Element.FEUER],
|
||||
[Vector2i(3, 3), Data.Role.HEILER, Data.Element.WASSER],
|
||||
[Vector2i(2, 3), Data.Role.HEILER, Data.Element.EIS],
|
||||
[Vector2i(5, 2), Data.Role.DPS, Data.Element.WIND],
|
||||
]
|
||||
for e in setup:
|
||||
var av := Avatar.new(e[1], [e[2]] as Array[int], 1)
|
||||
p.board[e[0]] = av
|
||||
main.game.human.unlock(e[2])
|
||||
main._refresh()
|
||||
await _wait(0.3)
|
||||
print("Traits: ", p.trait_counts(), " Kombis: ", p.active_combos().size())
|
||||
await _shot("volles_team")
|
||||
|
||||
main._on_ready()
|
||||
await _wait(1.5)
|
||||
await _shot("grosser_kampf")
|
||||
main.combat_speed = 4.0
|
||||
await _wait(3.0)
|
||||
await _shot("kampf_spaeter")
|
||||
if main.game.phase == Game.Phase.COMBAT:
|
||||
main._on_ready()
|
||||
await _wait(0.4)
|
||||
print("Ergebnis: ", main.game.last_round_log)
|
||||
|
||||
# 4) Bis zum Spielende durchlaufen.
|
||||
var guard := 0
|
||||
while main.game.phase != Game.Phase.GAMEOVER and guard < 120:
|
||||
var ai := BotAI.new()
|
||||
ai.setup(main.game.rand)
|
||||
if main.game.human.alive:
|
||||
ai.take_turn(main.game.human, main.game.pool, main.game.rand, main.game.round_no)
|
||||
main._on_ready()
|
||||
if main.game.phase == Game.Phase.COMBAT:
|
||||
main.game.skip_combat()
|
||||
guard += 1
|
||||
main._refresh()
|
||||
await _wait(0.5)
|
||||
print("Spielende nach Runde ", main.game.round_no,
|
||||
" Platz des Spielers: ", main.game.human.placement)
|
||||
await _shot("spielende")
|
||||
|
||||
# 5) Neustart über den Knopf im Overlay.
|
||||
var btn := _find_button(main.overlay, "Neues Spiel")
|
||||
print("Neustart-Knopf gefunden: ", btn != null)
|
||||
if btn != null:
|
||||
btn.pressed.emit()
|
||||
await _wait(0.5)
|
||||
print("Nach Neustart: Runde ", main.game.round_no, " Leben ", main.game.human.hp,
|
||||
" Spieler ", main.game.players.size(), " Overlay ", main.overlay)
|
||||
await _shot("neustart")
|
||||
print("PROBE2 FERTIG")
|
||||
get_tree().quit()
|
||||
|
||||
|
||||
func _find_button(node: Node, text: String) -> Button:
|
||||
if node == null:
|
||||
return null
|
||||
for c in node.get_children():
|
||||
if c is Button and c.text == text:
|
||||
return c
|
||||
var r := _find_button(c, text)
|
||||
if r != null:
|
||||
return r
|
||||
return null
|
||||
Reference in New Issue
Block a user