summaryrefslogtreecommitdiff
path: root/scripts/tower_manager.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/tower_manager.gd')
-rw-r--r--scripts/tower_manager.gd67
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)