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:
parent
7521db7f8d
commit
d6c472603f
2 changed files with 7 additions and 7 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue