diff options
Diffstat (limited to 'scripts/tower_manager.gd')
-rw-r--r-- | scripts/tower_manager.gd | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd index 9682dd9..7440a9a 100644 --- a/scripts/tower_manager.gd +++ b/scripts/tower_manager.gd @@ -4,56 +4,42 @@ var game_stats_config = preload("res://resources/game_stats_config.tres") @onready var _tiles : TileMapLayer = get_node("../Map/TileMapLayer") var _towers : Dictionary -var _tower_actions : Array[String] = [ - "tower_action_one", - "tower_action_two", - "tower_action_three", - "tower_action_four" -] - -var _tower_data : Dictionary[String, Dictionary] = { - "tower_action_one": { +var _tower_data : Array[Dictionary] = [ + { "scene": preload("res://scenes/warlock.tscn"), - "cost": game_stats_config.defenders["warlock"]["cost"], + "cost": game_stats_config.defenders[0]["cost"], }, - "tower_action_two": { + { "scene": preload("res://scenes/wyvern.tscn"), - "cost": game_stats_config.defenders["wyvern"]["cost"], + "cost": game_stats_config.defenders[1]["cost"], }, # TODO -- space reserved for last two towers - "tower_action_three": { + { "scene": preload("res://scenes/warlock.tscn"), - "cost": game_stats_config.defenders["warlock"]["cost"], + "cost": game_stats_config.defenders[0]["cost"], }, - "tower_action_four": { + { "scene": preload("res://scenes/warlock.tscn"), - "cost": game_stats_config.defenders["warlock"]["cost"], + "cost": game_stats_config.defenders[0]["cost"], }, -} +] func _ready(): _towers = {} -func handle_tower_key(event, tile_position : Vector2i): - for action in _tower_actions: - if event.is_action_pressed(action): - if is_tile_occupied(tile_position): - _handle_upgrade(action, _towers[tile_position]) - elif _is_valid_placement_tile(tile_position): - _handle_place_tower(_tower_data[action], tile_position) +func handle_tower_key(tower_index : int, tile_position : Vector2i): + if is_tile_occupied(tile_position): + _handle_upgrade(tower_index, _towers[tile_position]) + elif is_valid_placement_tile(tile_position): + _handle_place_tower(_tower_data[tower_index], tile_position) -func _handle_upgrade(action : String, tower : StaticBody2D): - var tower_key : String = tower.get_tower_key() - var upgrades = game_stats_config.defenders[tower_key]["upgrades"] - - print("foo: ", GameData.get_life(), " ", action, " ", tower_key, " ", upgrades) - if upgrades.has(action): - var upgrade_data = upgrades[action] - var upgrade_cost = upgrade_data["cost"] +func _handle_upgrade(upgrade_index : int, tower : StaticBody2D): + var upgrades = tower.tower_data["upgrades"] + var upgrade_cost = upgrades[upgrade_index]["cost"] - if GameData.get_life() >= upgrade_cost: - GameData.subtract_life(upgrade_cost) - tower.apply_upgrade(upgrade_data["effects"]) + if GameData.get_life() >= upgrade_cost: + GameData.subtract_life(upgrade_cost) + tower.apply_upgrade(upgrades[upgrade_index]["effects"]) func _handle_place_tower(tower : Dictionary, tile_position : Vector2i): var tower_cost = tower["cost"] @@ -64,9 +50,14 @@ func _handle_place_tower(tower : Dictionary, tile_position : Vector2i): tmp.global_position = tile_position _occupy_tile(tile_position, tmp) -func _is_valid_placement_tile(tile_position : Vector2i): - var tile_coords = _tiles.get_cell_atlas_coords(tile_position) - return (tile_coords == (Vector2i(-1, -1))) && (!is_tile_occupied(tile_position)) +func get_upgrades_at(tile_position : Vector2i) -> Array: + if _towers.has(tile_position): + return _towers[tile_position].tower_data["upgrades"] + return [] + +func is_valid_placement_tile(tile_position : Vector2i): + var tile_coords = _tiles.get_cell_atlas_coords(_tiles.local_to_map(tile_position)) + return (tile_coords == (Vector2i(-1, -1))) func is_tile_occupied(tile_position : Vector2i): return _towers.has(tile_position) |