using System; using Godot; namespace GodotspaceShooter.Scripts; public partial class Ui : Node2D { [Export] private RichTextLabel rtlAsteroids; [Export] private RichTextLabel rtlLevel; [Export] private RichTextLabel rtlLifes; [Export] private RichTextLabel rtlNextLevel; [Export] private RichTextLabel rtlPoints; [Export] private VBoxContainer vBoxGameOver; [Export] private Label lblGameOver; [Export] private Button buttonRestart; [Export] private Label lblReachedPoints; [Export] private ProgressBar healthBar; [Export] private VBoxContainer vBoxPause; [Export] private Button buttonResume; [Export] private Button buttonPauseRestart; public static Ui Instance { get; private set; } public override void _Ready() { Instance = this; if (GameManager.Instance is null) GD.PrintErr("No GameManager found!"); else { GameManager.Instance.RefreshUi += RefreshUi; lblGameOver.Visible = GameManager.Instance.GameOver; buttonRestart.Visible = GameManager.Instance.GameOver; lblReachedPoints.Visible = GameManager.Instance.GameOver; buttonRestart.Pressed += ButtonRestartOnPressed; buttonResume.Pressed += ButtonResumeOnPressed; buttonPauseRestart.Pressed += ButtonPauseRestartOnPressed; RefreshUi(this, EventArgs.Empty); } } private void RefreshUi(object sender, EventArgs e) { rtlLifes.Text = $"Lives: {GameManager.Instance.Lives}"; rtlAsteroids.Text = $"Asteroids: {GameManager.Instance.AsteroidNumber} / {GameManager.Instance.AsteroidMaxNumber}"; rtlPoints.Text = $"Points: {GameManager.Instance.Points}"; rtlNextLevel.Text = $"Next Level at: {GameManager.Instance.NextLevelPoints}"; rtlLevel.Text = $"Actual Level: {GameManager.Instance.Level}"; healthBar.MaxValue = GameManager.Instance.MaxLives; healthBar.Value = GameManager.Instance.Lives; if (GameManager.Instance.GameOver) { lblReachedPoints.Text = $"You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points!"; vBoxGameOver.Visible = true; } // vBoxGameOver.Visible = GameManager.Instance.GameOver; vBoxPause.Visible = GameManager.Instance.GamePaused; } private void ButtonRestartOnPressed() => GetTree().ReloadCurrentScene(); private void ButtonResumeOnPressed() => GameManager.Instance.GamePaused = false; private void ButtonPauseRestartOnPressed() { GameManager.Instance.GamePaused = false; GetTree().ReloadCurrentScene(); } public void ShowMessage(string message) => GD.Print(message); }