From a6f817efbcec97278d8f90a7f9999a4384c23d3f Mon Sep 17 00:00:00 2001 From: Rendo Date: Sun, 29 Jun 2025 01:15:45 +0500 Subject: [PATCH] loose menu --- assets/sprites/atlases/atlas2.png | Bin 7021 -> 8141 bytes assets/sprites/atlases/brain.tres | 7 + .../animations/zombies/basic_zombie_tree.tres | 39 +++ scenes/entities/Zombies/zombie.tscn | 43 +--- scenes/entities/plants/peashooter.tscn | 1 - scenes/level components/invun_plant.tscn | 12 + scenes/prototype_survival.tscn | 232 +++++++++++++++++- scripts/components/gui/ExitButton.cs | 10 + scripts/components/gui/ExitButton.cs.uid | 1 + scripts/components/gui/PauseMenu.cs | 3 +- scripts/components/gui/RestartButton.cs | 12 + scripts/components/gui/RestartButton.cs.uid | 1 + scripts/components/level/LoseCheckbox.cs | 31 +++ scripts/components/level/LoseCheckbox.cs.uid | 1 + scripts/components/plants/LoseZone.cs | 17 ++ scripts/components/plants/LoseZone.cs.uid | 1 + scripts/components/plants/RuntimePlantData.cs | 10 +- 17 files changed, 369 insertions(+), 52 deletions(-) create mode 100644 assets/sprites/atlases/brain.tres create mode 100644 resources/animations/zombies/basic_zombie_tree.tres create mode 100644 scenes/level components/invun_plant.tscn create mode 100644 scripts/components/gui/ExitButton.cs create mode 100644 scripts/components/gui/ExitButton.cs.uid create mode 100644 scripts/components/gui/RestartButton.cs create mode 100644 scripts/components/gui/RestartButton.cs.uid create mode 100644 scripts/components/level/LoseCheckbox.cs create mode 100644 scripts/components/level/LoseCheckbox.cs.uid create mode 100644 scripts/components/plants/LoseZone.cs create mode 100644 scripts/components/plants/LoseZone.cs.uid diff --git a/assets/sprites/atlases/atlas2.png b/assets/sprites/atlases/atlas2.png index 2e0fca80d93136ed3a8b69efd429691627542d85..fbc6272d4494a1b73e25f28cdf034d79ca75932e 100644 GIT binary patch literal 8141 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

