From 823d57a446c53aa5e9aa73b4361bc9524cf025ef Mon Sep 17 00:00:00 2001 From: TechieDamien Date: Thu, 31 Jul 2025 16:13:53 +0100 Subject: [PATCH] Adds restart/return to main menu options after finishing run --- Scenes/game_over_menu.tscn | 37 +++++++++++++++++++++++++++++++++++ Scenes/main.tscn | 9 ++++++++- Scripts/game_over_menu.gd | 15 ++++++++++++++ Scripts/game_over_menu.gd.uid | 1 + Scripts/snake_part.gd | 5 +++++ project.godot | 4 ++++ 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 Scenes/game_over_menu.tscn create mode 100644 Scripts/game_over_menu.gd create mode 100644 Scripts/game_over_menu.gd.uid diff --git a/Scenes/game_over_menu.tscn b/Scenes/game_over_menu.tscn new file mode 100644 index 0000000..d82ab41 --- /dev/null +++ b/Scenes/game_over_menu.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=3 format=3 uid="uid://bqg3ohs1gwofr"] + +[ext_resource type="Script" uid="uid://b8brifkk4knh8" path="res://Scripts/game_over_menu.gd" id="1_arass"] + +[sub_resource type="LabelSettings" id="LabelSettings_7upku"] +font_size = 32 + +[node name="GameOverMenu" type="VBoxContainer" groups=["GameOverMenu"]] +visible = false +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_arass") + +[node name="FinalScore" type="Label" parent="."] +layout_mode = 2 +text = "Final Score +0" +label_settings = SubResource("LabelSettings_7upku") +horizontal_alignment = 1 + +[node name="Control" type="Control" parent="."] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Restart" type="Button" parent="."] +layout_mode = 2 +text = "Restart" + +[node name="MainMenu" type="Button" parent="."] +layout_mode = 2 +text = "Main Menu" + +[connection signal="pressed" from="Restart" to="." method="restart"] +[connection signal="pressed" from="MainMenu" to="." method="back"] diff --git a/Scenes/main.tscn b/Scenes/main.tscn index 5d6664a..82bca3c 100644 --- a/Scenes/main.tscn +++ b/Scenes/main.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://bs6an72avch86"] +[gd_scene load_steps=6 format=3 uid="uid://bs6an72avch86"] [ext_resource type="PackedScene" uid="uid://gkqku38yb2ng" path="res://Scenes/level.tscn" id="1_bo1nx"] [ext_resource type="PackedScene" uid="uid://d0okbjqyaoe0w" path="res://Scenes/snake_part.tscn" id="2_8gbba"] [ext_resource type="PackedScene" uid="uid://bldekmt1rakjl" path="res://Scenes/fruit.tscn" id="3_8gbba"] [ext_resource type="PackedScene" uid="uid://mp03fsd536be" path="res://Scenes/score_display.tscn" id="4_jjvhh"] +[ext_resource type="PackedScene" uid="uid://bqg3ohs1gwofr" path="res://Scenes/game_over_menu.tscn" id="5_kry3j"] [node name="Main" type="Node2D"] @@ -41,5 +42,11 @@ offset_top = 42.0 offset_right = 156.0 offset_bottom = 197.0 +[node name="GameOverMenu" parent="." instance=ExtResource("5_kry3j")] +offset_left = 340.0 +offset_top = 173.0 +offset_right = 812.0 +offset_bottom = 475.0 + [connection signal="area_exited" from="Level" to="SnakePart" method="_on_level_area_exited"] [connection signal="timeout" from="RestartTimer" to="Timer" method="start" binds= [0.3]] diff --git a/Scripts/game_over_menu.gd b/Scripts/game_over_menu.gd new file mode 100644 index 0000000..cbd24bd --- /dev/null +++ b/Scripts/game_over_menu.gd @@ -0,0 +1,15 @@ +extends VBoxContainer + +var level : PackedScene = load("res://Scenes/main.tscn") +var main_menu : PackedScene = load("res://Scenes/main_menu.tscn") +@onready +var score_label : Label = $FinalScore + +func update_score() -> void: + score_label.text = "Final Score\n{score}".format(GameManager) + +func restart(): + get_tree().change_scene_to_packed(level) + +func back(): + get_tree().change_scene_to_packed(main_menu) diff --git a/Scripts/game_over_menu.gd.uid b/Scripts/game_over_menu.gd.uid new file mode 100644 index 0000000..5d81b93 --- /dev/null +++ b/Scripts/game_over_menu.gd.uid @@ -0,0 +1 @@ +uid://b8brifkk4knh8 diff --git a/Scripts/snake_part.gd b/Scripts/snake_part.gd index 8929e34..e4112df 100644 --- a/Scripts/snake_part.gd +++ b/Scripts/snake_part.gd @@ -31,6 +31,9 @@ var snake_part_obj : PackedScene = preload("res://Scenes/snake_part.tscn") @onready var timer_ref : Timer = $"../Timer" +@onready +var game_over_menu : VBoxContainer = get_tree().get_first_node_in_group("GameOverMenu") + var next_part : SnakePart = null var skip_next_move_propagation : bool = false var queued_growth : int = 0 @@ -227,6 +230,7 @@ func lose_game() -> void: print("Game lost") state = States.DEAD on_death.emit() + game_over_menu.visible = true func ouroboros() -> void: print("You have achieved the ouroboros!") @@ -239,6 +243,7 @@ func ouroboros() -> void: # The head can spawn a new snake if part_type == PartTypes.HEAD: GameManager.score += 1 + remove_from_group("Head") get_tree().get_first_node_in_group("GameClockPause").start(1) get_tree().get_first_node_in_group("GameClock").stop() spawn_new_snake() diff --git a/project.godot b/project.godot index b8b2ec3..63134d2 100644 --- a/project.godot +++ b/project.godot @@ -20,6 +20,10 @@ config/icon="res://icon.svg" GridManager="*res://Scripts/grid_manager.gd" GameManager="*res://Scripts/game_manager.gd" +[display] + +window/stretch/mode="viewport" + [global_group] Level=""