diff options
Diffstat (limited to 'Game.gd')
-rw-r--r-- | Game.gd | 76 |
1 files changed, 76 insertions, 0 deletions
@@ -0,0 +1,76 @@ +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 |