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://core/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": "box_001", "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)