50 lines
1.3 KiB
GDScript
50 lines
1.3 KiB
GDScript
extends Control
|
|
|
|
var explored_rooms: Array = []
|
|
var current_room_id: String = ""
|
|
var cell_size: Vector2 = Vector2(20, 20)
|
|
var padding: float = 5.0
|
|
|
|
func _ready():
|
|
# Remove any children if they exist (cleanup from previous implementation)
|
|
for child in get_children():
|
|
child.queue_free()
|
|
|
|
func update_map(new_room_id: String, explored: Array):
|
|
current_room_id = new_room_id
|
|
explored_rooms = explored
|
|
queue_redraw()
|
|
|
|
func _draw():
|
|
if current_room_id == "":
|
|
return
|
|
|
|
var center = size / 2
|
|
|
|
# Parse current room coordinates to center the map
|
|
var current_coords = _parse_coords(current_room_id)
|
|
|
|
for room_id in explored_rooms:
|
|
var coords = _parse_coords(room_id)
|
|
var rel_x = coords.x - current_coords.x
|
|
var rel_y = coords.y - current_coords.y
|
|
|
|
# Calculate position relative to center
|
|
# (rel_x, rel_y) * (cell_size + padding) gives the offset
|
|
var offset = Vector2(rel_x, rel_y) * (cell_size + Vector2(padding, padding))
|
|
var rect_pos = center + offset - cell_size / 2
|
|
var rect = Rect2(rect_pos, cell_size)
|
|
|
|
var color = Color.LIGHT_GRAY
|
|
if room_id == current_room_id:
|
|
color = Color.GREEN
|
|
|
|
draw_rect(rect, color, true)
|
|
draw_rect(rect, Color.BLACK, false, 1.0) # Border
|
|
|
|
func _parse_coords(id: String) -> Vector2:
|
|
var parts = id.split("_")
|
|
if parts.size() >= 3:
|
|
return Vector2(int(parts[1]), int(parts[2]))
|
|
return Vector2.ZERO
|