49 lines
1.2 KiB
GDScript
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
|