40 lines
1.1 KiB
GDScript
40 lines
1.1 KiB
GDScript
class_name CombatMap
|
|
extends Node2D
|
|
|
|
signal tile_hovered(coords: Vector2i)
|
|
|
|
@export var tile_set: DLTileset
|
|
@onready var tile_map: TileMapLayer = %TerrainLayer
|
|
@onready var highlight_map: GridOverlay = %OverlayLayer
|
|
|
|
const TILE_SIZE := 48.0
|
|
const SOURCE_ID: int = 0
|
|
|
|
|
|
func snap_to_grid(pos: Vector2) -> Vector2:
|
|
return Vector2(floorf(pos.x / TILE_SIZE), floorf(pos.y / TILE_SIZE)) * TILE_SIZE
|
|
|
|
|
|
func world_to_coords(pos: Vector2) -> Vector2i:
|
|
return Vector2i(snap_to_grid(pos) / TILE_SIZE)
|
|
|
|
|
|
func coords_to_world(coords: Vector2i) -> Vector2:
|
|
return Vector2(coords) * TILE_SIZE
|
|
|
|
func draw_wall(coords: Vector2i) -> void:
|
|
draw_custom(coords, tile_set.wall_tile_coords)
|
|
|
|
func draw_floor(coords: Vector2i) -> void:
|
|
draw_custom(coords, tile_set.floor_tile_coords)
|
|
|
|
func draw_custom(coords: Vector2i, tile_coords: Vector2i) -> void:
|
|
tile_map.set_cell(coords, SOURCE_ID, tile_coords)
|
|
|
|
func is_wall(coords: Vector2i) -> bool:
|
|
return tile_map.get_cell_atlas_coords(coords) == tile_set.wall_tile_coords
|
|
|
|
func target_tile(coords: Vector2i) -> void:
|
|
highlight_map.target_tile(coords)
|
|
tile_hovered.emit(coords)
|