U-8a@`sxkxr+@`|l875Tijh0(W_W6450HTn z&>2dOW}TBfrbF53j!NR+v_?!>96On(T5?7hID-{9SEn7tl7KDSJ&2#|WcuS42Tc~@ zV_Vvxd?2M<;FliO6Qo=<|E*3Go#G@FsR=cLwNc&0xBd0HftS5)Ss?{y8I#Rwy{O2F zKHGYA0j8yN%D!n!>C1)iUajk*VAqX2s+xSW&KH{O_c7-jlhh5TTIdyZgN59g==K$% z3VU5$VowQ^h|4SB6`{fzx~%Tb#eanFH%Y~y3V0|VJn1_+ulr(h6CLJfcv4_eYP${u zazB^7!$|z6{#GMpr6Q^yywR*k4b22g70E=hoiIfuK{4)7bE0qmFbKA&vX-%t6t zmSEC>8W03APWVYtD0X);5m^bJIkc*5b9u-P|H&9epx;*g5fQ;;ikA|1wv@%_yp3yi z@?&Q$PBbei&EV4vI9v+_pTiehRVi_)8Th?DO_uFw>a8^Qis^{^O%vblAy?8$1b{O# z(Mn2encC8djg8Uuagl8HpvnwS&S~11|B?Im%$+yQYIY!z&gsdcPKU1%Oi*#QgTWND zIIGhD@P--9Te=g5jLdUi;Ci6V%)X?=73XupC(z~oYwl4Y=DckTVDPulz_=pC`~QZ# z@%Q)%LLEZ0hy2uYTbLq03}#Z5_uaB*VIH`}SI7NqYX3Y9-R^=Bb+}b!nE6Ai8^+sP zBVNsN{PUzxqd995#G!RxSFb&@fc1_MlAg&lXZWpVY;D6yh5&FTPo&9V*2D*S!GM!F zcdNEq&R%l(rx)F`B3zQpdQw?Xfb{NQzwTbtP%DA1#m3&CvbS;rz)s;oeGgc0%ncCj z=2%wqLS)vkOi^=QEB3J((bHRNgY$`fvL>H-6@H1JAr;bR|9f8R zKT}NUf(F#hI8#^qy3^++gYx7I;*LS$B~3AZtZ`V7y}YcYQ1)URH5Jh>&ql&eOKINx zt2pCAXJ_AwK9&_h%dDuzotK=7i8#VJ8IryNlqiA|tX9Xr3`_AB0{k)G8dyBrHam>4 zsl6dsZ8W@|EV3t6HbK6w1jQ?D=r<2zWa|_6==nF$Njd7!-f&M}D0gw-f&959XuNL22e;RYEfe zMB09rGjhy diff --git a/assets/sprites/atlases/brain.tres b/assets/sprites/atlases/brain.tres new file mode 100644 index 0000000..d309e09 --- /dev/null +++ b/assets/sprites/atlases/brain.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bt0slphfqhhab"] + +[ext_resource type="Texture2D" uid="uid://c68mrfs4wb81x" path="res://assets/sprites/atlases/atlas2.png" id="1_3sdui"] + +[resource] +atlas = ExtResource("1_3sdui") +region = Rect2(0, 144, 170, 63) diff --git a/resources/animations/zombies/basic_zombie_tree.tres b/resources/animations/zombies/basic_zombie_tree.tres new file mode 100644 index 0000000..c8c07ab --- /dev/null +++ b/resources/animations/zombies/basic_zombie_tree.tres @@ -0,0 +1,39 @@ +[gd_resource type="AnimationNodeStateMachine" load_steps=9 format=3 uid="uid://dj0blope85bg7"] + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_h0rfo"] +animation = &"basic_zombie/eat" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_nog33"] +animation = &"basic_zombie/idle" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_g2uel"] +animation = &"basic_zombie/walk" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vxhht"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_r8rju"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_y2ivb"] +advance_mode = 2 +advance_expression = "get(\"isEating\") == true" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7d3k4"] +advance_mode = 2 +advance_expression = "get(\"isEating\") == true" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kk4wi"] +advance_mode = 2 +advance_expression = "get(\"isEating\") == false" + +[resource] +states/End/position = Vector2(977, 90) +states/basic_zombie_eat/node = SubResource("AnimationNodeAnimation_h0rfo") +states/basic_zombie_eat/position = Vector2(575, 185) +states/basic_zombie_idle/node = SubResource("AnimationNodeAnimation_nog33") +states/basic_zombie_idle/position = Vector2(366, 100) +states/basic_zombie_walk/node = SubResource("AnimationNodeAnimation_g2uel") +states/basic_zombie_walk/position = Vector2(575, 35) +transitions = ["Start", "basic_zombie_idle", SubResource("AnimationNodeStateMachineTransition_vxhht"), "basic_zombie_idle", "basic_zombie_walk", SubResource("AnimationNodeStateMachineTransition_r8rju"), "basic_zombie_idle", "basic_zombie_eat", SubResource("AnimationNodeStateMachineTransition_y2ivb"), "basic_zombie_walk", "basic_zombie_eat", SubResource("AnimationNodeStateMachineTransition_7d3k4"), "basic_zombie_eat", "basic_zombie_walk", SubResource("AnimationNodeStateMachineTransition_kk4wi")] +graph_offset = Vector2(13, 26) diff --git a/scenes/entities/Zombies/zombie.tscn b/scenes/entities/Zombies/zombie.tscn index 7322af9..776b4e2 100644 --- a/scenes/entities/Zombies/zombie.tscn +++ b/scenes/entities/Zombies/zombie.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=27 format=3 uid="uid://co11v3w8hbwgf"] +[gd_scene load_steps=19 format=3 uid="uid://co11v3w8hbwgf"] [ext_resource type="Script" uid="uid://dildme6epx8l4" path="res://scripts/components/zombies/RuntimeZombieData.cs" id="1_qq3f1"] [ext_resource type="Texture2D" uid="uid://bwdqbrnn7ygtr" path="res://assets/sprites/atlases/zombies/Зондби.png" id="2_4pdxh"] @@ -8,6 +8,7 @@ [ext_resource type="Script" uid="uid://7hdj2k14lfe4" path="res://scripts/components/zombies/ZombieMover.cs" id="4_u5syx"] [ext_resource type="AnimationLibrary" uid="uid://cuh2kyb21hmkm" path="res://resources/animations/zombies/basic_zombie.res" id="6_ckb7n"] [ext_resource type="Script" uid="uid://c3cfnrmnnuqms" path="res://addons/floatmodifiers/FloatModifiers.cs" id="7_b3p4o"] +[ext_resource type="AnimationNodeStateMachine" uid="uid://dj0blope85bg7" path="res://resources/animations/zombies/basic_zombie_tree.tres" id="8_ckb7n"] [ext_resource type="AudioStream" uid="uid://xoy5ct1t17k5" path="res://assets/audio/sfx/slap.mp3" id="8_di4dd"] [ext_resource type="Script" uid="uid://bsg4utgc0u0vo" path="res://scripts/components/zombies/AudioDamage.cs" id="9_oxd1e"] @@ -50,44 +51,6 @@ _data = { &"RESET": SubResource("Animation_qv5y7") } -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_h0rfo"] -animation = &"basic_zombie/eat" - -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_nog33"] -animation = &"basic_zombie/idle" - -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_g2uel"] -animation = &"basic_zombie/walk" - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vxhht"] -advance_mode = 2 - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_r8rju"] -advance_mode = 2 - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_y2ivb"] -advance_mode = 2 -advance_expression = "get(\"isEating\") == true" - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7d3k4"] -advance_mode = 2 -advance_expression = "get(\"isEating\") == true" - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_kk4wi"] -advance_mode = 2 -advance_expression = "get(\"isEating\") == false" - -[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_qep5j"] -states/End/position = Vector2(1183, 100) -states/basic_zombie_eat/node = SubResource("AnimationNodeAnimation_h0rfo") -states/basic_zombie_eat/position = Vector2(575, 185) -states/basic_zombie_idle/node = SubResource("AnimationNodeAnimation_nog33") -states/basic_zombie_idle/position = Vector2(366, 100) -states/basic_zombie_walk/node = SubResource("AnimationNodeAnimation_g2uel") -states/basic_zombie_walk/position = Vector2(575, 35) -transitions = ["Start", "basic_zombie_idle", SubResource("AnimationNodeStateMachineTransition_vxhht"), "basic_zombie_idle", "basic_zombie_walk", SubResource("AnimationNodeStateMachineTransition_r8rju"), "basic_zombie_idle", "basic_zombie_eat", SubResource("AnimationNodeStateMachineTransition_y2ivb"), "basic_zombie_walk", "basic_zombie_eat", SubResource("AnimationNodeStateMachineTransition_7d3k4"), "basic_zombie_eat", "basic_zombie_walk", SubResource("AnimationNodeStateMachineTransition_kk4wi")] -graph_offset = Vector2(13, 26) - [sub_resource type="Resource" id="Resource_ckb7n"] resource_local_to_scene = true script = ExtResource("7_b3p4o") @@ -133,7 +96,7 @@ libraries = { } [node name="AnimationTree" type="AnimationTree" parent="."] -tree_root = SubResource("AnimationNodeStateMachine_qep5j") +tree_root = ExtResource("8_ckb7n") advance_expression_base_node = NodePath("../Eatbox") anim_player = NodePath("../AnimationPlayer") diff --git a/scenes/entities/plants/peashooter.tscn b/scenes/entities/plants/peashooter.tscn index d39dedf..0f84ec6 100644 --- a/scenes/entities/plants/peashooter.tscn +++ b/scenes/entities/plants/peashooter.tscn @@ -60,7 +60,6 @@ resource_local_to_scene = true size = Vector2(20, 44) [node name="Peashooter" instance=ExtResource("1_pyk3o")] -_maxHP = 30 [node name="Sprite2D" parent="." index="0"] texture = ExtResource("2_14qlx") diff --git a/scenes/level components/invun_plant.tscn b/scenes/level components/invun_plant.tscn new file mode 100644 index 0000000..8ce2892 --- /dev/null +++ b/scenes/level components/invun_plant.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=3 format=3 uid="uid://ddp53j2ebnpyl"] + +[ext_resource type="PackedScene" uid="uid://b1hjjbdwf1rtc" path="res://scenes/templates/plant_template.tscn" id="1_1vb12"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_2e1tv"] +radius = 22.0227 + +[node name="InvunPlant" instance=ExtResource("1_1vb12")] +_maxHP = 12412 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" index="0"] +shape = SubResource("CircleShape2D_2e1tv") diff --git a/scenes/prototype_survival.tscn b/scenes/prototype_survival.tscn index d7922b2..e2faa5a 100644 --- a/scenes/prototype_survival.tscn +++ b/scenes/prototype_survival.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://c1335fke4thpm"] +[gd_scene load_steps=30 format=3 uid="uid://c1335fke4thpm"] [ext_resource type="Script" uid="uid://bndu1h5kgcde8" path="res://scripts/components/level/RuntimeLevelData.cs" id="1_tnxdx"] [ext_resource type="Texture2D" uid="uid://b0tb2hjum40aw" path="res://assets/sprites/background_summer.png" id="1_vafkg"] @@ -9,11 +9,161 @@ [ext_resource type="PackedScene" uid="uid://fm471x22n8kr" path="res://scenes/gui/pause_menu.tscn" id="7_3ghv7"] [ext_resource type="Script" uid="uid://cslqjdd5wq4rc" path="res://scripts/components/level/SunSpawner.cs" id="7_gnb05"] [ext_resource type="PackedScene" uid="uid://bpekho7leatr5" path="res://scenes/sun.tscn" id="8_8nyym"] +[ext_resource type="Texture2D" uid="uid://bt0slphfqhhab" path="res://assets/sprites/atlases/brain.tres" id="8_h1ksq"] [ext_resource type="Script" uid="uid://bsuw5lvnr3kol" path="res://scripts/components/level/zombe_spawners/ZombieSequencer.cs" id="9_8nyym"] +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="9_jmik4"] [ext_resource type="PackedScene" uid="uid://jm7wm08d2mi7" path="res://scenes/level components/right_boundary_marker.tscn" id="9_q2l3d"] [ext_resource type="Script" uid="uid://nkb6i7lrkl8y" path="res://scripts/components/level/zombe_spawners/SurvivalZombieSpawner.cs" id="10_1kjp6"] +[ext_resource type="Script" uid="uid://btqwxelqxheh3" path="res://scripts/components/gui/RestartButton.cs" id="10_4il7a"] [ext_resource type="PackedScene" uid="uid://plc2gus4ppds" path="res://scenes/level components/left_boundary_marker.tscn" id="10_5h8lk"] +[ext_resource type="Script" uid="uid://dpdpv2oyxdna7" path="res://scripts/components/gui/ExitButton.cs" id="11_q1dn6"] [ext_resource type="Script" uid="uid://blpu7t8tf6277" path="res://scripts/components/particles/FallFloor.cs" id="13_5h8lk"] +[ext_resource type="Script" uid="uid://c0ov2bq5er0gh" path="res://scripts/components/plants/LoseZone.cs" id="16_r81g1"] +[ext_resource type="Script" uid="uid://812ldoyxd5n5" path="res://scripts/components/level/LoseCheckbox.cs" id="17_pb02i"] + +[sub_resource type="Animation" id="Animation_h1ksq"] +resource_name = "fade" +length = 4.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Fade:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Fade/Brainz:self_modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1.6, 2.2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Fade:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.0333333), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("VBoxContainer:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0.0333333), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("VBoxContainer:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 2.96667, 4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} + +[sub_resource type="Animation" id="Animation_r81g1"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Fade:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Fade/Brainz:self_modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Fade:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("VBoxContainer:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("VBoxContainer:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_pb02i"] +_data = { +&"RESET": SubResource("Animation_r81g1"), +&"fade": SubResource("Animation_h1ksq") +} + +[sub_resource type="AtlasTexture" id="AtlasTexture_tsy2s"] +atlas = ExtResource("9_jmik4") +region = Rect2(255, 221, 118, 20) + +[sub_resource type="AtlasTexture" id="AtlasTexture_63iib"] +atlas = ExtResource("9_jmik4") +region = Rect2(194, 221, 61, 20) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_pb02i"] +size = Vector2(244, 399) [sub_resource type="Curve" id="Curve_1kjp6"] _limits = [0.0, 5.0, 0.0, 2000.0] @@ -22,6 +172,9 @@ point_count = 6 [sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_3ghv7"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_r81g1"] +size = Vector2(282, 399) + [node name="PrototypeSurvival" type="Node2D"] [node name="Data" type="Node" parent="."] @@ -82,6 +235,71 @@ metadata/_edit_lock_ = true [node name="PauseMenu" parent="GUI" instance=ExtResource("7_3ghv7")] visible = false +[node name="GameOverScreen" type="CanvasLayer" parent="."] +process_mode = 3 +layer = 11 + +[node name="Fade" type="ColorRect" parent="GameOverScreen"] +visible = false +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="Brainz" type="TextureRect" parent="GameOverScreen/Fade"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 141.0 +offset_top = 146.0 +offset_right = -143.0 +offset_bottom = -137.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("8_h1ksq") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="GameOverScreen"] +libraries = { +&"": SubResource("AnimationLibrary_pb02i") +} + +[node name="VBoxContainer" type="VBoxContainer" parent="GameOverScreen"] +visible = false +offset_left = 230.0 +offset_top = 273.0 +offset_right = 372.0 +offset_bottom = 365.0 + +[node name="RestartButton" type="Button" parent="GameOverScreen/VBoxContainer"] +layout_mode = 2 +icon = SubResource("AtlasTexture_tsy2s") +icon_alignment = 1 +script = ExtResource("10_4il7a") + +[node name="ExitButton" type="Button" parent="GameOverScreen/VBoxContainer"] +layout_mode = 2 +icon = SubResource("AtlasTexture_63iib") +icon_alignment = 1 +script = ExtResource("11_q1dn6") + +[node name="GameOverZombie" type="CanvasLayer" parent="."] +process_mode = 3 +layer = 12 +follow_viewport_enabled = true + +[node name="LoseZone" type="Node2D" parent="GameOverZombie"] +script = ExtResource("16_r81g1") + +[node name="Hitbox" type="Area2D" parent="GameOverZombie/LoseZone"] +collision_layer = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="GameOverZombie/LoseZone/Hitbox"] +position = Vector2(122, 199.5) +shape = SubResource("RectangleShape2D_pb02i") + [node name="SunSpawner" type="Node" parent="."] script = ExtResource("7_gnb05") SunScene = ExtResource("8_8nyym") @@ -164,9 +382,15 @@ collision_mask = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Lines/Floor5"] shape = SubResource("WorldBoundaryShape2D_3ghv7") -[node name="Marker2D" type="Marker2D" parent="."] -position = Vector2(191, 5) -gizmo_extents = 601.6 +[node name="Checkbox" type="Area2D" parent="." node_paths=PackedStringArray("gameOverLayer", "fadeAnimation")] +collision_mask = 24 +script = ExtResource("17_pb02i") +gameOverLayer = NodePath("../GameOverZombie") +fadeAnimation = NodePath("../GameOverScreen/AnimationPlayer") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkbox"] +position = Vector2(141, 199.5) +shape = SubResource("RectangleShape2D_r81g1") [connection signal="timeout" from="SunSpawner/Timer" to="SunSpawner" method="Spawn"] [connection signal="timeout" from="ZombieSequencer/Timer" to="ZombieSequencer" method="FormSquad"] diff --git a/scripts/components/gui/ExitButton.cs b/scripts/components/gui/ExitButton.cs new file mode 100644 index 0000000..05c1351 --- /dev/null +++ b/scripts/components/gui/ExitButton.cs @@ -0,0 +1,10 @@ +using Godot; +using System; + +public partial class ExitButton : Button +{ + public override void _Pressed() + { + GetTree().Quit(); + } +} diff --git a/scripts/components/gui/ExitButton.cs.uid b/scripts/components/gui/ExitButton.cs.uid new file mode 100644 index 0000000..1b08775 --- /dev/null +++ b/scripts/components/gui/ExitButton.cs.uid @@ -0,0 +1 @@ +uid://dpdpv2oyxdna7 diff --git a/scripts/components/gui/PauseMenu.cs b/scripts/components/gui/PauseMenu.cs index 75fa61f..66baca1 100644 --- a/scripts/components/gui/PauseMenu.cs +++ b/scripts/components/gui/PauseMenu.cs @@ -21,8 +21,7 @@ public partial class PauseMenu : Control } public void Exit() { - GetNode("Audio").Play(); - GetNode("Audio").Finished += () => { GetTree().Quit(); }; + GetTree().Quit(); } public static void Pause() { diff --git a/scripts/components/gui/RestartButton.cs b/scripts/components/gui/RestartButton.cs new file mode 100644 index 0000000..53bc70e --- /dev/null +++ b/scripts/components/gui/RestartButton.cs @@ -0,0 +1,12 @@ +using Godot; +using System; + +public partial class RestartButton : Button +{ + public override void _Pressed() + { + GetTree().Paused = false; + GetTree().ReloadCurrentScene(); + } + +} diff --git a/scripts/components/gui/RestartButton.cs.uid b/scripts/components/gui/RestartButton.cs.uid new file mode 100644 index 0000000..062cc44 --- /dev/null +++ b/scripts/components/gui/RestartButton.cs.uid @@ -0,0 +1 @@ +uid://btqwxelqxheh3 diff --git a/scripts/components/level/LoseCheckbox.cs b/scripts/components/level/LoseCheckbox.cs new file mode 100644 index 0000000..2ff8516 --- /dev/null +++ b/scripts/components/level/LoseCheckbox.cs @@ -0,0 +1,31 @@ +using Godot; +using Newlon.Components.Zombies; + +namespace Newlon.Components.Level; + +public partial class LoseCheckbox : Area2D +{ + [Export] private CanvasLayer gameOverLayer; + [Export] private AnimationPlayer fadeAnimation; + public override void _Ready() + { + AreaEntered += OnAreaEntered; + } + + private void OnAreaEntered(Area2D area) + { + var parent = area.GetParent(); + if (parent != null && parent is RuntimeZombieData zombieData) + { + Engine.TimeScale = 1.0; + fadeAnimation.Play("fade"); + GetTree().Paused = true; + PhysicsServer2D.SetActive(true); + Callable.From(()=> + { + zombieData.Reparent(gameOverLayer); + }).CallDeferred(); + + } + } +} diff --git a/scripts/components/level/LoseCheckbox.cs.uid b/scripts/components/level/LoseCheckbox.cs.uid new file mode 100644 index 0000000..c9602d7 --- /dev/null +++ b/scripts/components/level/LoseCheckbox.cs.uid @@ -0,0 +1 @@ +uid://812ldoyxd5n5 diff --git a/scripts/components/plants/LoseZone.cs b/scripts/components/plants/LoseZone.cs new file mode 100644 index 0000000..53e71fa --- /dev/null +++ b/scripts/components/plants/LoseZone.cs @@ -0,0 +1,17 @@ +using Godot; + +namespace Newlon.Components.Plants; + +public partial class LoseZone : RuntimePlantData +{ + public override void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL) + { + + } + + public override void Kill() + { + + } + +} diff --git a/scripts/components/plants/LoseZone.cs.uid b/scripts/components/plants/LoseZone.cs.uid new file mode 100644 index 0000000..a185f15 --- /dev/null +++ b/scripts/components/plants/LoseZone.cs.uid @@ -0,0 +1 @@ +uid://c0ov2bq5er0gh diff --git a/scripts/components/plants/RuntimePlantData.cs b/scripts/components/plants/RuntimePlantData.cs index 0251fca..1bce80d 100644 --- a/scripts/components/plants/RuntimePlantData.cs +++ b/scripts/components/plants/RuntimePlantData.cs @@ -25,7 +25,7 @@ public partial class RuntimePlantData : Node2D, IEntity _hp = _maxHP; } - public void Heal(int amount, Node origin) + public virtual void Heal(int amount, Node origin) { _hp += amount; @@ -37,7 +37,7 @@ public partial class RuntimePlantData : Node2D, IEntity } } - public void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL) + public virtual void TakeDamage(int amount, Node origin, Utility.DamageTypes damageType = Utility.DamageTypes.PHYSICAL) { _hp -= amount; @@ -48,18 +48,18 @@ public partial class RuntimePlantData : Node2D, IEntity Kill(); } } - public void Kill() + public virtual void Kill() { PoolContainer.Instance.EntityField[Resource.Layer].Remove(GlobalPosition); QueueFree(); } - public void DisableBrain() + public virtual void DisableBrain() { GetNode("Behaviour").ProcessMode = ProcessModeEnum.Disabled; } - public void EnableBrain() + public virtual void EnableBrain() { GetNode("Behaviour").ProcessMode = ProcessModeEnum.Inherit; }