Skip to content

Commit 3de4c2d

Browse files
committed
Simple Pause Menu
1 parent 9f08b0e commit 3de4c2d

7 files changed

Lines changed: 146 additions & 15 deletions

File tree

Globals/StageProducer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ public void TransitionStage(Stages nextStage)
121121
case Stages.Battle:
122122
GetTree().ChangeSceneToFile("res://scenes/BattleDirector/test_battle_scene.tscn");
123123
break;
124+
case Stages.Quit:
125+
GD.Print("Exiting game");
126+
GetTree().Quit();
127+
return;
128+
default:
129+
GD.Print($"Error Scene Transition is {nextStage}");
130+
break;
124131
}
125132

126133
_curStage = nextStage;

project.godot

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ arrowRight={
5858
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
5959
]
6060
}
61+
Pause={
62+
"deadzone": 0.5,
63+
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
64+
]
65+
}
6166

6267
[rendering]
6368

scenes/BattleDirector/scripts/BattleDirector.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,17 @@ public override void _Process(double delta)
122122
#endregion
123123

124124
#region Input&Timing
125+
126+
public override void _UnhandledInput(InputEvent @event)
127+
{
128+
if (@event.IsActionPressed("Pause"))
129+
{
130+
var pauseMenu = GD.Load<PackedScene>("res://scenes/UI/Pause.tscn");
131+
GetNode<CanvasLayer>("UILayer").AddChild(pauseMenu.Instantiate());
132+
GetTree().Paused = true;
133+
}
134+
}
135+
125136
private void OnNotePressed(ArrowType type)
126137
{
127138
CD.CheckNoteTiming(type);

scenes/BattleDirector/test_battle_scene.tscn

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
[gd_scene load_steps=8 format=3 uid="uid://b0mrgr7h0ty1y"]
1+
[gd_scene load_steps=7 format=3 uid="uid://b0mrgr7h0ty1y"]
22

33
[ext_resource type="Script" path="res://scenes/BattleDirector/scripts/BattleDirector.cs" id="1_cwqqr"]
44
[ext_resource type="PackedScene" uid="uid://dfevfib11kou1" path="res://scenes/ChartViewport/ChartViewport.tscn" id="2_cupb3"]
55
[ext_resource type="Script" path="res://scenes/BattleDirector/scripts/Conductor.cs" id="2_pcp76"]
66
[ext_resource type="Texture2D" uid="uid://ci0g72j8q4ec2" path="res://scenes/BattleDirector/assets/CoolBG.jpg" id="4_13o87"]
77
[ext_resource type="PackedScene" uid="uid://duhiilcv4tat3" path="res://scenes/BattleDirector/NotePlacementBar.tscn" id="7_3ko4g"]
88
[ext_resource type="AudioStream" uid="uid://cv6lqjj6lu36h" path="res://Audio/335571__magntron__gamemusic_120bpm.mp3" id="8_caqms"]
9-
[ext_resource type="Script" path="res://scenes/SceneTransitions/scripts/SceneChange.cs" id="9_bxa6e"]
109

1110
[node name="ProtoBattleDirector" type="Node2D" node_paths=PackedStringArray("CM", "NotePlacementBar", "CD", "Audio")]
11+
process_mode = 1
1212
script = ExtResource("1_cwqqr")
1313
CM = NodePath("SubViewport")
1414
NotePlacementBar = NodePath("NotePlacementBar")
1515
CD = NodePath("Conductor")
1616
Audio = NodePath("AudioStreamPlayer")
1717

18+
[node name="UILayer" type="CanvasLayer" parent="."]
19+
1820
[node name="Conductor" type="Node" parent="." node_paths=PackedStringArray("CM")]
1921
script = ExtResource("2_pcp76")
2022
CM = NodePath("../SubViewport")
@@ -49,12 +51,6 @@ offset_top = 164.0
4951
offset_right = 16.0
5052
offset_bottom = 164.0
5153

52-
[node name="LeaveButton" type="Button" parent="."]
53-
offset_right = 119.0
54-
offset_bottom = 31.0
55-
text = "Return to Title"
56-
script = ExtResource("9_bxa6e")
57-
5854
[node name="TempRelicList" type="Label" parent="."]
5955
offset_left = 564.0
6056
offset_top = 165.0

scenes/SceneTransitions/scripts/SceneChange.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ public override void _Ready()
1515

1616
private void OnButtonPressed()
1717
{
18-
if (ScenePath == Stages.Quit)
19-
{
20-
GD.Print("Exiting game");
21-
GetTree().Quit();
22-
return;
23-
}
24-
2518
GD.Print($"✅ Loading scene: {ScenePath}");
2619
GetNode<StageProducer>("/root/StageProducer").TransitionStage(ScenePath);
2720
}

scenes/UI/Pause.tscn

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
[gd_scene load_steps=2 format=3 uid="uid://dmfk0csl7cd27"]
2+
3+
[ext_resource type="Script" path="res://scenes/UI/scripts/PauseMenu.cs" id="1_6jc8n"]
4+
5+
[node name="PauseMenu" type="Control" node_paths=PackedStringArray("pauseButtons")]
6+
process_mode = 2
7+
layout_mode = 3
8+
anchors_preset = 15
9+
anchor_right = 1.0
10+
anchor_bottom = 1.0
11+
grow_horizontal = 2
12+
grow_vertical = 2
13+
script = ExtResource("1_6jc8n")
14+
pauseButtons = [NodePath("MarginContainer/VBoxContainer/MarginContainer/ResumeButton"), NodePath("MarginContainer/VBoxContainer/MarginContainer2/QuitButton"), NodePath("MarginContainer/VBoxContainer/MarginContainer3/PlaceHolderButton")]
15+
16+
[node name="ColorRect" type="ColorRect" parent="."]
17+
layout_mode = 2
18+
offset_right = 640.0
19+
offset_bottom = 360.0
20+
color = Color(0.237539, 0.237539, 0.237539, 0.466667)
21+
22+
[node name="MarginContainer" type="MarginContainer" parent="."]
23+
layout_mode = 1
24+
anchors_preset = 15
25+
anchor_right = 1.0
26+
anchor_bottom = 1.0
27+
grow_horizontal = 2
28+
grow_vertical = 2
29+
theme_override_constants/margin_left = 200
30+
theme_override_constants/margin_top = 20
31+
theme_override_constants/margin_right = 200
32+
theme_override_constants/margin_bottom = 20
33+
34+
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
35+
layout_mode = 2
36+
37+
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
38+
layout_mode = 2
39+
size_flags_vertical = 3
40+
theme_override_constants/margin_left = 20
41+
theme_override_constants/margin_top = 20
42+
theme_override_constants/margin_right = 20
43+
theme_override_constants/margin_bottom = 20
44+
45+
[node name="ResumeButton" type="Button" parent="MarginContainer/VBoxContainer/MarginContainer"]
46+
layout_mode = 2
47+
focus_neighbor_top = NodePath("../../MarginContainer3/PlaceHolderButton")
48+
focus_neighbor_bottom = NodePath("../../MarginContainer2/QuitButton")
49+
text = "Resume"
50+
51+
[node name="MarginContainer2" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
52+
layout_mode = 2
53+
size_flags_vertical = 3
54+
theme_override_constants/margin_left = 20
55+
theme_override_constants/margin_top = 20
56+
theme_override_constants/margin_right = 20
57+
theme_override_constants/margin_bottom = 20
58+
59+
[node name="QuitButton" type="Button" parent="MarginContainer/VBoxContainer/MarginContainer2"]
60+
layout_mode = 2
61+
focus_neighbor_top = NodePath("../../MarginContainer/ResumeButton")
62+
focus_neighbor_bottom = NodePath("../../MarginContainer3/PlaceHolderButton")
63+
text = "Quit"
64+
65+
[node name="MarginContainer3" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
66+
layout_mode = 2
67+
size_flags_vertical = 3
68+
theme_override_constants/margin_left = 20
69+
theme_override_constants/margin_top = 20
70+
theme_override_constants/margin_right = 20
71+
theme_override_constants/margin_bottom = 20
72+
73+
[node name="PlaceHolderButton" type="Button" parent="MarginContainer/VBoxContainer/MarginContainer3"]
74+
layout_mode = 2
75+
focus_neighbor_top = NodePath("../../MarginContainer2/QuitButton")
76+
focus_neighbor_bottom = NodePath("../../MarginContainer/ResumeButton")
77+
text = "Quit to Title"

scenes/UI/scripts/PauseMenu.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using FunkEngine;
3+
using Godot;
4+
5+
public partial class PauseMenu : Control
6+
{
7+
[Export]
8+
public Button[] pauseButtons;
9+
10+
public override void _Ready()
11+
{
12+
pauseButtons[0].Pressed += Resume;
13+
pauseButtons[1].Pressed += Quit;
14+
pauseButtons[2].Pressed += QuitToMainMenu;
15+
pauseButtons[0].GrabFocus();
16+
}
17+
18+
public override void _Input(InputEvent @event)
19+
{
20+
if (@event.IsActionPressed("Pause"))
21+
{
22+
Resume();
23+
GetViewport().SetInputAsHandled();
24+
}
25+
}
26+
27+
private void Resume()
28+
{
29+
GetTree().Paused = false;
30+
QueueFree(); //Hacky and shortsighted (probably?)
31+
}
32+
33+
private void Quit()
34+
{
35+
GetNode<StageProducer>("/root/StageProducer").TransitionStage(Stages.Quit);
36+
}
37+
38+
private void QuitToMainMenu()
39+
{
40+
GetNode<StageProducer>("/root/StageProducer").TransitionStage(Stages.Title);
41+
}
42+
}

0 commit comments

Comments
 (0)