This guide describes the normal lifecycle for placing a single object.
Step 1: Create or update request
PlacementRequestComponent captures placement intent:
- target position
- rotation
- scale
- request activity and timing metadata
Step 2: Validate request
PlacementValidationSystem processes active requests and writes result into request.validation_result.
Validation combines:
- physics collision checks
- optional rule callbacks (
PlacementRuleComponent) - basic request sanity checks
Step 3: Update preview visuals
PlacementPreviewSystem updates preview state using validation output:
- valid → preview in
VALIDstate - invalid → preview in
INVALIDstate - no result yet →
NEUTRAL
Step 4: Execute successful request
PlacementExecutionSystem converts successful requests to PlacementCommandComponent, executes action, and updates placement relationships.
Step 5: Emit events
PlacementSignalBus events are the primary integration point for gameplay/UI responses.
Failure path
When validation fails repeatedly, placement attempts can lock via PlacementComponent lock fields and failure events are emitted with issue details.