Files
elements-autochess/tests/CamCal.gd
2026-09-16 13:21:45 +02:00

71 lines
2.6 KiB
GDScript

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