extends SceneTree ## Laufzeitmessung: Start, KI-Entscheidungen, Deckerzeugung, Vorschau, Musik. func ms(f: Callable, n: int = 1) -> float: var t0 := Time.get_ticks_usec() for i in n: f.call() return (Time.get_ticks_usec() - t0) / 1000.0 / n func _initialize() -> void: var t := ms(func(): Cards.all()) print("Kartenpool laden: %.1f ms" % t) var r := RandomNumberGenerator.new() r.seed = 3 print("Stapel würfeln: %.2f ms" % ms(func(): DeckGen.random_deck(r), 20)) print("Gegner erzeugen: %.2f ms" % ms(func(): DeckGen.random_opponent(), 20)) for n in [1]: var g := Game.new_battle(r) # ein volles Brett für alle, damit die Entscheidung teuer wird var uid := 5000 for p in g.players: for k in 4: var c := Game.Creature.new(Cards.by_id("f_3_2"), p, uid) uid += 1 c.ready = true p.board.append(c) var h: Game.Player = g.players[0] h.energy = 10 h.max_energy = 10 for k in 6: h.hand.append(Cards.by_id("f_4_3")) AI.time_budget_ms = 100000 var t_full := ms(func(): AI.choose_action(g, h)) AI.time_budget_ms = 150 var t_budget := ms(func(): AI.choose_action(g, h)) var cands := AI.candidate_actions(g, h).size() print("KI-Entscheidung, %d Gegner, %d Kandidaten: ohne Budget %.0f ms, mit Budget %.0f ms" % [n, cands, t_full, t_budget]) print("Spielkopie: %.3f ms" % ms(func(): Game.new_battle(r).clone(), 20)) print("Musik erzeugen (läuft im Hintergrund-Thread): %.0f ms" % ms(func(): Sfx.new()._music())) quit()