xanarch-td/scripts/gameplay/Tower.gd
2026-06-03 21:53:16 -04:00

49 lines
1.2 KiB
GDScript

## 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