extends Node signal mode_changed signal path_grid_changed var debug = false enum Mode { DEFAULT, BUILD, } var mode: Mode = Mode.DEFAULT : set(value): mode = value mode_changed.emit() var score: int : set(value): score = value get_tree().current_scene.get_node("%Score").text = str(score) var path_grid: AStarGrid2D var map: TileMapLayer func initialize_stage(tilemap: TileMapLayer): map = tilemap var region = map.get_used_rect() #region = region.grow_individual(0, 0, region.size.x, region.size.y) path_grid = AStarGrid2D.new() path_grid.region = region path_grid.cell_size = map.tile_set.tile_size #/ 2 #path_grid.offset = path_grid.cell_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)) #var tower_region = tower.get_region().size.snapped(path_grid.cell_size) #path_grid.fill_solid_region(Rect2i( #map.local_to_map(tower.global_position) + Vector2i(-1,-1), #tower_region / path_grid.cell_size #)) func place_tower(tower: Tower, position: Vector2): var grid_position = map.local_to_map(position) path_grid.set_point_solid(grid_position, true) #var tower_region = tower.get_region().size.snapped(path_grid.cell_size) #path_grid.fill_solid_region(Rect2i( #map.local_to_map(position), #tower_region / path_grid.cell_size #), true) tower.global_position = position get_tree().current_scene.get_node("Towers").add_child(tower) Game.score += 1 path_grid_changed.emit() func remove_tower(tower: Tower): destroy_tower(tower) Game.score -= 1 func destroy_tower(tower: Tower): var grid_position = map.local_to_map(tower.global_position) path_grid.set_point_solid(grid_position, false) #var tower_region = tower.get_region().size.snapped(path_grid.cell_size) #path_grid.fill_solid_region(Rect2i( #map.local_to_map(tower.global_position), #tower_region / path_grid.cell_size, #), false) tower.queue_free() path_grid_changed.emit() func select_tower(tower: Tower): tower.is_selected = true func deselect_tower(): if Tower.selected_tower: Tower.selected_tower.is_selected = false 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 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