scopedvr-map-editor/tests/probe_m3_partner_render.gd
slyphax 491a47d3f1 Editor-Bibliothek auf das Military-Desert-Pack umgestellt
- 423 Objekte in 19 deutschen Kategorien (Panzer, Radfahrzeuge, Flugzeuge, Gebaeude,
  Zelte, Tuerme, Mauern, Sperren, Kisten, Technik, Felsen, Boden, Decals ...);
  Gruppen "Bauwerke" und "Kisten & Barrieren" samt Test-Asset-Namenslisten entfernt
- LibraryBrowser: Gruppen/Namen aus dem Manifest (kategorie, name_de), unbekannte
  Kategorien bekommen automatisch eine eigene Gruppe
- Thumbs neu, library/ synchronisiert (inkl. neuer Kollision)
- Neue Identitaetsprobe: Kollision ALLER Objekte Editor = Client = Server
- Tests auf Pack-Objekte umgestellt

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-25 16:31:28 +01:00

72 lines
3.1 KiB
GDScript

extends SceneTree
## Beweis-Probe (Karte t_34908425, WEGWERF — nicht Teil der Suite):
## M3 Objekte spiegeln — Beweis-Bild mit markierten Partnern. Ein Paar wird
## über den ECHTEN Editor-Pfad erzeugt (ObjectOps.symmetry_place_twin wie in
## _place_object), die Quelle über die echte Auswahl angewählt → der Zwilling
## muss die SCHWÄCHERE Partner-Markierung tragen (gleiche Material-Technik).
## Aufruf: xvfb-run -a godot4 --path . --rendering-driver opengl3 \
## -s res://tests/probe_m3_partner_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
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_size(Vector2i(2328, 1310))
# Symmetrie-Modus PUNKT (Standard) + Paar über den echten Objekt-Pfad.
main.set("sym_mode", SymmetryCore.Mode.POINT)
(main.doc["objects"] as Array).append({
"id": "box_001", "pos": [14.0, 0.0, 6.0], "scale": 1.0, "rot_y_deg": 30.0,
})
var res: Dictionary = ObjectOps.symmetry_place_twin(main.doc, 0, SymmetryCore.Mode.POINT)
print("PRUEF twin_index=%d (soll 1)" % int(res.get("twin", -1)))
main.call("_after_structure_change")
await process_frame
await process_frame
var cam = main.get("camera")
if cam != null:
cam.set("distance", 34.0)
cam.call("focus_on", Vector3(0.0, 0.0, 0.0))
await process_frame
await process_frame
# Echte Auswahl: Quelle anwählen → Zwilling schwächer markiert.
main.interaction.call("select_object", 0)
await process_frame
await process_frame
var builder = main.get("view_builder")
var m0 = (builder.object_markers[0] as Node3D).get_child(0) as MeshInstance3D
var m1 = (builder.object_markers[1] as Node3D).get_child(0) as MeshInstance3D
var select_mat: StandardMaterial3D = builder.get("_select_mat")
var partner_mat: StandardMaterial3D = builder.get("_partner_mat")
var ok := true
if m0.material_override != select_mat:
ok = false
print("PRUEF FAIL: Quelle trägt nicht das Auswahl-Material")
else:
print("PRUEF ok: Quelle = volle Auswahl-Markierung")
if m1.material_override != partner_mat:
ok = false
print("PRUEF FAIL: Zwilling trägt nicht das Partner-Material")
else:
print("PRUEF ok: Zwilling = schwächere Partner-Markierung")
# Klartext-Beleg: die zwei Materialien sind verschieden UND der Zwilling
# dunkler (schwächer) als die Auswahl.
print("PRUEF farben: select=%s partner=%s" % [
str(select_mat.albedo_color), str(partner_mat.albedo_color)])
if not partner_mat.albedo_color.is_equal_approx(select_mat.albedo_color.darkened(0.45)):
ok = false
print("PRUEF FAIL: Partner-Farbe ist nicht die abgeschwächte Auswahl-Farbe")
var pfad := OS.get_environment("PROBE_PNG")
if pfad.is_empty():
pfad = "user://probe_m3_partner.png"
var img := root.get_viewport().get_texture().get_image()
img.save_png(pfad)
print("Bild: %s (%dx%d)" % [pfad, img.get_width(), img.get_height()])
print("PROBE_M3_PARTNER_%s" % ("OK" if ok else "FAIL"))
quit(0 if ok else 1)