71 lines
2.6 KiB
GDScript
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()
|