72 lines
3.1 KiB
GDScript
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": "crate_wood", "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)
|