Class TerrainPreview
- Namespace
- GridPlacement.GDScript
- Assembly
- MoonBark.GridPlacement.GDScript.dll
Ghost preview for terrain painting: shows the selected terrain's tile at the hovered cell while the placement system is in TERRAIN mode.\n\nImplemented as a one-cell TileMapLayer that mirrors the target map's TileSet and global transform, so square and isometric layouts render identically to the real paint result. The ghost look comes from [member preview_self_modulate] (default: subtle ghost blue).\n\nAdd one inside the PlacementInjectorSystem's injection scope (e.g. under World). It tracks the positioner each frame while visible and repaints only when the hovered cell or selected terrain changes.
class TerrainPreview extends PlacementNode2D
TerrainPreview
Properties
preview_self_modulate
Ghost tint applied to the preview layer (self_modulate so child nodes, if any are ever added, keep their own colors).
@export var preview_self_modulate: Color = Color(0.6, 0.8, 1.0, 0.6)
active
var active = p_mode == PlacementSystem.BuildMode.TERRAIN
target_map
var target_map: TileMapLayer = _targeting_state.target_map if _targeting_state != null else null
positioner
var positioner: Node2D = _targeting_state.positioner if _targeting_state != null else null
terrain_name
var terrain_name: StringName = _building_system.selected_terrain_name if _building_system != null else StringName()
preview_cells
var preview_cells: Array[Vector2i] = []
cell_count
var cell_count: int = preview_cells.size()
last_cell
var last_cell: Vector2i = preview_cells[-1] if not preview_cells.is_empty() else Vector2i.MAX
brush_shape
var brush_shape: int = _building_system.get_current_brush_shape() if _building_system else -1
drag_start
var drag_start: Vector2i = _building_system.get_brush_drag_start() if _building_system else Vector2i.ZERO
drag_active
var drag_active: bool = _building_system.is_brush_drag_active() if _building_system else false
pending_active
var pending_active: bool = _building_system.is_pending_active() if _building_system else false
valid_cells
var valid_cells: Array[Vector2i] = []
invalid_cells
var invalid_cells: Array[Vector2i] = []
entry
var entry: TilePlacementEntry = _building_system.selected_terrain_entry if _building_system else null
palette
var palette: TerrainPalette = _building_system.selected_terrain_palette if _building_system else null
issue_map
var issue_map: Dictionary = {}
target_modulate
var target_modulate = preview_self_modulate
invalid_modulate
var invalid_modulate = Color(1.0, 0.3, 0.3, 0.7)
valid_cells
var valid_cells: Array[Vector2i] = []
invalid_cells
var invalid_cells: Array[Vector2i] = []
entry
var entry: TilePlacementEntry = _building_system.selected_terrain_entry if _building_system else null
palette
var palette: TerrainPalette = _building_system.selected_terrain_palette if _building_system else null
issues
var issues: Array[String] = []
resolved
var resolved = TerrainTilePainter.resolve_terrain_by_name(p_target_map.tile_set, p_terrain_name)
preview_tileset
var preview_tileset = p_target_map.tile_set.duplicate() as TileSet
Methods
resolve_placement_dependencies
func resolve_placement_dependencies(p_container: PlacementContainer) -> void:
Parameters
p_container