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