extends Node3D ## Rendert dieselbe Aufstellung mit verschiedenen Kameraeinstellungen. var main: Node3D var out_dir := "user://shots" const SETS := [ {"pos": Vector3(0, 17.0, 15.5), "fov": 42.0, "h": 0.0, "v": 0.0}, {"pos": Vector3(0, 17.0, 15.5), "fov": 42.0, "h": 0.4, "v": -1.0}, {"pos": Vector3(0, 17.0, 15.5), "fov": 42.0, "h": 0.4, "v": 1.0}, {"pos": Vector3(0, 19.0, 17.0), "fov": 40.0, "h": 0.4, "v": 1.4}, ] 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 _run() -> void: await get_tree().create_timer(0.5).timeout main._start_game(false) main.game.timer_enabled = false var p: PlayerState = main.game.human main.game.round_no = 14 var el := [Data.Element.FEUER, Data.Element.ERDE, Data.Element.WASSER] var i := 0 for hex in [Vector2i(1, 0), Vector2i(5, 0), Vector2i(3, 1), Vector2i(0, 3), Vector2i(6, 3)]: p.board[hex] = Avatar.new(i % 3, [el[i % 3]] as Array[int], 1) i += 1 main._refresh() # Volles Board: alle 4 Reihen belegen, damit die Einpassung sichtbar wird. p.board.clear() main.game.round_no = 20 var k := 0 for r in Data.BOARD_ROWS: for c in [0, 3, 6]: p.board[Vector2i(c, r)] = Avatar.new(k % 3, [el[k % 3]] as Array[int], 1) k += 1 main._refresh() await get_tree().create_timer(0.4).timeout await RenderingServer.frame_post_draw get_viewport().get_texture().get_image().save_png("%s/fit.png" % out_dir) print("Kamera: ", main.camera.global_position, " blickt auf ", main.camera.global_position - main.camera.global_transform.basis.z * 10.0) # Trefferprüfung: jedes Feld muss unter seiner eigenen Bildschirmposition liegen. var bad := 0 for r in Data.BOARD_ROWS: for c in Data.BOARD_COLS: var bh := Vector2i(c, r) var sp: Vector2 = main.board.slot_screen({"kind": "board", "hex": bh}) var hit: Dictionary = main._pick_slot(sp) if hit.get("kind", "") != "board" or hit["hex"] != bh: bad += 1 print(" Treffer daneben bei ", bh, " -> ", hit, " (Bildschirm ", sp, ")") print("Trefferprüfung Board: ", 28 - bad, "/28 Felder korrekt") var bad2 := 0 for b in Data.BENCH_SLOTS: var sp2: Vector2 = main.board.slot_screen({"kind": "bench", "index": b}) var hit2: Dictionary = main._pick_slot(sp2) if hit2.get("kind", "") != "bench" or hit2["index"] != b: bad2 += 1 print(" Bankplatz daneben: ", b, " -> ", hit2) print("Trefferprüfung Bank: ", Data.BENCH_SLOTS - bad2, "/", Data.BENCH_SLOTS, " Plätze korrekt") get_tree().quit()