diff --git a/game/levels/abstract_level.gd b/game/levels/abstract_level.gd index e1b9e61..30e8e95 100644 --- a/game/levels/abstract_level.gd +++ b/game/levels/abstract_level.gd @@ -4,6 +4,7 @@ extends Node2D @onready var pause_menu : PauseMenu = $%PauseMenu @onready var game_over_menu : GameOverMenu = $%GameOverMenu +@onready var completion_menu : CompletionMenu = $%CompletionMenu func _ready() -> void: @@ -20,3 +21,9 @@ func _input(event: InputEvent) -> void: func _on_player_dead() -> void: get_tree().paused = true game_over_menu.show() + + +func _on_level_end_entered(body: Node2D) -> void: + if body is Player: + get_tree().paused = true + completion_menu.show() diff --git a/game/levels/abstract_level.tscn b/game/levels/abstract_level.tscn index 9cd1d7f..f6f4d56 100644 --- a/game/levels/abstract_level.tscn +++ b/game/levels/abstract_level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://mpsu4g2b5h3a"] +[gd_scene load_steps=21 format=3 uid="uid://mpsu4g2b5h3a"] [ext_resource type="Script" uid="uid://c737mx0kxva7i" path="res://game/levels/abstract_level.gd" id="1_o2mui"] [ext_resource type="PackedScene" uid="uid://dtcad8tdx78tg" path="res://game/characters/player.tscn" id="2_r0ht6"] @@ -10,6 +10,7 @@ [ext_resource type="PackedScene" uid="uid://dpvsvsd8pcjqn" path="res://game/player_killer.tscn" id="7_8ydah"] [ext_resource type="PackedScene" uid="uid://dsts4y32slhnc" path="res://game/menu/pause_menu.tscn" id="7_l0xih"] [ext_resource type="PackedScene" uid="uid://84lhc3yn8vub" path="res://game/menu/game_over_menu.tscn" id="8_b7vts"] +[ext_resource type="PackedScene" uid="uid://bareycqj42c6e" path="res://game/menu/completion_menu.tscn" id="11_3fw0b"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_pi5fd"] texture = ExtResource("3_fnnmn") @@ -391,6 +392,8 @@ physics_layer_0/collision_layer = 16 physics_layer_0/collision_mask = 16 sources/0 = SubResource("TileSetAtlasSource_3fw0b") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3fw0b"] + [node name="AbstractLevel" type="Node2D"] script = ExtResource("1_o2mui") @@ -433,4 +436,16 @@ visible = false unique_name_in_owner = true visible = false +[node name="CompletionMenu" parent="CanvasLayer" instance=ExtResource("11_3fw0b")] +unique_name_in_owner = true +visible = false + +[node name="LevelEnd" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 136 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="LevelEnd"] +shape = SubResource("RectangleShape2D_3fw0b") + [connection signal="dead" from="Player" to="." method="_on_player_dead"] +[connection signal="body_entered" from="LevelEnd" to="." method="_on_level_end_entered"] diff --git a/game/levels/level_1.tscn b/game/levels/level_1.tscn index 973cd4c..00e78a5 100644 --- a/game/levels/level_1.tscn +++ b/game/levels/level_1.tscn @@ -92,3 +92,6 @@ tile_map_data = PackedByteArray("AAAwAP3/AAAAAAEAAAAwAPz/AAAAAAEAAAAwAPv/AAAAAAE [node name="Traps" parent="Tiles" index="3"] tile_map_data = PackedByteArray("AAA9AAcAAAAAAAAAAAA9AAgAAAAAAAEAAAA9AAkAAAAAAAEAAAA=") + +[node name="LevelEnd" parent="." index="7"] +position = Vector2(1334, 103) diff --git a/game/menu/completion_menu.gd b/game/menu/completion_menu.gd new file mode 100644 index 0000000..e635bea --- /dev/null +++ b/game/menu/completion_menu.gd @@ -0,0 +1,29 @@ +class_name CompletionMenu +extends Control + + +@export var next_level : PackedScene + + +@onready var next_level_button : Button = $%NextLevelButton +@onready var focus_timer : Timer = $FocusTimer + + +func _on_next_level_button_pressed() -> void: + get_tree().paused = false + + if next_level != null: + get_tree().change_scene_to_packed(next_level) + else: + get_tree().change_scene_to_file("res://game/menu/main_menu.tscn") + + +func _on_visibility_changed() -> void: + if visible: + if focus_timer != null: + focus_timer.start() + + +func _on_focus_timer_timeout() -> void: + if next_level_button != null: + next_level_button.grab_focus() diff --git a/game/menu/completion_menu.gd.uid b/game/menu/completion_menu.gd.uid new file mode 100644 index 0000000..70fada4 --- /dev/null +++ b/game/menu/completion_menu.gd.uid @@ -0,0 +1 @@ +uid://dj6porbpmqbd1 diff --git a/game/menu/completion_menu.tscn b/game/menu/completion_menu.tscn new file mode 100644 index 0000000..3cd7e78 --- /dev/null +++ b/game/menu/completion_menu.tscn @@ -0,0 +1,56 @@ +[gd_scene load_steps=4 format=3 uid="uid://bareycqj42c6e"] + +[ext_resource type="Theme" uid="uid://bh56my8b2htnr" path="res://themes/menu.tres" id="1_0iv8v"] +[ext_resource type="Theme" uid="uid://dosa0gsbrbnpe" path="res://themes/splash.tres" id="2_0iv8v"] +[ext_resource type="Script" uid="uid://dj6porbpmqbd1" path="res://game/menu/completion_menu.gd" id="2_kge0e"] + +[node name="CompletionMenu" type="Control"] +process_mode = 2 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_0iv8v") +script = ExtResource("2_kge0e") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme = ExtResource("2_0iv8v") + +[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Completed!" +horizontal_alignment = 1 + +[node name="NextLevelButton" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Next level" + +[node name="FocusTimer" type="Timer" parent="."] +one_shot = true + +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] +[connection signal="pressed" from="MarginContainer/VBoxContainer/NextLevelButton" to="." method="_on_next_level_button_pressed"] +[connection signal="timeout" from="FocusTimer" to="." method="_on_focus_timer_timeout"] diff --git a/game/menu/game_over_menu.tscn b/game/menu/game_over_menu.tscn index 0a94c80..9f8eb88 100644 --- a/game/menu/game_over_menu.tscn +++ b/game/menu/game_over_menu.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://84lhc3yn8vub"] +[gd_scene load_steps=4 format=3 uid="uid://84lhc3yn8vub"] [ext_resource type="Theme" uid="uid://bh56my8b2htnr" path="res://themes/menu.tres" id="1_htxfh"] [ext_resource type="Script" uid="uid://bb257l7unttky" path="res://game/menu/game_over_menu.gd" id="2_m1ad0"] +[ext_resource type="Theme" uid="uid://dosa0gsbrbnpe" path="res://themes/splash.tres" id="3_kodbj"] [node name="GameOverMenu" type="Control"] process_mode = 2 @@ -35,11 +36,11 @@ grow_vertical = 2 layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 -theme_override_constants/separation = 64 +theme = ExtResource("3_kodbj") [node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] layout_mode = 2 -text = "Game over" +text = "Game over!" horizontal_alignment = 1 [node name="MainMenuButton" type="Button" parent="MarginContainer/VBoxContainer"] diff --git a/themes/splash.tres b/themes/splash.tres new file mode 100644 index 0000000..77e1eec --- /dev/null +++ b/themes/splash.tres @@ -0,0 +1,4 @@ +[gd_resource type="Theme" format=3 uid="uid://dosa0gsbrbnpe"] + +[resource] +VBoxContainer/constants/separation = 64