Build-Tool: ray_pick ohne 500-m-Cap (t_555e33da) — Umschalt+Klick/Baustapel-Pick funktioniert jetzt auch im Default-Framing (~614 m Kamera-Distanz); Workaround-Zoom im RMB-Test entfernt.

This commit is contained in:
Hermes (godot-vr) 2026-10-17 17:39:30 +00:00
parent 7521db7f8d
commit d6c472603f
2 changed files with 7 additions and 7 deletions

View file

@ -305,7 +305,11 @@ static func piece_aabb(teil: Dictionary) -> AABB:
## Analytischer Ray-Treffer auf den gebackenen Flächen (Möller–Trumbore) — ## Analytischer Ray-Treffer auf den gebackenen Flächen (Möller–Trumbore) —
## kein Physik-Space nötig (SubViewport ohne Physik-Tick, headless-testbar). ## kein Physik-Space nötig (SubViewport ohne Physik-Tick, headless-testbar).
## Rückgabe: {"piece": Teil-Index, "punkt": Vector3} oder {}. ## 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 faces: PackedVector3Array = baked.get("faces", PackedVector3Array())
var offsets: Array = baked.get("offsets", []) var offsets: Array = baked.get("offsets", [])
var tri_count := int(faces.size() / 3) var tri_count := int(faces.size() / 3)

View file

@ -278,12 +278,8 @@ func _test_build_rmb_flies() -> void:
return return
var ppos: Array = (gebaeude[0] as Dictionary).get("pos", [0.0, 0.0, 0.0]) 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])) 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- # Regression (t_555e33da): Selektion muss im DEFAULT-Framing funktionieren —
# Framing (1024-m-Map, Kamera ~614 m weg) würde der Pick leer bleiben. # kein Heranzoomen mehr nötig (früher: ray_pick-Cap 500 m < Kamera-Distanz).
# 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)
var on_piece := camera.unproject_position(piece_center) var on_piece := camera.unproject_position(piece_center)
_motion(on_piece) _motion(on_piece)
_mouse(MOUSE_BUTTON_LEFT, true, on_piece, false, true) _mouse(MOUSE_BUTTON_LEFT, true, on_piece, false, true)