using Godot; using Mr.BrickAdventures; using Mr.BrickAdventures.Autoloads; using Mr.BrickAdventures.scripts.components; namespace Mr.BrickAdventures.scripts.UI; public partial class Hud : Control { [Export] public HealthComponent Health { get; set; } [Export] public Label CoinsLabel { get; set; } [Export] public ProgressBar HealthBar { get; set; } [Export] public Label LivesLabel { get; set; } private GameStateStore Store => GameStateStore.Instance; public override void _Ready() { if (EventBus.Instance != null) EventBus.Instance.CoinsChanged += OnCoinsChanged; SetCoinsLabel(ProgressionRoot.Instance?.TotalCoins.Value ?? 0); } public override void _ExitTree() { if (EventBus.Instance != null) EventBus.Instance.CoinsChanged -= OnCoinsChanged; } // Lives still polls the old store; it moves with the death path in the next commit. public override void _Process(double delta) { SetHealthBar(); SetLivesLabel(); } private void OnCoinsChanged(int totalCoins) => SetCoinsLabel(totalCoins); private void SetCoinsLabel(int totalCoins) { CoinsLabel.Text = Tr("COINS_LABEL") + ": " + totalCoins; } private void SetLivesLabel() { LivesLabel.Text = Tr("LIVES_LABEL") + ": " + (Store?.Player.Lives ?? 0); } private void SetHealthBar() { HealthBar.Value = Health.Health; HealthBar.MaxValue = Health.MaxHealth; } }