scopedvr-map-editor/tests/probe_inspector_render.gd

41 lines
1.5 KiB
GDScript

extends SceneTree
## Beweis-Probe (Karte t_bb0d11c9, WEGWERF — nicht Teil der Suite):
## rendert die echte Main-UI mit markiertem Objekt + gefülltem Inspektor
## und speichert einen Screenshot (PROBE_PNG-Umgebungsvariable).
## Aufruf: xvfb-run -a godot4 --path . --rendering-driver opengl3 \
## -s res://tests/probe_inspector_render.gd
func _initialize() -> void:
_run.call_deferred()
func _run() -> void:
var scene: PackedScene = load("res://scenes/main.tscn")
var main = scene.instantiate()
root.add_child(main)
await process_frame
await process_frame
# Erst NACH _ready setzen — die Main-UI setzt ihren Fensterzustand selbst
# (maximiert/Lage-Restore) und überschreibt frühere Größen (xvfb ohne WM).
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_size(Vector2i(2328, 1310))
(main.doc["objects"] as Array).append({
"id": "barrel_001", "pos": [8.0, 0.0, 8.0], "scale": 1.5, "rot_y_deg": 30.0})
(main.doc["objects"] as Array).append({
"id": "crate_wood", "pos": [14.0, 0.0, 6.0], "scale": 1.0, "rot_y_deg": 0.0})
main.call("_after_structure_change")
main.interaction.call("select_object", 0)
var cam = main.get("camera")
if cam != null:
cam.call("focus_on", Vector3(8.0, 0.0, 8.0))
cam.set("distance", 30.0)
for i in 6:
await process_frame
await RenderingServer.frame_post_draw
var img := root.get_texture().get_image()
var out := OS.get_environment("PROBE_PNG")
if out.is_empty():
out = "/tmp/probe_inspector.png"
img.save_png(out)
print("PNG_OK ", out)
quit(0)