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 var starter := Profile.starter().deck_cards() print("Gegnerdeck (Zielstärke): %.1f ms" % ms(func(): DeckGen.build_opponent_deck_rated(r, ["Feuer", "Erde"], 1.5), 10)) print("Vorschau 1..5 Gegner: %.1f ms" % ms(func(): for n in range(1, 6): for i in n: Game.random_opponent(r, i + 1, Game.START_LIFE, 1.3, ""))) for n in [1, 3, 5]: var g := Game.new_battle(starter, n, r, {"target_rating": 1.5}) # ein volles Brett für alle, damit die Entscheidung teuer wird var uid := 5000 for p in g.players: p.mulligan_done = true for k in 4: var c := Game.Creature.new(Cards.by_id("f_wolf"), p, uid) uid += 1 c.ready = true c.attacks_left = 1 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_funke")) 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(starter, 5, r).clone(), 20)) print("Musik erzeugen (läuft im Hintergrund-Thread): %.0f ms" % ms(func(): Sfx.new()._music())) print("Deckstärke berechnen: %.3f ms" % ms(func(): Game.deck_rating(starter), 100)) print("Snapshot 6 Spieler: %.2f ms" % ms(func(): Game.new_battle(starter, 5, r).snapshot(0), 10)) quit()