diff options
Diffstat (limited to 'scripts/tower_manager.gd')
-rw-r--r-- | scripts/tower_manager.gd | 68 |
1 files changed, 58 insertions, 10 deletions
diff --git a/scripts/tower_manager.gd b/scripts/tower_manager.gd index 250b66b..9682dd9 100644 --- a/scripts/tower_manager.gd +++ b/scripts/tower_manager.gd @@ -1,30 +1,78 @@ extends Node +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": { + "scene": preload("res://scenes/warlock.tscn"), + "cost": game_stats_config.defenders["warlock"]["cost"], + }, + "tower_action_two": { + "scene": preload("res://scenes/wyvern.tscn"), + "cost": game_stats_config.defenders["wyvern"]["cost"], + }, + # TODO -- space reserved for last two towers + "tower_action_three": { + "scene": preload("res://scenes/warlock.tscn"), + "cost": game_stats_config.defenders["warlock"]["cost"], + }, + "tower_action_four": { + "scene": preload("res://scenes/warlock.tscn"), + "cost": game_stats_config.defenders["warlock"]["cost"], + }, +} + func _ready(): _towers = {} -func place_tower(tower : Dictionary, tile_position : Vector2i): +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_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"] + + if GameData.get_life() >= upgrade_cost: + GameData.subtract_life(upgrade_cost) + tower.apply_upgrade(upgrade_data["effects"]) + +func _handle_place_tower(tower : Dictionary, tile_position : Vector2i): var tower_cost = tower["cost"] - if is_valid_placement_tile(tile_position) && GameData.get_life() >= tower_cost: + if GameData.get_life() >= tower_cost: + GameData.subtract_life(tower_cost) var tmp = tower["scene"].instantiate() - var path = get_tree().get_root().get_node("Main/Defenders") - path.add_child(tmp) + add_child(tmp) tmp.global_position = tile_position - occupy_tile(tile_position) - GameData.subtract_life(tower_cost) + _occupy_tile(tile_position, tmp) -func is_valid_placement_tile(tile_position : Vector2i): +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 is_tile_occupied(tile_position : Vector2i): return _towers.has(tile_position) -func occupy_tile(tile_position): - _towers[tile_position] = true +func _occupy_tile(tile_position, tower): + _towers[tile_position] = tower -func free_tile(tile_position): +func _free_tile(tile_position): _towers.erase(tile_position) |