Pause Restart

pull/32/head
Sascha 2024-01-24 15:22:59 +07:00
parent aa8b56a72c
commit a3bfbab270
4 changed files with 59 additions and 52 deletions

@ -143,19 +143,21 @@ asteroidsContainer = NodePath("../Asteroids")
process_mode = 3 process_mode = 3
script = ExtResource("15_uovst") 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 process_mode = 3
script = ExtResource("15_xl7yx") script = ExtResource("15_xl7yx")
rtlAsteroids = NodePath("VBoxLabels/rtlAsteroids") rtlAsteroids = NodePath("VBoxLabels/rtlAsteroids")
labelLevel = NodePath("VBoxLabels/LabelLevel") rtlLevel = NodePath("VBoxLabels/trlLevel")
labelLifes = NodePath("VBoxLabels/LabelLives") rtlLifes = NodePath("VBoxLabels/rtlLifes")
labelNextLevel = NodePath("VBoxLabels/LabelNextLevel") rtlNextLevel = NodePath("VBoxLabels/rtlNextLevel")
labelPoints = NodePath("VBoxLabels/LabelPoints") rtlPoints = NodePath("VBoxLabels/rtlPoints")
labelGameOver = NodePath("VBoxGameOver/LabelGameOver") labelGameOver = NodePath("VBoxGameOver/LabelGameOver")
restartButton = NodePath("VBoxGameOver/RestartButton") buttonRestart = NodePath("VBoxGameOver/RestartButton")
reachedPointsLabel = NodePath("VBoxGameOver/ReachedPointsLabel") rtlReachedPoints = NodePath("VBoxGameOver/rtlReachedPoints")
healthBar = NodePath("VBoxHealth/HealthBar") healthBar = NodePath("VBoxHealth/HealthBar")
vBoxPause = NodePath("VBoxPause") vBoxPause = NodePath("VBoxPause")
buttonResume = NodePath("VBoxPause/ButtonResume")
buttonPauseRestart = NodePath("VBoxPause/PauseRestartButton")
[node name="VBoxLabels" type="VBoxContainer" parent="Ui"] [node name="VBoxLabels" type="VBoxContainer" parent="Ui"]
anchors_preset = 2 anchors_preset = 2
@ -173,28 +175,28 @@ text = "Asteroids: 0"
scroll_active = false scroll_active = false
shortcut_keys_enabled = false shortcut_keys_enabled = false
[node name="LabelLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] [node name="trlLevel" type="RichTextLabel" parent="Ui/VBoxLabels"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
text = "Level: 1" text = "Level: 1"
scroll_active = false scroll_active = false
shortcut_keys_enabled = false shortcut_keys_enabled = false
[node name="LabelLives" type="RichTextLabel" parent="Ui/VBoxLabels"] [node name="rtlLifes" type="RichTextLabel" parent="Ui/VBoxLabels"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
text = "Lives: 3" text = "Lives: 3"
scroll_active = false scroll_active = false
shortcut_keys_enabled = false shortcut_keys_enabled = false
[node name="LabelNextLevel" type="RichTextLabel" parent="Ui/VBoxLabels"] [node name="rtlNextLevel" type="RichTextLabel" parent="Ui/VBoxLabels"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
text = "Next Level: 10" text = "Next Level: 10"
scroll_active = false scroll_active = false
shortcut_keys_enabled = false shortcut_keys_enabled = false
[node name="LabelPoints" type="RichTextLabel" parent="Ui/VBoxLabels"] [node name="rtlPoints" type="RichTextLabel" parent="Ui/VBoxLabels"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
text = "Points: 0" text = "Points: 0"
@ -222,7 +224,7 @@ label_settings = SubResource("LabelSettings_dqsad")
horizontal_alignment = 1 horizontal_alignment = 1
vertical_alignment = 1 vertical_alignment = 1
[node name="ReachedPointsLabel" type="RichTextLabel" parent="Ui/VBoxGameOver"] [node name="rtlReachedPoints" type="RichTextLabel" parent="Ui/VBoxGameOver"]
layout_mode = 2 layout_mode = 2
size_flags_vertical = 3 size_flags_vertical = 3
bbcode_enabled = true bbcode_enabled = true
@ -232,6 +234,7 @@ text = "[center]You have reached level 1 and 0 points![/center]"
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
size_flags_vertical = 6 size_flags_vertical = 6
button_mask = 5
shortcut = SubResource("Shortcut_soxs4") shortcut = SubResource("Shortcut_soxs4")
text = "Restart" text = "Restart"
@ -240,8 +243,6 @@ offset_left = 195.5
offset_top = 647.0 offset_top = 647.0
offset_right = 603.5 offset_right = 603.5
offset_bottom = 788.0 offset_bottom = 788.0
grow_horizontal = 2
grow_vertical = 2
[node name="LabelPause" type="Label" parent="Ui/VBoxPause"] [node name="LabelPause" type="Label" parent="Ui/VBoxPause"]
layout_mode = 2 layout_mode = 2
@ -254,14 +255,23 @@ vertical_alignment = 1
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
size_flags_vertical = 6 size_flags_vertical = 6
button_mask = 5
text = "Resume 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"] [node name="VBoxHealth" type="VBoxContainer" parent="Ui"]
offset_top = 1274.0 offset_left = 330.0
offset_right = 152.0 offset_top = 14.0
offset_bottom = 1278.0 offset_right = 482.0
grow_horizontal = 2 offset_bottom = 18.0
[node name="HealthBar" type="ProgressBar" parent="Ui/VBoxHealth"] [node name="HealthBar" type="ProgressBar" parent="Ui/VBoxHealth"]
layout_mode = 2 layout_mode = 2

@ -77,6 +77,7 @@ public partial class GameManager : Node {
get => gamePaused; get => gamePaused;
set { set {
gamePaused = value; gamePaused = value;
GetTree().Paused = gamePaused;
RefreshUi?.Invoke(this, EventArgs.Empty); RefreshUi?.Invoke(this, EventArgs.Empty);
} }
} }

@ -6,21 +6,7 @@ public partial class InputManager : Node
{ {
private const string GAME_PAUSE = "Game_Pause"; private const string GAME_PAUSE = "Game_Pause";
public override void _Process(double delta) { public override void _UnhandledInput(InputEvent @event) {
if (Input.IsActionJustReleased(GAME_PAUSE)) { if (Input.IsActionJustReleased(GAME_PAUSE)) GameManager.Instance.GamePaused = GameManager.Instance.GamePaused switch { true => false, false => true };
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;
}
}
} }
} }

@ -5,15 +5,17 @@ namespace GodotspaceShooter.Scripts;
public partial class Ui : Node2D public partial class Ui : Node2D
{ {
[Export] private RichTextLabel rtlAsteroids; [Export] private RichTextLabel rtlAsteroids;
[Export] private RichTextLabel labelLevel; [Export] private RichTextLabel rtlLevel;
[Export] private RichTextLabel labelLifes; [Export] private RichTextLabel rtlLifes;
[Export] private RichTextLabel labelNextLevel; [Export] private RichTextLabel rtlNextLevel;
[Export] private RichTextLabel labelPoints; [Export] private RichTextLabel rtlPoints;
[Export] private Label labelGameOver; [Export] private Label labelGameOver;
[Export] private Button restartButton; [Export] private Button buttonRestart;
[Export] private RichTextLabel reachedPointsLabel; [Export] private RichTextLabel rtlReachedPoints;
[Export] private ProgressBar healthBar; [Export] private ProgressBar healthBar;
[Export] private VBoxContainer vBoxPause; [Export] private VBoxContainer vBoxPause;
[Export] private Button buttonResume;
[Export] private Button buttonPauseRestart;
public static Ui Instance { get; private set; } public static Ui Instance { get; private set; }
@ -23,34 +25,42 @@ public partial class Ui : Node2D
GD.PrintErr("No GameManager found!"); GD.PrintErr("No GameManager found!");
else { else {
GameManager.Instance.RefreshUi += RefreshUi; GameManager.Instance.RefreshUi += RefreshUi;
restartButton.Pressed += RestartButtonOnPressed;
labelGameOver.Visible = GameManager.Instance.GameOver; labelGameOver.Visible = GameManager.Instance.GameOver;
restartButton.Visible = GameManager.Instance.GameOver; buttonRestart.Visible = GameManager.Instance.GameOver;
reachedPointsLabel.Visible = GameManager.Instance.GameOver; rtlReachedPoints.Visible = GameManager.Instance.GameOver;
buttonRestart.Pressed += ButtonRestartOnPressed;
buttonResume.Pressed += ButtonResumeOnPressed;
buttonPauseRestart.Pressed += ButtonPauseRestartOnPressed;
RefreshUi(this, EventArgs.Empty); RefreshUi(this, EventArgs.Empty);
} }
} }
private void RefreshUi(object sender, EventArgs e) { 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}"; rtlAsteroids.Text = $"Asteroids: {GameManager.Instance.AsteroidNumber} / {GameManager.Instance.AsteroidMaxNumber}";
labelPoints.Text = $"Points: {GameManager.Instance.Points}"; rtlPoints.Text = $"Points: {GameManager.Instance.Points}";
labelNextLevel.Text = $"Next Level at: {GameManager.Instance.NextLevelPoints}"; rtlNextLevel.Text = $"Next Level at: {GameManager.Instance.NextLevelPoints}";
labelLevel.Text = $"Actual Level: {GameManager.Instance.Level}"; rtlLevel.Text = $"Actual Level: {GameManager.Instance.Level}";
healthBar.MaxValue = GameManager.Instance.MaxLives; healthBar.MaxValue = GameManager.Instance.MaxLives;
healthBar.Value = GameManager.Instance.Lives; healthBar.Value = GameManager.Instance.Lives;
if (GameManager.Instance.GameOver) { 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; labelGameOver.Visible = GameManager.Instance.GameOver;
restartButton.Visible = GameManager.Instance.GameOver; buttonRestart.Visible = GameManager.Instance.GameOver;
reachedPointsLabel.Visible = GameManager.Instance.GameOver; rtlReachedPoints.Visible = GameManager.Instance.GameOver;
} }
vBoxPause.Visible = GameManager.Instance.GamePaused; 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); public void ShowMessage(string message) => GD.Print(message);
} }