summaryrefslogtreecommitdiff
path: root/Stages/Wintermaul/path_manager.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-07-04 23:00:25 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-07-04 23:00:25 +0200
commitd727e3e520d73afdcea4f1e8265876623c05f52a (patch)
tree2e1be6a07dca7003537e00ba15a21aa3d28b1003 /Stages/Wintermaul/path_manager.gd
parent76d1ec723b6f6f68a512f27607749f3ff885f385 (diff)
refactor wipHEADmain
Diffstat (limited to 'Stages/Wintermaul/path_manager.gd')
-rw-r--r--Stages/Wintermaul/path_manager.gd48
1 files changed, 48 insertions, 0 deletions
diff --git a/Stages/Wintermaul/path_manager.gd b/Stages/Wintermaul/path_manager.gd
new file mode 100644
index 0000000..14d1bfc
--- /dev/null
+++ b/Stages/Wintermaul/path_manager.gd
@@ -0,0 +1,48 @@
+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()