Godot-SpaceShooter/Scripts/Ui.cs

67 lines
2.5 KiB
C#

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 Label labelGameOver;
[Export] private Button buttonRestart;
[Export] private RichTextLabel rtlReachedPoints;
[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;
labelGameOver.Visible = GameManager.Instance.GameOver;
buttonRestart.Visible = GameManager.Instance.GameOver;
rtlReachedPoints.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) {
rtlReachedPoints.Text = $"[center]You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points![/center]";
labelGameOver.Visible = GameManager.Instance.GameOver;
buttonRestart.Visible = GameManager.Instance.GameOver;
rtlReachedPoints.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);
}