scopedvr-map-editor/tests/probe_u2_scene_tree_render.gd

70 lines
No EOL
2.6 KiB
GDScript

extends SceneTree
## Render-Probe U2 (Karte t_e3c0310a): Szenen-Baum links mit Zwei-Wege-Auswahl.
## Legt 3 Objekte an, wählt Objekt 1 in 3D (interaction.select_object) und
## rendert die echte Main-UI: der Baum links muss die Kategorie-Ebene, das
## Auge-Präfix und die markierte Zeile zeigen; in 3D muss das Objekt
## hervorgehoben sein.
## Start (BRAUCHT Rendering — NICHT --headless):
## xvfb-run godot --path . --rendering-driver opengl3 -s res://tests/probe_u2_scene_tree_render.gd
var out_dir := "/opt/data/profiles/scopedvr-dev/cache/scratch"
func _initialize() -> void:
if OS.get_cmdline_user_args().size() > 0:
out_dir = OS.get_cmdline_user_args()[0]
# Feste Fenstergröße (sonst fallen die Docks im xvfb-Default zusammen).
root.size = Vector2i(1440, 900)
root.mode = Window.MODE_WINDOWED
await process_frame
await process_frame
var scene: PackedScene = load("res://scenes/main.tscn")
var main = scene.instantiate()
root.add_child(main)
await process_frame
await process_frame
await process_frame
# Drei Objekte nah an der Kartenmitte, kräftig skaliert (sichtbar aus
# der Startansicht 80 m über der Mitte).
(main.doc["objects"] as Array).append({
"id": "barrel_001", "pos": [0.0, 0.0, 0.0], "scale": 3.0, "rot_y_deg": 0.0})
(main.doc["objects"] as Array).append({
"id": "crate_wood", "pos": [9.0, 0.0, 5.0], "scale": 20.0, "rot_y_deg": 25.0})
(main.doc["objects"] as Array).append({
"id": "fremd_objekt_xyz", "pos": [-9.0, 0.0, -5.0], "scale": 3.0, "rot_y_deg": 0.0})
main.call("_after_structure_change")
await process_frame
await process_frame
# Objekt 1 in 3D auswählen → Baum-Zeile wird mitmarkiert (Zwei-Wege).
main.interaction.call("select_object", 1)
main.call("_focus_selection") # Kamera auf die Auswahl (Objekt sichtbar machen)
# Hinweis-Dialoge (z. B. „Modelle fehlen" im Klon ohne GLB-Quellen) schließen,
# damit der Beweis die 3D-Ansicht frei gibt.
for child in main.get_children():
if child is Window or child is AcceptDialog:
child.hide()
await process_frame
await process_frame
await process_frame
await RenderingServer.frame_post_draw
var img := root.get_texture().get_image()
var out_path := out_dir + "/u2_baum_links_beweis.png"
img.save_png(out_path)
print("PROBE_PNG: ", out_path)
print("PROBE_FERTIG: Auswahl=", main.interaction.get("selected_index"),
" Baumzeile=", tree_mark_ok(main))
quit(0)
func tree_mark_ok(main) -> bool:
var tm = main.get("tree_mod")
if tm == null:
return false
var imap: Dictionary = tm.get("_obj_index_map")
if not imap.has(1):
return false
return (imap[1] as TreeItem).is_selected(0)