From d6c472603f8840c6fa8dd1592cd869deb367279f Mon Sep 17 00:00:00 2001 From: "Hermes (godot-vr)" Date: Sat, 17 Oct 2026 17:39:30 +0000 Subject: [PATCH] =?UTF-8?q?Build-Tool:=20ray=5Fpick=20ohne=20500-m-Cap=20(?= =?UTF-8?q?t=5F555e33da)=20=E2=80=94=20Umschalt+Klick/Baustapel-Pick=20fun?= =?UTF-8?q?ktioniert=20jetzt=20auch=20im=20Default-Framing=20(~614=20m=20K?= =?UTF-8?q?amera-Distanz);=20Workaround-Zoom=20im=20RMB-Test=20entfernt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/editor/build_ops.gd | 6 +++++- tests/test_rmb_vorrang.gd | 8 ++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/editor/build_ops.gd b/src/editor/build_ops.gd index dad6cce..ae4bb18 100644 --- a/src/editor/build_ops.gd +++ b/src/editor/build_ops.gd @@ -305,7 +305,11 @@ static func piece_aabb(teil: Dictionary) -> AABB: ## Analytischer Ray-Treffer auf den gebackenen Flächen (Möller–Trumbore) — ## kein Physik-Space nötig (SubViewport ohne Physik-Tick, headless-testbar). ## Rückgabe: {"piece": Teil-Index, "punkt": Vector3} oder {}. -static func ray_pick(baked: Dictionary, origin: Vector3, dir: Vector3, max_dist: float = 500.0) -> Dictionary: +## max_dist ist nur pro Aufruf begrenzbar (Default: unbegrenzt) — ein Cap von +## 500 m war hier früher die Ursache dafür, dass Umschalt+Klick im Default- +## Framing (~614 m Kamera-Distanz) schlicht nichts traf. Performance-unkritisch: +## der Tri-Loop läuft über alle gebackenen Faces, egal wie der Cap steht. +static func ray_pick(baked: Dictionary, origin: Vector3, dir: Vector3, max_dist: float = INF) -> Dictionary: var faces: PackedVector3Array = baked.get("faces", PackedVector3Array()) var offsets: Array = baked.get("offsets", []) var tri_count := int(faces.size() / 3) diff --git a/tests/test_rmb_vorrang.gd b/tests/test_rmb_vorrang.gd index a3b4913..d07c2d4 100644 --- a/tests/test_rmb_vorrang.gd +++ b/tests/test_rmb_vorrang.gd @@ -278,12 +278,8 @@ func _test_build_rmb_flies() -> void: return var ppos: Array = (gebaeude[0] as Dictionary).get("pos", [0.0, 0.0, 0.0]) var piece_center := Vector3(float(ppos[0]), float(ppos[1]) + 0.3, float(ppos[2])) - # Bauen-Pick-Radius: BuildOps.ray_pick hat max_dist=500 m — beim Default- - # Framing (1024-m-Map, Kamera ~614 m weg) würde der Pick leer bleiben. - # Deshalb für den Selektions-Klick nah heranzoomen (vorheriges Verhalten, - # kein Teil dieser Karte —siehe Task-Kommentar/Follow-up). - camera.set("distance", 120.0) - camera.call("focus_on", piece_center) + # Regression (t_555e33da): Selektion muss im DEFAULT-Framing funktionieren — + # kein Heranzoomen mehr nötig (früher: ray_pick-Cap 500 m < Kamera-Distanz). var on_piece := camera.unproject_position(piece_center) _motion(on_piece) _mouse(MOUSE_BUTTON_LEFT, true, on_piece, false, true)