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

52 lines
1.7 KiB
GDScript

## HUD.gd
## In-game heads-up display: minerals, gas, wave counter, Security System HP.
extends CanvasLayer
@onready var minerals_label: Label = $MineralsLabel
@onready var gas_label: Label = $GasLabel
@onready var wave_label: Label = $WaveLabel
@onready var ss_bar: ProgressBar = $SSBar
@onready var phase_label: Label = $PhaseLabel
@onready var next_wave_btn: Button = $NextWaveButton
const PLAYER_ID = 0 # local player
func _ready() -> void:
EventBus.minerals_changed.connect(_on_minerals_changed)
EventBus.gas_changed.connect(_on_gas_changed)
EventBus.wave_started.connect(_on_wave_started)
EventBus.security_system_damaged.connect(_on_ss_damaged)
EventBus.phase_changed.connect(_on_phase_changed)
next_wave_btn.pressed.connect(_on_next_wave_pressed)
func _on_minerals_changed(player_id: int, amount: int) -> void:
if player_id == PLAYER_ID:
minerals_label.text = "Minerals: %d" % amount
func _on_gas_changed(player_id: int, amount: int) -> void:
if player_id == PLAYER_ID:
gas_label.text = "Gas: %d" % amount
func _on_wave_started(wave_number: int) -> void:
wave_label.text = "Wave %d / 31" % wave_number
next_wave_btn.disabled = true
func _on_ss_damaged(_damage: int, hp_remaining: int) -> void:
ss_bar.value = hp_remaining
func _on_phase_changed(new_phase: GameState.Phase) -> void:
match new_phase:
GameState.Phase.BUILD:
phase_label.text = "BUILD PHASE"
next_wave_btn.disabled = false
GameState.Phase.COMBAT:
phase_label.text = "COMBAT"
next_wave_btn.disabled = true
GameState.Phase.INCOME:
phase_label.text = "INCOME"
GameState.Phase.GAME_OVER:
phase_label.text = "GAME OVER"
next_wave_btn.disabled = true
func _on_next_wave_pressed() -> void:
EventBus.emit_signal("next_wave_requested")