class_name Unit extends Node2D enum UnitState { ALIVE, DEAD } #region Templates @export var stat_template: UnitStats @export var info_template: UnitInfo @export var allegiance_template: UnitAllegiance #endregion var current_stats: UnitStats var current_info: UnitInfo var current_allegiance: UnitAllegiance var state: UnitState = UnitState.ALIVE signal unit_selected_changed(unit: Unit, selected: bool) signal unit_allegiance_changed(unit: Unit, allegiance: UnitAllegiance) signal unit_died(unit: Unit) func _ready() -> void: current_stats = stat_template.duplicate(true) current_info = info_template.duplicate(true) current_allegiance = allegiance_template.duplicate(true) unit_allegiance_changed.emit(self, current_allegiance) func set_selected(selected: bool) -> void: unit_selected_changed.emit(self, selected) func is_alive() -> bool: return state == UnitState.ALIVE func take_damage(amount: int) -> void: if state != UnitState.ALIVE: return current_stats.current_hp -= amount if current_stats.current_hp <= 0: current_stats.current_hp = 0 _die() func _die() -> void: state = UnitState.DEAD unit_died.emit(self) queue_free()