Skip to content

Class

PlacementSession

Generated GDScript class reference for GridPlacement.PlacementSession.

Status
Current
Version
v6.0
Source updated
Active v6.0 guide line from Grid Placement repo
Generated on
2026-09-01

Primary composition-root for the Grid Building placement system. PlacementSession is a Resource that holds all states, contexts, settings, and the entry catalog in a single object. It maps 1:1 onto the C# [code]IPlacementSession[/code] surface, enabling:

  • Scene-free, code-driven testing (construct a Session, pass it to systems)
  • Code-built placement without a scene tree injector
  • Single-source-of-truth composition for both the injector path (scene-composed games) and the explicit path (libraries/tools) Usage: [codeblock] # Explicit path (code-built, no injector): var session := PlacementSession.new() session.catalog = preload("res://catalog.tres") session.settings = preload("res://settings.tres") var host := GridPlacementHost.new() # Injector path (scene-composed, existing flow): injector.session = session [/codeblock]

Source: addons/grid_placement/resources/placement_session.gd

Syntax

class PlacementSession extends Resource

Members

NameKindSummary
grid_placement_bundlePropertyConfiguration resource for the grid building system. When set, [method get_settings], [method get_templates], [method get_actions], [method get_debug_settings], [method get_runtime_checks], and other config-layer accessors read through this resource. This is the scene-composed on-ramp: editor-authored [code].tres[/code] files assign a [GridPlacementBundle] here.
settingsPropertyMain settings configuration resource. When null, [method get_settings] falls back to [member grid_placement_bundle].settings.
actionsPropertyInput action definitions used by host, input, manipulation, and drag services. When null, [method get_actions] falls back to [member grid_placement_bundle].actions.
catalogPropertyCatalog of available placement entries (objects + terrains).
statesPropertyShared states for plugin systems.
contextsPropertyContext for resolving references to current objects.
terrain_selectedSignalEmitted when [member selected_terrain_name] changes. The host connects to this signal in [method GridPlacementHost.configure] to enter terrain paint mode automatically when the UI selects a terrain.
placeable_selectedSignalEmitted when [member selected_placeable] changes. The host connects to this signal for parity with [signal terrain_selected] — drag service, preview builder, and host observers all react to per-session placeable changes without polling the field.
coordinate_mode_changedSignalEmitted when [member placement_coordinate_mode] changes.
placement_coordinate_modePropertyCoordinate mode for placement targeting. GRID (default) snaps to cell centers; SMOOTH uses exact world positions. Session-scoped, explicit — no heuristic auto-detection. Changing this clears any active preview and resets targeting state so grid and smooth state never bleed.
selected_terrain_namePropertyRuntime terrain selection for this session (NOT serialized — transient per-player state). The terrain palette UI writes the user's pick here; [GridPlacementHost] reads it from the device-resolved active session when dispatching PLACE_SINGLE_TERRAIN / terrain-brush paint. Empty means no terrain is selected and terrain dispatch is a no-op. Keeping it on the session (the one object both the UI and the host already hold) is what lets split-screen sessions each carry their own selection.
selected_terrain_entryPropertyOptional catalog metadata for the selected terrain. These transient fields keep terrain rule/cost validation session-owned without requiring the compatibility building system to mirror UI state.
selected_terrain_paletteProperty
selected_placeablePropertyRuntime placeable selection for this session (NOT serialized — transient per-player state). The placeable UI writes the user's pick here; [GridPlacementHost] reads it from the device-resolved active session when dispatching PLACE_SINGLE_OBJECT / object-drag intents. Null means no placeable is selected and object dispatch is a no-op. Symmetric to [member selected_terrain_name] — this is the object-mode counterpart that fixes the terrain/object cross-leak where a smithy pick drove fence placement.
loggerPropertyCentralized logger instance. Lazily initialized from config.debug when first accessed, so .tres-loaded sessions get the correct log level after [member grid_placement_bundle] is deserialized. Construction delegates through [method PlacementLogger.initialize] which is the canonical composition-time factory. The direct construction call site lives in [code]placement_logger.gd[/code] (the only module where the guard-allowed bootstrap is permitted).
get_contextsMethod
get_statesMethod
get_loggerMethod
get_mode_stateMethod
get_targeting_stateMethod
get_building_stateMethod
get_manipulation_stateMethod
get_placement_rulesMethod
get_runtime_issuesMethod
get_settingsMethod
get_actionsMethod
get_templatesMethod
get_visual_settingsMethod
get_manipulation_settingsMethod
get_debug_settingsMethod
get_runtime_checksMethod
get_indicator_contextMethod
get_action_historyMethod
dump_action_historyMethod
set_statesMethod