class_name Stage extends Node signal path_grid_changed static var map: TileMapLayer static var path_grid: AStarGrid2D static var last_solid_set_points: Array[Vector2] static var towers: Node static var units: Node static var spawn: Spawn static var hud: HUD func _ready() -> void: Client.initialize_stage(self) map = get_node("%Map") 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() towers = get_node("%Towers") # y-sort? #towers = self units = get_node("%Units") # y-sort? #units = self spawn = get_node("%Spawn") hud = get_node("%HUD") assert(get_node("%StateManager"), "StateManager missing") assert(get_node("%StateManager").get_children().size() > 0, "StateManager has no States") func place_tower(tower: Tower, position: Vector2): var player: Player = Network.players[tower.owner_id] tower.get_node("Sprite2D").modulate = player.get_color() tower.get_node("ComponentsAnchor").modulate = player.get_color() tower.global_position = position fill_tower_region(tower, true) towers.add_child(tower, true) func destroy_tower(tower: Tower): fill_tower_region(tower, false) tower.queue_free() 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() @warning_ignore("shadowed_variable") func spawn_unit(unit: Unit):#, _spawn: Spawn): var player: Player = Network.players[unit.owner_id] unit.get_node("Sprite2D").modulate = player.get_color() units.add_child(unit, true)