Skip to content

Class

PlacementValidation3D

Generated GDScript class reference for GridPlacement.PlacementValidation3D.

Status
Current
Version
v6.1.0
Source updated
2026-09-24
Generated on
2026-09-23

Read-only 3D placement validity policy seam. Runtime placement and development proof tooling consume this evaluator through one shared policy implementation. Everything here is static and side-effect free: callers supply explicit read-only state and receive typed reasons, per-cell evidence, and the resolved support facts used by preview/commit.

Source: addons/grid_placement/systems/building/3d/placement_validation_3d.gd

Syntax

class PlacementValidation3D extends RefCounted

Members

NameKindSummary
GRID_BOUNDFieldTyped rejection reasons for one placement attempt. GridMap components are only addressable inside +/-2^20; cells at or past the bound (including the INT_MAX MISS sentinel) fail closed here so no GridMap call ever sees them.
SPAN_OVERLAP_EPSILONFieldMinimum span penetration (meters) that counts as an EDGE overlap. Touching end-to-end (zero-area contact) stays legal; true overlaps penetrate by decimeters, so a millimeter guard only absorbs float dust.
reasonsPropertyStructured result of one validation attempt. Bitmask of [enum Reason] flags.
issuesPropertyHuman-readable aggregate issue strings, layered on [member reasons].
evidencePropertyRead-only evidence for preview/commit/diagnostic consumers.
cell_issuesPropertyCELL-only projection: footprint cell -> blocking issue strings.
is_validMethod
has_reasonMethod
rejectMethod
reject_atMethod
add_cell_issueMethod
cell_issue_mapMethod
gridPropertyRead-only context for one validation attempt.
settingsProperty
world_3dPropertyPhysics world used only when surface support mode opts into physics.
occupiedPropertyOccupied cells: column key (Vector3i) -> bool/node.
familiesPropertyColumn key -> family name for adjacent-snap checks.
overlay_nodesPropertyColumn key -> Array[Node3D] of the non-occupying CELL overlays (floors, roofs) stacked on the column. Attachment reads consult BOTH channels via _overlay_union_for: an overlay shares its column with an occupant, and either may be the partner. Raw stacks ride the context so unions derive lazily per queried column, never eagerly per attempt.
world_registryProperty
preview_yaw_stepsProperty
facesProperty
face_occupancyProperty
face_familiesProperty
edgesProperty
edge_familiesProperty
topsProperty
top_familiesProperty
cornersProperty
placement_recordsPropertyPlaced root -> PlacementMount, for same-type EDGE replacement checks.
validate_cellMethod
resultProperty
cellsProperty
profileProperty
occupy_columnsProperty
surveyProperty
min_surfacePropertyGridMap surface range of one CELL footprint, read by the support stage.
max_surfaceProperty
missing_groundProperty
surveyProperty
floating_columnsProperty
surfaceProperty
top_rowProperty
support_modeProperty
use_grid_authorityProperty
requiredProperty
samplesProperty
supportProperty
settingsProperty
requires_groundProperty
surfaceProperty
conflict_cellsProperty
first_conflictProperty
conflictProperty
snap_issueProperty
lackingProperty
partner_dirsProperty
lacking_supportProperty
lacking_spanProperty
validate_cell_mapMethod
validate_edgeMethod
resultProperty
edge_keyProperty
span_issueProperty
profileProperty
cell_keyProperty
outProperty
mountProperty
famProperty
overlay_columns_for_familyMethod
outProperty
is_same_type_edge_replaceMethod
occupying_familyProperty
profileProperty
occupantProperty
mountProperty
occupant_groupProperty
candidateProperty
nodeProperty
mountProperty
otherProperty
emptyProperty
sizeProperty
measuredProperty
centerProperty
localProperty
yawProperty
validate_faceMethod
resultProperty
face_keyProperty
height_bandProperty
occupancy_keyProperty
profileProperty
familyProperty
validate_topMethod
resultProperty
top_keyProperty
profileProperty
existing_familyProperty
can_stackProperty
deckProperty
wallsProperty
pairProperty
edge_keyProperty
familyProperty
validate_cornerMethod
resultProperty
keyProperty
profileProperty
validate_move_dropMethod
profileProperty
edge_keyProperty
edge_issuesProperty
face_keyProperty
cell_issuesProperty
cellsProperty
keyProperty
eastProperty
westProperty
east_westProperty
northProperty
southProperty
north_southProperty
emptyProperty
eastProperty
westProperty
east_westProperty
northProperty
southProperty
north_southProperty
emptyProperty
settingsProperty
settingsProperty
topologyProperty
candidatesProperty
cell_sizeProperty
centerProperty
pointProperty
TOUCH_EPSILONField
nodeProperty
boxProperty
hostProperty
x_neighborProperty
z_neighborProperty
x_cellsProperty
z_cellsProperty
x_yawProperty
z_yawProperty
nodeProperty
componentsProperty
instanceProperty
mountProperty
has_compatible_neighborMethod
compatible_neighbor_dirsMethod
dirsProperty
WALL_SUPPORT_RADIUSFieldChebyshev radius (cells) of the wall-support zone for CELL pieces with [member PlacementSnapProfile3D.require_wall_support]. The house roof slopes span ~7.6 m from a 2x2 anchor, so the walls under the eaves sit up to 2 cells from the anchor cells; radius 2 keeps the canonical deck + wall ring green while a bare deck reads red.
footprint_cells_without_wall_supportMethod
lackingProperty
ROOF_SPAN_RADIUSFieldChebyshev radius (cells) of the roof-span zone for CELL pieces with [member PlacementSnapProfile3D.require_roof_span]. Roof slope meshes span ~7.6 m from a 2x2 anchor, so a gable capping the span end sits up to 3 cells from the nearest roof column; radius 4 keeps the canonical house green while a gable in a roofless ring reads red.
footprint_cells_without_roof_spanMethod
lackingProperty
zoneProperty
unionsProperty
anchor_keyProperty
yawProperty
mountProperty
seenProperty
zoneProperty
keyProperty
footprint_cells_without_supportMethod
lackingProperty
offsetsProperty
neighborProperty
neighbor_keyProperty
reasonProperty
issueProperty
lifecycle_reason_forMethod