extends Node signal mode_changed signal path_grid_changed enum Mode { DEFAULT, BUILD, } var mode: Mode = Mode.DEFAULT : set(value): mode = value mode_changed.emit() var selected_tower: Tower var selected_unit: Mob var path_grid: AStarGrid2D var map: TileMapLayer func initialize_stage(tilemap: TileMapLayer): map = tilemap path_grid = AStarGrid2D.new() path_grid.region = map.get_used_rect() path_grid.cell_size = map.tile_set.tile_size path_grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_ONLY_IF_NO_OBSTACLES path_grid.update() for tower in get_tree().current_scene.get_node("Towers").get_children(): path_grid.set_point_solid( map.local_to_map( tower.global_position ) ) func place_tower(tower: Tower, position: Vector2): var grid_position = map.local_to_map(position) path_grid.set_point_solid(grid_position, true) tower.global_position = position get_tree().current_scene.get_node("Towers").add_child(tower) path_grid_changed.emit() func remove_tower(tower: Tower): var grid_position = map.local_to_map(tower.global_position) path_grid.set_point_solid(grid_position, false) tower.queue_free() path_grid_changed.emit() func select_tower(tower: Tower): if selected_tower != tower: selected_tower = tower tower.select() func deselect_tower(): if selected_tower: get_tree().current_scene.get_node("%Tower").text = "" func spawn_mob(mob: Mob, spawn: Spawn): mob.global_position = spawn.global_position mob.target = spawn.next_node.global_position mob.hp = randi_range(50, 200) mob.speed = randi_range(50, 150) mob.get_node("Sprite2D").modulate = Color(randf_range(0, 1), randf_range(0, 1), randf_range(0, 1)) return mob