diff --git a/Scenes/SpaceShooter.tscn b/Scenes/SpaceShooter.tscn index 3d0b25a..ae61b1a 100644 --- a/Scenes/SpaceShooter.tscn +++ b/Scenes/SpaceShooter.tscn @@ -143,19 +143,21 @@ asteroidsContainer = NodePath("../Asteroids") process_mode = 3 script = ExtResource("15_uovst") -[node name="Ui" type="Node2D" parent="." node_paths=PackedStringArray("rtlAsteroids", "labelLevel", "labelLifes", "labelNextLevel", "labelPoints", "labelGameOver", "restartButton", "reachedPointsLabel", "healthBar", "vBoxPause")] +[node name="Ui" type="Node2D" parent="." node_paths=PackedStringArray("rtlAsteroids", "rtlLevel", "rtlLifes", "rtlNextLevel", "rtlPoints", "labelGameOver", "buttonRestart", "rtlReachedPoints", "healthBar", "vBoxPause", "buttonResume", "buttonPauseRestart")] process_mode = 3 script = ExtResource("15_xl7yx") rtlAsteroids = NodePath("VBoxLabels/rtlAsteroids") -labelLevel = NodePath("VBoxLabels/LabelLevel") -labelLifes = NodePath("VBoxLabels/LabelLives") -labelNextLevel = NodePath("VBoxLabels/LabelNextLevel") -labelPoints = NodePath("VBoxLabels/LabelPoints") +rtlLevel = NodePath("VBoxLabels/trlLevel") +rtlLifes = NodePath("VBoxLabels/rtlLifes") +rtlNextLevel = NodePath("VBoxLabels/rtlNextLevel") +rtlPoints = NodePath("VBoxLabels/rtlPoints") labelGameOver = NodePath("VBoxGameOver/LabelGameOver") -restartButton = NodePath("VBoxGameOver/RestartButton") -reachedPointsLabel = NodePath("VBoxGameOver/ReachedPointsLabel") +buttonRestart = NodePath("VBoxGameOver/RestartButton") +rtlReachedPoints = NodePath("VBoxGameOver/rtlReachedPoints") healthBar = NodePath("VBoxHealth/HealthBar") vBoxPause = NodePath("VBoxPause") +buttonResume = NodePath("VBoxPause/ButtonResume") +buttonPauseRestart = NodePath("VBoxPause/PauseRestartButton") [node name="VBoxLabels" type="VBoxContainer" parent="Ui"] anchors_preset = 2 @@ -173,28 +175,28 @@ text = "Asteroids: 0" scroll_active = false shortcut_keys_enabled = false -[node name="LabelLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] +[node name="trlLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] layout_mode = 2 size_flags_vertical = 3 text = "Level: 1" scroll_active = false shortcut_keys_enabled = false -[node name="LabelLives" type="RichTextLabel" parent="Ui/VBoxLabels"] +[node name="rtlLifes" type="RichTextLabel" parent="Ui/VBoxLabels"] layout_mode = 2 size_flags_vertical = 3 text = "Lives: 3" scroll_active = false shortcut_keys_enabled = false -[node name="LabelNextLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] +[node name="rtlNextLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] layout_mode = 2 size_flags_vertical = 3 text = "Next Level: 10" scroll_active = false shortcut_keys_enabled = false -[node name="LabelPoints" type="RichTextLabel" parent="Ui/VBoxLabels"] +[node name="rtlPoints" type="RichTextLabel" parent="Ui/VBoxLabels"] layout_mode = 2 size_flags_vertical = 3 text = "Points: 0" @@ -222,7 +224,7 @@ label_settings = SubResource("LabelSettings_dqsad") horizontal_alignment = 1 vertical_alignment = 1 -[node name="ReachedPointsLabel" type="RichTextLabel" parent="Ui/VBoxGameOver"] +[node name="rtlReachedPoints" type="RichTextLabel" parent="Ui/VBoxGameOver"] layout_mode = 2 size_flags_vertical = 3 bbcode_enabled = true @@ -232,6 +234,7 @@ text = "[center]You have reached level 1 and 0 points![/center]" layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 6 +button_mask = 5 shortcut = SubResource("Shortcut_soxs4") text = "Restart" @@ -240,8 +243,6 @@ offset_left = 195.5 offset_top = 647.0 offset_right = 603.5 offset_bottom = 788.0 -grow_horizontal = 2 -grow_vertical = 2 [node name="LabelPause" type="Label" parent="Ui/VBoxPause"] layout_mode = 2 @@ -254,14 +255,23 @@ vertical_alignment = 1 layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 6 +button_mask = 5 text = "Resume " +[node name="PauseRestartButton" type="Button" parent="Ui/VBoxPause"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 6 +button_mask = 5 +shortcut = SubResource("Shortcut_soxs4") +text = "Restart" + [node name="VBoxHealth" type="VBoxContainer" parent="Ui"] -offset_top = 1274.0 -offset_right = 152.0 -offset_bottom = 1278.0 -grow_horizontal = 2 +offset_left = 330.0 +offset_top = 14.0 +offset_right = 482.0 +offset_bottom = 18.0 [node name="HealthBar" type="ProgressBar" parent="Ui/VBoxHealth"] layout_mode = 2 diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 165cc3d..c5711df 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -77,6 +77,7 @@ public partial class GameManager : Node { get => gamePaused; set { gamePaused = value; + GetTree().Paused = gamePaused; RefreshUi?.Invoke(this, EventArgs.Empty); } } diff --git a/Scripts/InputManager.cs b/Scripts/InputManager.cs index 259755a..dc5cd24 100644 --- a/Scripts/InputManager.cs +++ b/Scripts/InputManager.cs @@ -6,21 +6,7 @@ public partial class InputManager : Node { private const string GAME_PAUSE = "Game_Pause"; - public override void _Process(double delta) { - if (Input.IsActionJustReleased(GAME_PAUSE)) { - switch (GameManager.Instance.GamePaused) { - case true: - GameManager.Instance.GamePaused = false; - GD.Print(GameManager.Instance.GamePaused); - GetTree().Paused = GameManager.Instance.GamePaused; - break; - case false: - GameManager.Instance.GamePaused = true; - GD.Print(GameManager.Instance.GamePaused); - GetTree().Paused = GameManager.Instance.GamePaused; - break; - } - } + public override void _UnhandledInput(InputEvent @event) { + if (Input.IsActionJustReleased(GAME_PAUSE)) GameManager.Instance.GamePaused = GameManager.Instance.GamePaused switch { true => false, false => true }; } - } \ No newline at end of file diff --git a/Scripts/Ui.cs b/Scripts/Ui.cs index 2385950..483bd8d 100644 --- a/Scripts/Ui.cs +++ b/Scripts/Ui.cs @@ -5,15 +5,17 @@ namespace GodotspaceShooter.Scripts; public partial class Ui : Node2D { [Export] private RichTextLabel rtlAsteroids; - [Export] private RichTextLabel labelLevel; - [Export] private RichTextLabel labelLifes; - [Export] private RichTextLabel labelNextLevel; - [Export] private RichTextLabel labelPoints; + [Export] private RichTextLabel rtlLevel; + [Export] private RichTextLabel rtlLifes; + [Export] private RichTextLabel rtlNextLevel; + [Export] private RichTextLabel rtlPoints; [Export] private Label labelGameOver; - [Export] private Button restartButton; - [Export] private RichTextLabel reachedPointsLabel; + [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; } @@ -23,34 +25,42 @@ public partial class Ui : Node2D GD.PrintErr("No GameManager found!"); else { GameManager.Instance.RefreshUi += RefreshUi; - restartButton.Pressed += RestartButtonOnPressed; labelGameOver.Visible = GameManager.Instance.GameOver; - restartButton.Visible = GameManager.Instance.GameOver; - reachedPointsLabel.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) { - labelLifes.Text = $"Lives: {GameManager.Instance.Lives}"; + rtlLifes.Text = $"Lives: {GameManager.Instance.Lives}"; rtlAsteroids.Text = $"Asteroids: {GameManager.Instance.AsteroidNumber} / {GameManager.Instance.AsteroidMaxNumber}"; - labelPoints.Text = $"Points: {GameManager.Instance.Points}"; - labelNextLevel.Text = $"Next Level at: {GameManager.Instance.NextLevelPoints}"; - labelLevel.Text = $"Actual Level: {GameManager.Instance.Level}"; + 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) { - reachedPointsLabel.Text = $"[center]You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points![/center]"; + rtlReachedPoints.Text = $"[center]You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points![/center]"; labelGameOver.Visible = GameManager.Instance.GameOver; - restartButton.Visible = GameManager.Instance.GameOver; - reachedPointsLabel.Visible = GameManager.Instance.GameOver; + buttonRestart.Visible = GameManager.Instance.GameOver; + rtlReachedPoints.Visible = GameManager.Instance.GameOver; } vBoxPause.Visible = GameManager.Instance.GamePaused; } - private void RestartButtonOnPressed() => GetTree().ReloadCurrentScene(); + 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); }