class_name PathManager extends Node signal path_grid_changed @export var map: TileMapLayer @export var collision_maps: Array[TileMapLayer] var path_grid: AStarGrid2D var last_solid_set_points: Array[Vector2] func _ready() -> void: path_grid = AStarGrid2D.new() path_grid.region = map.get_used_rect() path_grid.cell_size = map.tile_set.tile_size path_grid.offset = map.tile_set.tile_size / 2 path_grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_AT_LEAST_ONE_WALKABLE path_grid.update() for m in collision_maps: for cell in m.get_used_cells(): var tile_data = m.get_cell_tile_data(cell) if tile_data.get_collision_polygons_count(0) > 0: path_grid.set_point_solid(cell, true) func fill_tower_region(tower: Tower, solid = true): var region = tower.get_region().size.snapped(path_grid.cell_size) var tower_position = map.local_to_map(tower.global_position) last_solid_set_points = [] if solid: for x in (region / path_grid.cell_size).x + 1: for y in (region / path_grid.cell_size).y + 1: last_solid_set_points.append( map.map_to_local(tower_position + Vector2i(x, y)) ) path_grid.fill_solid_region( Rect2i( map.local_to_map(tower.global_position), (region / path_grid.cell_size) ), solid ) path_grid_changed.emit()