Dimension-dispatched 3D counterpart of the 2D [IndicatorManager]. Shows one [RuleCheckIndicator3D] per footprint cell of the active preview, tinted green/red from the per-cell verdicts of [method ObjectPlacementService3D.validate_cell_map]. Mount-aware projection: every mount lands a FLAT quad on the host ground tile — CELL on the evaluated support surface, EDGE/FACE/CORNER on their host cell. There are deliberately no wall-plane (vertical) indicators: the tinted ghost already shows the mount pose, so the quads only add the per-cell verdict the ghost tint cannot (WHICH cell of a multi-cell footprint or drag span is blocked). Indicators never fall back to an unrelated lower slot — an elevated host is evaluated (and highlighted) at its own height. TOP feedback lands when TOP ships in the supported contract (tracked on the GRID TOP mount issue). Visual design: indicators are FLAT ground-projected quads hovering just above the resolved surface — deliberately not cubes/volumes, which the 3D preview guide rejects for occluding the scene (the tinted ghost already communicates the volume). The quads add the per-cell information the ghost tint cannot: WHICH cell of a multi-cell footprint is blocked. Explicitly 3D-only glue over [ObjectPlacementService3D]; it shares no code with the 2D indicator pipeline on purpose, to keep explicit 2D/3D service boundaries over premature generalization. This node is the 3D rule/validation host; consumers read placement validity through [PlacementReport]/service results, and this node never decides game-world consequences.
Source: addons/grid_placement/placement/manager/indicator_manager_3d.gd
Syntax
class IndicatorManager3D extends Node3DMembers
| Name | Kind | Summary |
|---|---|---|
SURFACE_LIFT | Field | Lift above the resolved surface so quads never z-fight the ground, the grid-line plane, or the ghost's lower faces. Too small a lift reads as depth-precision scan lines where the coplanar surfaces overlap. |
CELL_INSET | Field | Quad inset within the cell so adjacent indicators read as separate cells. |
configure | Method | |
shows_ground_indicators | Method | |
update_for_cell | Method | |
update_for_cells | Method | |
show_cells | Method | |
update_for_face | Method | |
update_for_edge | Method | |
update_for_edges | Method | |
update_for_corner | Method | |
clear | Method | |
get_indicators | Method | |
get_visible_count | Method |