Grid Placement

Architecture overview (5.0.2)

Mental model for GridBuilding 5.0.2: node-first integration, injector/container era, and state-first wiring.

GridBuilding 5.0.2 is best understood as a node-first plugin with a composition-container / injector integration style.

Core Systems

5.0.2 consists of these main systems that work together:

SystemPurposeLocation
GBInjectorSystemInitializes and wires dependencies across the sceneaddons/grid_building/systems/injection/
GBCompositionContainerHolds global configuration (rules, settings, state)Resource-based configuration
BuildingSystemOrchestrates placement workflow, manages placeablesaddons/grid_building/systems/building/
GridTargetingSystemTracks where the player is targeting on the gridaddons/grid_building/systems/grid_targeting/
GridPositioner2DNode2D that positions on grid cellsaddons/grid_building/systems/grid_targeting/grid_positioner/
TargetingShapeCast2DShapeCast2D for querying objects under cursoraddons/grid_building/systems/grid_targeting/grid_positioner/
ManipulationSystemManages object manipulation (move, rotate, flip)addons/grid_building/systems/manipulation/

Key Classes

State Management

ClassPurpose
GBStatesContainer for all state (mode, targeting, etc.)
ModeStateCurrent building mode (OFF, BUILD, MANIPULATE)
GridTargetingStateTargeting information (target cell, map, positioner)

Placement Rules

ClassPurpose
PlacementRuleBase class for all placement rules (v5.0)
TileCheckRuleBase class for rules evaluating TileMapGrid
CollisionsCheckRuleChecks for overlapping physics bodies
WithinTilemapBoundsRuleValidates placement within tilemap bounds
ValidPlacementTileRuleBasic placement validity check

Boundary (5.0.2)

  • Godot nodes + scripts
    • Own most runtime behavior.
    • Public API is primarily node exports + signals.
  • Composition container + injector
    • Wiring layer that assigns settings/services/state into nodes.
  • State-first coordination
    • Many listeners consume state directly (polling or state references in signals).
    • 5.0.2 does not consistently separate event payloads from state.

High-level shape

Godot nodes / scripts
  ↓
GBInjectorSystem (initialization)
  ↓
GBCompositionContainer (configuration)
  ↓
Systems (BuildingSystem, GridTargetingSystem, ManipulationSystem)
  ↓
Nodes (GridPositioner2D, TargetingShapeCast2D)

Data Flow

  1. Initialization: GBInjectorSystem reads GBCompositionContainer and injects dependencies
  2. Input: Player input goes to GridTargetingSystem
  3. Targeting: TargetingShapeCast2D queries scene, GridPositioner2D positions preview
  4. Validation: Placement rules validate against GridTargetingState
  5. Placement: BuildingSystem orchestrates final placement

What 5.0.2 optimized for

  • Fast adoption: add nodes to a scene, connect signals, configure exports.
  • Direct debuggability in the editor: follow node references in the inspector.

What 5.0.2 did not standardize (later improved in 6.0)

  • A strict, explicit split between:
    • service-owned state
    • event payloads
    • diagnostics snapshots

6.0 improves this by introducing a clearer boundary where:

  • signals/events carry small payload objects (EventData)
  • snapshots exist for diagnostics/tests
  • internal state stays private to services

Validated By

  • Recommended Workflow: res://addons/grid_building/test/integration/getting_started_workflow_test.gd — test_recommended_ui_trigger_flow validates the UI-driven interaction pattern for starting the building lifecycle.
  • System Coordination: res://addons/grid_building/test/e2e/all_systems_integration_tests.gd — Validates the integration and communication between BuildingSystem, ManipulationSystem, and GridTargetingSystem.
  • Dependency Wiring: res://addons/grid_building/test/utilities/data/environment_loading_unit_test.gd — Confirms that GBCompositionContainer correctly initializes states and context for system consumption.
  • Rule Hierarchy: res://addons/grid_building/test/rules/validation/rule_system_integration_tests.gd — Verifies that the rule system correctly processes both base rules and placeable-specific overrides.
  • Node Lifecycle: res://addons/grid_building/test/integration/grid_positioner_rotation_integration_test.gd — Validates the interaction between GridPositioner2D and ManipulationParent within the node hierarchy.