Room system added
This commit is contained in:
@@ -2,6 +2,7 @@ class_name CombatMap
|
||||
extends Node2D
|
||||
|
||||
@export var tile_set: DLTileset
|
||||
@export var map_layout: MapLayout
|
||||
@onready var tile_map: TileMapLayer = %TerrainLayer
|
||||
@onready var highlight_map: GridOverlay = %OverlayLayer
|
||||
|
||||
@@ -18,6 +19,8 @@ func _ready() -> void:
|
||||
for entry in _pending_units:
|
||||
_apply_deploy(entry.unit, entry.coords)
|
||||
_pending_units.clear()
|
||||
if map_layout:
|
||||
apply_layout(map_layout)
|
||||
|
||||
|
||||
func snap_to_grid(pos: Vector2) -> Vector2:
|
||||
@@ -79,3 +82,52 @@ func remove_unit(unit: Unit) -> void:
|
||||
|
||||
func target_tile(coords: Vector2i) -> void:
|
||||
highlight_map.target_tile(coords)
|
||||
|
||||
|
||||
func apply_layout(layout: MapLayout) -> void:
|
||||
map_layout = layout
|
||||
map_layout.initialize()
|
||||
load_from_layout()
|
||||
draw_room_walls()
|
||||
|
||||
|
||||
func is_tile_passable(from: Vector2i, to: Vector2i) -> bool:
|
||||
if map_layout:
|
||||
return map_layout.is_passable(from, to)
|
||||
# Fallback: no room system, use legacy wall check
|
||||
return not is_wall(to)
|
||||
|
||||
|
||||
func is_tile_valid(coords: Vector2i) -> bool:
|
||||
if map_layout:
|
||||
return map_layout.is_tile_valid(coords)
|
||||
# Fallback: no room system, any non-wall tile is valid
|
||||
return not is_wall(coords)
|
||||
|
||||
|
||||
func draw_room_walls() -> void:
|
||||
if not map_layout:
|
||||
return
|
||||
var walls := map_layout.get_walls()
|
||||
for wall in walls:
|
||||
var from_world := coords_to_world(wall[0]) + Vector2(TILE_SIZE / 2, TILE_SIZE / 2)
|
||||
var to_world := coords_to_world(wall[1]) + Vector2(TILE_SIZE / 2, TILE_SIZE / 2)
|
||||
var midpoint := (from_world + to_world) / 2
|
||||
var diff := to_world - from_world
|
||||
var wall_dir := Vector2(-diff.y, diff.x).normalized()
|
||||
var half_len := TILE_SIZE / 2
|
||||
|
||||
var line := Line2D.new()
|
||||
line.add_point(midpoint - wall_dir * half_len)
|
||||
line.add_point(midpoint + wall_dir * half_len)
|
||||
line.width = 4.0
|
||||
line.default_color = Color(0.6, 0.5, 0.4)
|
||||
add_child(line)
|
||||
|
||||
|
||||
func load_from_layout() -> void:
|
||||
if not map_layout:
|
||||
return
|
||||
for room in map_layout.rooms:
|
||||
for tile in room.tiles:
|
||||
draw_floor(tile)
|
||||
|
||||
Reference in New Issue
Block a user