pause menu with spaghettis mixed in

This commit is contained in:
Taevas 2025-02-23 16:18:14 +01:00
parent c19d1dffcb
commit 2f066938ac
6 changed files with 151 additions and 68 deletions

View file

@ -1,34 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://bwxor1n3m4d4a"]
[sub_resource type="GDScript" id="GDScript_f1obc"]
script/source = "extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_body_entered(body: Node3D) -> void:
print(body, \" !!\")
pass # Replace with function body.
"
[sub_resource type="SphereShape3D" id="SphereShape3D_lnm1h"]
radius = 1.0
[node name="Collectible" type="Area3D"]
script = SubResource("GDScript_f1obc")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_lnm1h")
[node name="CSGSphere3D" type="CSGSphere3D" parent="."]
radius = 1.0
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View file

@ -1,12 +0,0 @@
Theme: Gravity
3D, but played in 2D (think New Super Mario Bros)
2 controls:
With the arrow keys, change the direction of the gravity
With the shift key, change how much the gravity is applied
1 objective: Bring the ball through all the rings
Music is proportional to the ball's velocity
Each level looks and sounds different
Have score be Sonic-like, there's a timer and it's converted into score, also add to score if ball collects certain stuff

View file

@ -4,22 +4,30 @@
script/source = "extends Node
var seconds_spent: float = 0.0
var changing_level: bool = false
var base = preload(\"res://levels/base/level.tscn\")
var forest = preload(\"res://levels/forest/level.tscn\")
var night = preload(\"res://levels/night/level.tscn\")
func _ready() -> void:
$PauseMenu.hide()
## Add the version of the game and the name of the OS to the footer of the start menu
$StartMenu/VBoxContainer/MarginContainer2/Notice.text += \" - build \" + ProjectSettings.get_setting(\"application/config/version\") + \" (\" + OS.get_name() + \")\"
func start_level(level_scene: PackedScene) -> void:
if level_scene and level_scene.can_instantiate():
AudioServer.set_bus_volume_db(0, 0)
var level = level_scene.instantiate()
$Levels.add_child(level)
$Timer.paused = false
changing_level = false
else:
assert(false, \"NO LEVEL AAAA\")
func stop_level() -> void:
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 1)
$Timer.paused = true
changing_level = true
AudioServer.set_bus_volume_db(0, -5)
await get_tree().create_timer(0.5).timeout
@ -34,9 +42,9 @@ func stop_level() -> void:
var current_levels = $Levels.get_children(true)
if len(current_levels):
var current_level = current_levels[0]
if current_level.name == \"Base\":
if current_level.get_meta(\"name\") == \"Base\":
next_level = forest
elif current_level.name == \"Forest\":
elif current_level.get_meta(\"name\") == \"Forest\":
next_level = night
for level in current_levels:
@ -44,13 +52,47 @@ func stop_level() -> void:
start_level(next_level)
func _on_btn_fullscreen_pressed() -> void:
func restart_level() -> void:
if changing_level == false:
var current_levels = $Levels.get_children(true)
if len(current_levels):
pause_game()
changing_level = true
var current_level = current_levels[0]
var next_level: PackedScene = base
if current_level.get_meta(\"name\") == \"Forest\":
next_level = forest
elif current_level.get_meta(\"name\") == \"Night\":
next_level = night
for level in current_levels:
level.queue_free()
start_level(next_level)
func pause_game() -> void:
if $Levels.process_mode == PROCESS_MODE_INHERIT:
$Levels.process_mode = Node.PROCESS_MODE_DISABLED
$Timer.paused = true
$PauseMenu.show()
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
else:
$Levels.process_mode = Node.PROCESS_MODE_INHERIT
$Timer.paused = false
$PauseMenu.hide()
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
func fullscreen_game() -> void:
var fs = DisplayServer.window_get_mode()
if fs != DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN)
else:
DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_WINDOWED)
func _on_btn_fullscreen_pressed() -> void:
fullscreen_game()
func _on_btn_start_pressed() -> void:
$StartMenu/AnimationPlayer.play(\"fadeout\")
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
@ -66,12 +108,36 @@ func _on_timer_timeout() -> void:
var minutes = floor(seconds_spent / 60)
$Informations/MarginContainer/Timer.text = (\"%0*d\" % [2, minutes]) + \":\" + (\"%0*.1f\" % [4, seconds_spent - (minutes * 60)])
func _process(delta: float) -> void:
func _process(_delta: float) -> void:
var current_levels = $Levels.get_children(true)
if len(current_levels):
var current_level = current_levels[0]
if is_instance_valid(current_level) and \"velocity\" in current_level:
if is_instance_valid(current_level):
if \"velocity\" in current_level:
$Informations/MarginContainer/VBoxContainer/Speed.text = str(floor(current_level.velocity)) + \" km/h\"
if \"rings_count\" in current_level and \"finished_rings_count\" in current_level:
$Informations/MarginContainer/VBoxContainer/Rings.text = str(current_level.finished_rings_count) + \"/\" + str(current_level.rings_count)
func _unhandled_key_input(event: InputEvent) -> void:
if event.is_pressed() and event is InputEventKey:
if $StartMenu.visible == false and changing_level == false:
if event.keycode == KEY_ESCAPE:
pause_game()
elif event.keycode == KEY_R:
pause_game()
restart_level()
func _on_btn_resume_pressed() -> void:
pause_game()
func _on_btn_fullscreen_2_pressed() -> void:
fullscreen_game()
func _on_btn_restart_pressed() -> void:
restart_level()
func _on_btn_quit_pressed() -> void:
get_tree().quit()
"
[sub_resource type="LabelSettings" id="LabelSettings_0s07t"]
@ -291,14 +357,14 @@ layout_mode = 2
size_flags_horizontal = 4
text = "START the game!"
[node name="Notice" type="MarginContainer" parent="StartMenu/VBoxContainer"]
[node name="MarginContainer2" type="MarginContainer" parent="StartMenu/VBoxContainer"]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="Title3" type="Label" parent="StartMenu/VBoxContainer/Notice"]
[node name="Notice" type="Label" parent="StartMenu/VBoxContainer/MarginContainer2"]
layout_mode = 2
text = "Made during the 21st edition of Alakajam!"
label_settings = SubResource("LabelSettings_5jdmh")
@ -314,7 +380,54 @@ libraries = {
[node name="Timer" type="Timer" parent="."]
wait_time = 0.1
[node name="PauseMenu" type="Control" parent="."]
visible = false
z_index = 2
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
[node name="VBoxContainer" type="VBoxContainer" parent="PauseMenu"]
layout_mode = 1
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_top = -50.5
offset_bottom = 50.5
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 10
[node name="Btn_Resume" type="Button" parent="PauseMenu/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
text = "RESUME game"
[node name="Btn_Fullscreen2" type="Button" parent="PauseMenu/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
text = "Toggle FULLSCREEN"
[node name="Btn_Restart" type="Button" parent="PauseMenu/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
text = "RESTART the level"
[node name="Btn_Quit" type="Button" parent="PauseMenu/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 6
text = "QUIT game"
[connection signal="pressed" from="StartMenu/VBoxContainer/MarginContainer/HBoxContainer/Buttons/HBoxContainer/Btn_Fullscreen" to="." method="_on_btn_fullscreen_pressed"]
[connection signal="pressed" from="StartMenu/VBoxContainer/MarginContainer/HBoxContainer/Buttons/HBoxContainer/Btn_Start" to="." method="_on_btn_start_pressed"]
[connection signal="animation_finished" from="StartMenu/AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Resume" to="." method="_on_btn_resume_pressed"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Fullscreen2" to="." method="_on_btn_fullscreen_2_pressed"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Restart" to="." method="_on_btn_restart_pressed"]
[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Quit" to="." method="_on_btn_quit_pressed"]

View file

@ -11,6 +11,7 @@
[node name="Base" type="Node3D"]
script = ExtResource("1_rj40i")
metadata/material = ExtResource("1_dwsqy")
metadata/name = "Base"
[node name="Environment" parent="." instance=ExtResource("1_n7fd8")]
@ -80,7 +81,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.18355, 0)
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -14.2868, 3.51514, 0)
[node name="Ring18" parent="Rings" instance=ExtResource("3_hel5x")]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 10.4967, 3.51514, 0)
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 10.2086, 3.51514, 0)
[node name="Ring5" parent="Rings" instance=ExtResource("3_hel5x")]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -27.6263, 3.51514, 0)
@ -92,7 +93,7 @@ transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -51.81
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -65.1566, 3.51514, 0)
[node name="Ring3" parent="Rings" instance=ExtResource("3_hel5x")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.9205, -3.18355, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.5274, -3.18355, 0)
[node name="Ring2" parent="Rings" instance=ExtResource("3_hel5x")]
transform = Transform3D(-6.55671e-08, -1.5, 0, 1.5, -6.55671e-08, 0, 0, 0, 1.5, 10, -16.4737, 0)

View file

@ -10,6 +10,7 @@
[node name="Forest" type="Node3D"]
script = ExtResource("1_fdxcj")
metadata/name = "Forest"
[node name="Environment" parent="." instance=ExtResource("1_7clrg")]

View file

@ -11,6 +11,7 @@
[node name="Night" type="Node3D"]
script = ExtResource("1_3m1pa")
metadata/name = "Night"
[node name="Environment" parent="." instance=ExtResource("2_wintp")]
@ -150,7 +151,7 @@ transform = Transform3D(-1.74846e-08, 0.4, 0, -0.4, -1.74846e-08, 0, 0, 0, 0.4,
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 140.19, -14.6271, 0)
[node name="Ring22" parent="Rings" instance=ExtResource("4_brcr0")]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 229.201, -2.70863, 0)
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 229.201, -5.43154, 0)
[node name="Ring23" parent="Rings" instance=ExtResource("4_brcr0")]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 315.818, -14.6271, 0)
@ -170,25 +171,37 @@ transform = Transform3D(-1.31134e-07, -3, 0, 3, -1.31134e-07, 0, 0, 0, 3, -104.2
[node name="Ring2" parent="Rings" instance=ExtResource("4_brcr0")]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -12.3896, -2, 0)
[node name="Sign" parent="." instance=ExtResource("6_36yav")]
[node name="Signs" type="Node3D" parent="."]
[node name="Sign" parent="Signs" instance=ExtResource("6_36yav")]
transform = Transform3D(0.843785, 0, 0.536681, 0, 1, 0, -0.536681, 0, 0.843785, -159.605, -62.9326, 0)
[node name="Text" parent="Sign" index="0"]
[node name="Text" parent="Signs/Sign" index="0"]
text = "^^^
Go UP!!"
font_size = 2048
[node name="Sign2" parent="." instance=ExtResource("6_36yav")]
[node name="Sign4" parent="Signs" instance=ExtResource("6_36yav")]
transform = Transform3D(0.965926, 0, 0.258819, 0, 1, 0, -0.258819, 0, 0.965926, 231.92, -32.6467, 0)
[node name="Text" parent="Signs/Sign4" index="0"]
text = "^^
Don't forget
that one!"
font_size = 1500
[node name="Sign2" parent="Signs" instance=ExtResource("6_36yav")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -159.605, -30.0117, -45.6318)
[node name="Text" parent="Sign2" index="0"]
text = "Now, RIGHT!"
font_size = 2048
[node name="Text" parent="Signs/Sign2" index="0"]
text = "After taking this,
go RIGHT!"
font_size = 1600
[node name="Sign3" parent="." instance=ExtResource("6_36yav")]
[node name="Sign3" parent="Signs" instance=ExtResource("6_36yav")]
transform = Transform3D(-1, -8.74228e-08, 0, 8.74228e-08, -1, 0, 0, 0, 1, -64.0671, 131.627, -45.6318)
[node name="Text" parent="Sign3" index="0"]
[node name="Text" parent="Signs/Sign3" index="0"]
transform = Transform3D(-1, 8.74228e-08, 0, -8.74228e-08, -1, 0, 0, 0, 1, 0, 0, 0)
text = "Go RIGHT!"
font_size = 2048
@ -294,6 +307,7 @@ transform = Transform3D(-0.99693, 0.0731445, -0.0279554, -0.0555776, -0.912445,
[node name="Tree" parent="." instance=ExtResource("8_kgstj")]
transform = Transform3D(-3.79443, -7.04289, 0, 7.04289, -3.79443, 0, 0, 0, 8, 28.958, -413.185, -93.8242)
[editable path="Sign"]
[editable path="Sign2"]
[editable path="Sign3"]
[editable path="Signs/Sign"]
[editable path="Signs/Sign4"]
[editable path="Signs/Sign2"]
[editable path="Signs/Sign3"]