Placement entry for instancing scene objects into the game world. Carries a [member packed_scene] plus object-specific tool/rule overrides. The canonical replacement for the v5 Placeable class. Runtime-instantiated: games call ScenePlacementEntry.new() to populate catalogs and the engine reads it on placement passes. Do not mark @tool.
Source: addons/grid_placement/placement/placeable/scene_placement_entry.gd
Syntax
class ScenePlacementEntry extends PlacementEntryMembers
| Name | Kind | Summary |
|---|---|---|
display_name | Property | Display name for in-game reading. |
cell_anchor_offset | Method | |
cell_anchor_mode | Property | Tile-space occupancy on non-orthogonal layouts derives from measured collision, never from this file: see PlacementGeometryUtils.collision_covered_tiles (the collision-calculated footprint — world AABBs of diamond-adjacent blocks overlap even when the blocks only share an edge, so tile sets are the exact comparator). |
packed_scene | Property | Scene to instance when placed. |
profiles | Property | Placement profiles for grouping entries with shared behavior. Profiles carry their own [member PlacementProfile.placement_rules] and [member PlacementProfile.supported_object_tools] that layer into the three-tier rule/tool resolution. |
snap_profile_3d | Property | Optional 3D snap-category metadata (family + accept-list). Consulted by [ObjectPlacementService3D] when validating 3D placements; ignored in 2D. |
footprint_2d | Property | Footprint in 2D world units (x, y) for smooth/free placement mode. The object occupies this axis-aligned rectangle centered on its position. Required for smooth placement; default [Vector2.ZERO] makes smooth placement fail closed until a footprint is configured. |
surface_size_2d_cells | Property | Size in GRID CELLS of the stackable top surface this entry offers. [Vector2.ZERO] (the default) means this entry offers NO surface and nothing can be stacked on it — which is every existing 2D entry, so existing catalogs keep their behavior bit-for-bit. Measured in cells, not pixels, so one catalog works at any tile size; see [method PlacementMount2D.seat_offset_pixels] for the conversion. A 2x3 table declares [code]Vector2(2, 3)[/code] and offers 6 slots. |
surface_height_2d | Property | How many EXTRA stacked levels this entry itself supports above its own top surface. 0 = it is a flat surface only and cannot host another level. A barrel-with-a-lid might declare 1. |
stacks_on_surface | Property | When true, this entry is a STACKABLE: the placement flow seats it on the top surface of whatever host occupies the targeted cell, instead of taking that cell's floor occupancy for itself. This is the small-item half of the contract (a book on a table); [member surface_size_2d_cells] is the host half (the table). Declaring both is legal — an entry can host and be stacked. Declaring neither is the default and every existing 2D entry keeps its current behavior exactly. With no valid host under the cursor a stackable falls back to a CELL mount, so a stackable is still placeable on bare ground rather than becoming unplaceable. |
is_2d_stack_participant | Method | |
footprint_3d | Property | Footprint in GridMap cells (x, z) for 3D grid placement. The targeted cell is the footprint's minimum corner; validation checks occupancy, ground, and the active support policy across every covered column. Ignored in 2D. |
footprint_3d_world | Property | Footprint in 3D world units (x, y, z) for smooth/free placement mode. The object occupies this axis-aligned box centered on its position. Required for smooth 3D placement; default [Vector3.ZERO] means no footprint and the service will fail closed. GRID EDGE mounts also read x (span along the edge) and z (thickness across it) as span INTENT: validation sizes the overlap box from this footprint and centers it on the measured mesh, so meshes may overhang for continuity (fence rails) without widening the span, while offset kits still land exactly. Entries without a footprint keep legacy single-edge occupancy. |
seam_bounds_3d | Property | Authored mesh truth for GRID seam closure, in entry-local space unrotated: the visual AABB of packed_scene's meshes. Consumed only when the snap profile enables seam_close_to_partner; default empty means unset and the closure is a no-op. A GdUnit contract test asserts these bounds still match the live mesh, so the data cannot rot silently. |
custom_min_support_ratio | Property | -1 means inherit ObjectPlacementSettings3D.min_support_ratio. |
custom_world_up_clearance | Property | -1 means inherit ObjectPlacementSettings3D.world_up_clearance. |
custom_max_support_planarity_error | Property | -1 means inherit ObjectPlacementSettings3D.max_support_planarity_error. |
custom_max_unsupported_edge_ratio | Property | -1 means inherit ObjectPlacementSettings3D.max_unsupported_edge_ratio. |
custom_require_center_support | Property | -1 = inherit, 0 = do not require center support, 1 = require center support. |
tool_override_mode | Property | How this entry's [member tool_overrides] interact with its profiles' [member PlacementProfile.supported_object_tools]. See [enum ToolOverrideMode]. |
tool_overrides | Property | Tools added or removed depending on [member tool_override_mode]. - [enum INHERIT]: ignored (profiles provide the full list) - [enum REPLACE]: this list IS the full tool set - [enum ADD]: these are unioned with profile tools - [enum REMOVE]: these are subtracted from profile tools |
is_clearable_decor | Property | When true, this entry is decorative ground dressing (grass, flowers): placing any other entry on its columns removes it automatically instead of rejecting with CELL_OCCUPIED (or stacking an overlay over it). Default false: ordinary occupants keep blocking as before. |
catalog_locked | Property | When true, catalog UI shows this entry as locked (not selectable). Used by demos to illustrate an unlock-gated placeable without a grey placeholder. |
get_build_costs | Method | |
get_display_name | Method | |
get_load_data | Method | |
load_resource | Method | |
get_packed_root_name | Method | |
is_grid_socket_mount | Method | |
resolve_object_tools | Method | |
get_editor_issues | Method | |
UID | Field | |
FILE_PATH | Field |