Adds restart/return to main menu options after finishing run
							parent
							
								
									b32eee2d6c
								
							
						
					
					
						commit
						823d57a446
					
				| 
						 | 
					@ -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"]
 | 
				
			||||||
| 
						 | 
					@ -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://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://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://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://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"]
 | 
					[node name="Main" type="Node2D"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,5 +42,11 @@ offset_top = 42.0
 | 
				
			||||||
offset_right = 156.0
 | 
					offset_right = 156.0
 | 
				
			||||||
offset_bottom = 197.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="area_exited" from="Level" to="SnakePart" method="_on_level_area_exited"]
 | 
				
			||||||
[connection signal="timeout" from="RestartTimer" to="Timer" method="start" binds= [0.3]]
 | 
					[connection signal="timeout" from="RestartTimer" to="Timer" method="start" binds= [0.3]]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					uid://b8brifkk4knh8
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,9 @@ var snake_part_obj : PackedScene = preload("res://Scenes/snake_part.tscn")
 | 
				
			||||||
@onready
 | 
					@onready
 | 
				
			||||||
var timer_ref : Timer = $"../Timer"
 | 
					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 next_part : SnakePart = null
 | 
				
			||||||
var skip_next_move_propagation : bool = false
 | 
					var skip_next_move_propagation : bool = false
 | 
				
			||||||
var queued_growth : int = 0
 | 
					var queued_growth : int = 0
 | 
				
			||||||
| 
						 | 
					@ -227,6 +230,7 @@ func lose_game() -> void:
 | 
				
			||||||
	print("Game lost")
 | 
						print("Game lost")
 | 
				
			||||||
	state = States.DEAD
 | 
						state = States.DEAD
 | 
				
			||||||
	on_death.emit()
 | 
						on_death.emit()
 | 
				
			||||||
 | 
						game_over_menu.visible = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ouroboros() -> void:
 | 
					func ouroboros() -> void:
 | 
				
			||||||
	print("You have achieved the ouroboros!")
 | 
						print("You have achieved the ouroboros!")
 | 
				
			||||||
| 
						 | 
					@ -239,6 +243,7 @@ func ouroboros() -> void:
 | 
				
			||||||
	# The head can spawn a new snake
 | 
						# The head can spawn a new snake
 | 
				
			||||||
	if part_type == PartTypes.HEAD:
 | 
						if part_type == PartTypes.HEAD:
 | 
				
			||||||
		GameManager.score += 1
 | 
							GameManager.score += 1
 | 
				
			||||||
 | 
							remove_from_group("Head")
 | 
				
			||||||
		get_tree().get_first_node_in_group("GameClockPause").start(1)
 | 
							get_tree().get_first_node_in_group("GameClockPause").start(1)
 | 
				
			||||||
		get_tree().get_first_node_in_group("GameClock").stop()
 | 
							get_tree().get_first_node_in_group("GameClock").stop()
 | 
				
			||||||
		spawn_new_snake()
 | 
							spawn_new_snake()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,10 @@ config/icon="res://icon.svg"
 | 
				
			||||||
GridManager="*res://Scripts/grid_manager.gd"
 | 
					GridManager="*res://Scripts/grid_manager.gd"
 | 
				
			||||||
GameManager="*res://Scripts/game_manager.gd"
 | 
					GameManager="*res://Scripts/game_manager.gd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[display]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					window/stretch/mode="viewport"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[global_group]
 | 
					[global_group]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Level=""
 | 
					Level=""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue