Pooled drag-span ghost pass for [ObjectPlacementService3D]. One pooled ghost per candidate of a CELL or EDGE drag span, tinted from the verdicts the release follows, plus the shared machinery both span paths need: pool preparation, the per-ghost pose/tint/track step, and the tail that hides the surplus ghosts and publishes the span's validity. This lives outside the service because it is presentation over an already resolved candidate set, never authority: the service still owns validation, the ghost, the tint, the contact ring, and the preview cell/mount it writes. The service's [method ObjectPlacementService3D.update_preview_cell_span], [method ObjectPlacementService3D.resolve_cell_span] and [method ObjectPlacementService3D._update_preview_edge_span] delegate here. Before this pass existed, a CELL LINE/RECTANGLE drag left only the single cursor ghost in place, so the preview showed one object where the release stamped a whole run. CELL and EDGE now share one implementation, so neither path can drift back into previewing less than it commits.
Source: addons/grid_placement/systems/building/3d/object_placement_span_ghosts_3d.gd
Syntax
class ObjectPlacementSpanGhosts3D extends RefCountedMembers
| Name | Kind | Summary |
|---|---|---|
preview_cell_span | Method | |
entry | Property | |
valids | Property | |
all_valid | Property | |
cell | Property | |
valid | Property | |
validation | Property | |
ghost | Property | |
preview_edge_span | Method | |
entry | Property | |
valids | Property | |
all_valid | Property | |
cell | Property | |
edge | Property | |
ghost | Property | |
posed | Property | |
issues | Property | |
valid | Property | |
resolve_cell_span | Method | |
results | Property | |
entry | Property | |
ghost | Property |