Scene-free brush lifecycle coordinator. Owns [BrushState] and coordinates the start/complete/anchor/commit/cancel/paint sequence for terrain brushes, mirroring TerrainPlacementService2D and PlacementInputHandler (instance + configure) so behavior is swappable per-game by subclass. Signal emission is intentionally NOT done here: every paint returns a [PlacementReport] and the host's delegator emits success/failed, keeping the coordinator pure (no side effects beyond state mutation in [BrushState]). Usage: var coord := BrushCoordinator.new() coord.configure(states, terrain_service) coord.set_brush_shape(PlacementEnums.ObjectTool.LINE) coord.start_terrain_brush_drag() var report := coord.complete_terrain_brush()
Source: addons/grid_placement/systems/building/components/brush_coordinator.gd
Syntax
class BrushCoordinator extends BrushServiceContract