diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2024-09-08 22:35:06 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2024-09-08 22:35:06 +0200 |
commit | 4597189f157834c80f56b12b701fd2b2a15c2798 (patch) | |
tree | f522e9a58ec756dc27306781da99e828b195c549 /Stages/Stage.gd | |
parent | 7d7d845e76f78a87cf87c9464d700e52cd88ce6f (diff) |
next commit
Diffstat (limited to 'Stages/Stage.gd')
-rw-r--r-- | Stages/Stage.gd | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/Stages/Stage.gd b/Stages/Stage.gd new file mode 100644 index 0000000..fec5b76 --- /dev/null +++ b/Stages/Stage.gd @@ -0,0 +1,83 @@ +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): + if tower.owner_id != 1: + var id = str(tower.owner_id) + tower.get_node("Sprite2D").modulate = Color( + int(id.substr(0, 3)) / 255, + int(id.substr(3, 3)) / 255, + int(id.substr(6, 3)) / 255 + ) + + tower.global_position = position + fill_tower_region(tower, true) + towers.add_child(tower) + path_grid_changed.emit() + + +func destroy_tower(tower: Tower): + fill_tower_region(tower, false) + tower.queue_free() + path_grid_changed.emit() + + +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 + ) + + +@warning_ignore("shadowed_variable") +func spawn_unit(unit: Unit, _spawn: Spawn): + units.add_child(unit) |