extends Control var grid: AStarGrid2D: set(v): grid = v; queue_redraw() var unit_grid: AStarGrid2D: set(v): unit_grid = v; queue_redraw() @export var show_grid_display: bool: set(v): show_grid_display = v; queue_redraw() @export var show_move_range: bool: set(v): show_move_range = v; queue_redraw() func toggle_grid_display(on: bool): grid = MapGlobal.GetGrid() show_grid_display = on func toggle_move_range(on: bool): unit_grid = get_parent().get_parent().get_node("Player").GetMoveGrid() show_move_range = on func getNewGrid(): grid = MapGlobal.GetGrid() func drawMoveRange(): var walkableCells: Array[Vector2] = [] var activeUnit = get_parent().get_parent().get_node("Player") var unitCellPosition = activeUnit.pos_to_cell(activeUnit.global_position) var unitRange = activeUnit.unitData["MoveRange"] # max right, down, left, up for x in range(unitCellPosition.x, unitCellPosition.x + unitRange): # right +x walkableCells.append(Vector2(x, unitCellPosition.y)) for y in range(unitCellPosition.y, unitCellPosition.y + unitRange): # down +y walkableCells.append(Vector2(unitCellPosition.x, y)) for x in range(unitCellPosition.x, unitCellPosition.x - unitRange, -1): # left -x walkableCells.append(Vector2(x, unitCellPosition.y)) for y in range(unitCellPosition.x, unitCellPosition.y - unitRange, -1): # up -y walkableCells.append(Vector2(unitCellPosition.x, y)) # diagonals? for x in unit_grid.region.size.x: for y in unit_grid.region.size.y: var p = Vector2(x + unit_grid.region.position.x, y + unit_grid.region.position.y) var col = Color(1,0,0,0.3) if unit_grid.is_point_solid(p) else Color(0,1,0,0.3) draw_rect(Rect2(p*unit_grid.cell_size, unit_grid.cell_size), col) for cell in walkableCells: draw_rect(Rect2(cell*grid.cell_size, grid.cell_size), Color(0, 0, 1, 0.5)) func _draw(): if unit_grid and show_move_range: drawMoveRange() if grid and show_grid_display: drawNavigationGrid() func drawNavigationGrid(): for x in grid.region.size.x: for y in grid.region.size.y: var p := Vector2(x + grid.region.position.x, y + grid.region.position.y) var col := Color(1,0,0,0.3) if grid.is_point_solid(p) else Color(0,1,0,0.3) draw_rect(Rect2(p*grid.cell_size, grid.cell_size), col) func _on_player_move_finished() -> void: getNewGrid() # Replace with function body.