Building System Process
This page details the end‑to‑end build placement workflow powered by the BuildingSystem - a core entry point for any grid-based building functionality.
🎯 Key Entry Point
When to use: Essential for any grid building functionality - handles the complete placement workflow.
Main class: BuildingSystem (extends Node)
Configuration: GBConfig (Resource)
State management: BuildingState (Resource)
This page details the end‑to‑end build placement workflow: from entering build mode with a selected placeable, through live rule validation with indicators, to final instantiation of the object in the game world.
Overview
Major Enhancements in v5.0.0
🏗️ Architectural Improvements
- Dependency Injection Integration: Complete integration with GBCompositionContainer for better decoupling
- Unified Configuration: All building settings consolidated in GBConfig resource
- Enhanced State Management: Improved BuildingState with better lifecycle handling {/* Supports 4.5 as well. Minimum 4.4+. */}
🔧 Process Enhancements
- Comprehensive Workflow Documentation: New detailed end-to-end build placement workflow
- Enhanced Visual Process Flows: Clear documentation with step-by-step explanations
- Improved Error Handling: Better error reporting and user feedback throughout the process
- Performance Optimizations: Reduced allocations and faster validation cycles
📊 New Features
- Enhanced Preview System: More responsive live preview with better visual indicators
- Improved Instantiation: Better metadata attachment and subsystem registration
- Advanced Post-Placement Handling: Enhanced multi-place mode and manipulation support
- Better Edge Case Handling: Improved handling of error scenarios and edge cases
🐛 Debugging & Diagnostics
- Enhanced Logging: Better tracing throughout the build placement workflow
- Visual Debug Support: Integration with GBDebugSettings for process debugging
- Performance Monitoring: Built-in timing for workflow steps
{/* Detailed step breakdown moved into the Steps list above. */}
Error & Edge Scenarios
| Scenario | Handling |
|---|---|
| Cursor leaves valid build area | can_place false; indicators tinted invalid. |
| Placeable rule list empty | No tile indicators; full validation still runs but likely always valid. |
| Lost reference (placeable freed) mid-preview | Cancel preview; require reselection. |
| Rotation changes geometry drastically | Indicators regenerated; cached tiles invalidated. |
Data Flow Overview
Primary Build Flow:
- Selection UI (placeable chosen) → BuildingSystem → IndicatorManager → IndicatorContext
- IndicatorContext → Collision Mapping → Live Indicators → Per-frame Tile Rules (on indicators)
- BuildingSystem (Confirm) → Full Validation + Signals → PlacementResult → Instantiation (if valid)
Post-Placement Manipulation Flow:
- Mode Toggle/Actions → ManipulationSystem → Manipulatable Nodes
- ManipulationSystem → IndicatorContext (move) → Manipulatable Nodes
- MOVE operation builds temporary context for manipulation
Build Type System (v5.0.0+)
New in v5.0.0: The building system now uses a BuildType enum to differentiate between different build operation modes:
| |
How it flows through the system:
- DragManager calls
building_system.try_build(GBEnums.BuildType.DRAG)during drag operations - BuildingSystem accepts
build_typeparameter intry_build(),report_built(), andreport_failure() - BuildActionData stores the build type and passes it through signals
- GBActionLog checks build type to suppress drag/area build messages when
print_on_drag_build=false - GBAudioInstancer (in demos) skips sounds and throttles failure audio based on build type
Benefits:
- Clean separation between single-click and drag-building operations
- Action log can properly suppress drag build spam
- Audio system can throttle failure sounds during rapid drag attempts
- Future-ready for area building features (fence lines, walls)
Example usage:
| |
Signals
| Signal | Emitted By | Purpose |
|---|---|---|
preview_changed(preview: Node) | BuildingState | Preview instance changed; UI reacts (tooltips, ghost model). |
success(build_action_data: BuildActionData) | BuildingState | Placement committed; downstream indexing & save registration. BuildActionData contains build_type to differentiate SINGLE/DRAG/AREA builds. |
failed(build_action_data: BuildActionData) | BuildingState | Build failed; feedback to player (HUD/log), indicator flash. BuildActionData contains build_type for conditional handling. |
placed_parent_changed(placed_parent: Node) | BuildingState | Parent for placed objects changed. |
system_changed(system: BuildingSystem) | BuildingState | Connected building system changed. |
{/* Testing Strategy moved to internal/testing_strategy.md */}
Cross‑References
- Placement Chain: Placement processing chain documentation
- Manipulation System: Object manipulation system overview
- Placement Rules Pipeline: Placement rules system documentation
- Collision Mapping: Collision mapping system overview
- Context & State: Context and state management
- Configuration & Settings: System configuration options
Last updated: 2025-09-07 (converted to Steps list; refactor: PlacementManager → IndicatorManager; clarified Selection UI boundaries)
Community & Purchase Hub: Linktree – All Grid Builder Links