Scene-free terrain placement service. Makes the terrain paint path directly unit-testable. Handles terrain-name → TileSet-ID resolution, plan building/gating, plan application, and signal emission (pre_terrain_paint, success/failed). Usage: var service := TerrainPlacementService2D.new() service.configure(building_state, building_settings) var report := service.try_place_terrain_by_name(&"dungeon_floor", cell, map, owner)
Source: addons/grid_placement/systems/building/terrain/terrain_placement_service_2d.gd
Syntax
class TerrainPlacementService2D extends TerrainServiceContract