## Tower.gd ## Represents a placed tower during the build phase. ## During combat phase, spawns/morphs into a Fighter. class_name Tower extends Node2D @export var tower_id: String = "" @export var player_id: int = 0 var _data: Dictionary = {} var _fighter: Node = null func _ready() -> void: EventBus.phase_changed.connect(_on_phase_changed) func setup(tower_data: Dictionary, pid: int) -> void: _data = tower_data tower_id = tower_data.get("id", "") player_id = pid func get_data() -> Dictionary: return _data func can_upgrade() -> bool: return _data.has("upgrades_to") and _data["upgrades_to"] != "" func get_upgrade_id() -> String: return _data.get("upgrades_to", "") func _on_phase_changed(new_phase: GameState.Phase) -> void: match new_phase: GameState.Phase.COMBAT: _spawn_fighter() GameState.Phase.BUILD: _recall_fighter() func _spawn_fighter() -> void: var fighter_scene = load("res://scenes/gameplay/Fighter.tscn") as PackedScene if not fighter_scene: return _fighter = fighter_scene.instantiate() _fighter.setup(_data) get_parent().add_child(_fighter) _fighter.global_position = global_position func _recall_fighter() -> void: if _fighter and is_instance_valid(_fighter): _fighter.queue_free() _fighter = null