From 2e3226b5c1ea6f4d3740c45ac6f995866ff649b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=91=D0=B4=D0=BE=D1=80=20=D0=92=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2?= Date: Mon, 7 Oct 2024 18:18:59 +0500 Subject: [PATCH] Garlic --- assets/sprites/atlases/plants/garlic.png | Bin 12236 -> 5162 bytes assets/sprites/plants/garlic.tres | 7 ++ resources/animations/plants/garlic.res | Bin 0 -> 631 bytes resources/effects/GarlicEffect.tres | 8 ++ resources/effects/SnowSlow.tres | 2 +- resources/plants/Garlic.tres | 14 +++ scenes/debug_lvl.tscn | 8 +- scenes/entities/plants/garlic.tscn | 82 ++++++++++++++++++ scenes/projectiles/snowpea_projectile.tscn | 4 +- scripts/Utility.cs | 4 +- scripts/components/plants/ReturnEffect.cs | 19 ++++ scripts/components/zombies/EatBox.cs | 3 +- .../components/zombies/RuntimeZombieData.cs | 2 + scripts/systems/effects/GarlicEffect.cs | 57 ++++++++++++ 14 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 assets/sprites/plants/garlic.tres create mode 100644 resources/animations/plants/garlic.res create mode 100644 resources/effects/GarlicEffect.tres create mode 100644 resources/plants/Garlic.tres create mode 100644 scenes/entities/plants/garlic.tscn create mode 100644 scripts/components/plants/ReturnEffect.cs create mode 100644 scripts/systems/effects/GarlicEffect.cs diff --git a/assets/sprites/atlases/plants/garlic.png b/assets/sprites/atlases/plants/garlic.png index 66cd4cc5876598672e55c6b19abf506004c3457c..97fb0344764811d1ee8a23f058909094e6079f38 100644 GIT binary patch literal 5162 zcmbVPXH-+o)(#pWqF_+4fPp|L%2k>m7-|BhASDD4L#p@>os~0Z&Ypc{&+K`gXNM4UupI2X>>v<`1CP@n zf

9fOZLl75M+W;b9EiSe%GhH0V?3bnnkRT0kd4i9oyugLn?mzLD_$;TO~{uf_fTQ8ozb%NDyPWk3lKa zLp7WrEh14!n^&H`%I=Xl;o!S+&DC|?hXoTQQaYMnaU(H)Xoh$Un8W}0J-c7)`+0s# z_X5eD4fM5Em+`~zCLF@@s8^?7@{#M8t_1J$$c;i#>5-vn+jgNSBuJK)G2%vTNs;Ub zKjpgpvmvL^)$+*daX5OImkjzDxdjS|V_e!_FHS9mcYC?&I*m)3O8XaFx`=1#_^GU> zB_@KWO{hgUyKKI$`7_xSx3Y|nXq;*pUh}pOI0F{U#z2#q;<0r_y!Ge^Op3ix`0J*~ zyRsMk3o6l<@GQ3FZyWnp5+z>JP&Re68P<@#1bEcV@^P?vzN>H+3^mUHVi5(gNt)&< z52RBKAQxhPE)Tcj*UO5r2DYc`pct|sCG~VVclTXzGpuJ8{zQ|@lK&VukE;$R9t8)d zUI*iV6;V*A5VPukbY7M{s(Y3i#f^a;BQ~)7rIVnWaUsV-AZQ`)6qi4=rc@cilFu^P zxiV~YeMl>Kuq|%X0fGh%8X(n{z6Z0PuIhbT5;s?>I9)t`s8e(-ZJF~m{F#bBG}CMX zRHzI7EI1*PC?9O15^rj`-rHqk^l|=i#+MGx7jR+7q8c>0gZ)IX)z==|CdNyRIhtpO z>y{8LWo=@gdFbWk^(3#UMxut%r~y4oCY`(rag?87hi?6*rT%Je<>W1{*tifZMz0(VslSs3wDVeS{IY})j z1_9Y;zY2LF95Nole}Nw#|LKff@SjK4EoWc42S~lz-I7MlPgV7I;i2_cuhHF*_mHfiGBsBj#t{%*b{w7Pxo z_6c*o#o))|mHl$#WB=lLX$Ku%gmJP3W=xfFku7YxtVi@y^nk$S*r(sRv$r{azTK%^ z52MnP@<_rb%wtU^tsMdg5fXo|c6DWsc*j(wtjP&2DN$25DUc3Jf~L=kpDq6Ki$QGp ztX&du&mu^#h@Tps@FQWZ;sb2qxl2h|`!jVaB9Fi**gjon8~UC%5B(M~k~w4e8WPF4 zq9_D@rFr>9#W;&;39U7muGllb(9kF&fX<>Nc-%m_IXL7SKsCD&q20Y*&YRQG;o$;# z?>0QjyH-gn>B%c0eBcokp)EO~+$zqGnP|itrKLuPTZ%oat1XROmF5!arHUE?*z}}6 zE*`SsJ=Tf8Z4SLyllF@joJVd7olXPB^hM66Q==9NW{t#b;t2_?cS~rlfdp(YYJPG5 z^|=e=K9;EHZSmY94q^Ksn?H7N+k7B#u9;wm;HjJ+zvMj#d>cK6*IW?jY^_>`G77q0 zaO*iETmOc}wV8zuNY^4m_Dfvf(YFMnkbXikz%dX`f05d;mQIS%3$Nqjx0h%AXzE*NFa9+ zQ=cKG%7dkqakG8jVeQEW;R31yGc#KesWe*tfRBo*YWRM2MWZyoF8i3WTof|7=Dtu@ z+80BxIn^X{YEv%d+0l~Kb2UHPeBQL|#Y7;SqVJAlQ8kJWuYN$<+5Kq!B)C`|9R^Gx zj01i3&;ZwMlKD96DhYHu%`{N%ef4N%rF+$m?+pX_*NCnUD-#n&Sy-l?muwi6;b0>b zKd`Z(h~Ktu&dyfLp!}7cdHjlauf-P^^+MgBX{4H_CSbXl0tdgEM)g%x_%INX2FWCX zon)fT?##$6=lmG_z;&vW?-jRl(4vH*ipo8?;F8Ff_oAcwH<4NyGXq@xRzvyma*&Rd z3X}rBuJ}o3h9w53W*Vr2d!N{`mtPsTu(LBZ+@i5tgz1fG@1uGK_I~@OTuj`)*ly*Fow6TKrIkqXk`jm2>QPEFE z`YD*YHVTbze6MFk!8*{e|G`NA{d(dE&-V|kmRDY|f@H_VNcL)cP%@~%DuZ#MK=H@l zT{R;uJI0YQ%xAxEKIPJcf#N25ZND^6cSp}Q1y*_enlzkJEIG0�uJSph3S{JpDAZ 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 diff --git a/assets/sprites/plants/garlic.tres b/assets/sprites/plants/garlic.tres new file mode 100644 index 0000000..af97d2a --- /dev/null +++ b/assets/sprites/plants/garlic.tres @@ -0,0 +1,7 @@ +[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://m8e84blnx7yu"] + +[ext_resource type="Texture2D" uid="uid://dvldjlg0nr355" path="res://assets/sprites/atlases/atlas1.png" id="1_el55x"] + +[resource] +atlas = ExtResource("1_el55x") +region = Rect2(356, 16, 39, 41) diff --git a/resources/animations/plants/garlic.res b/resources/animations/plants/garlic.res new file mode 100644 index 0000000000000000000000000000000000000000..949d51c9209b7d94e4adafe6469a31298f50eb74 GIT binary patch literal 631 zcmV--0*L)mQ$s@n000005C8xo2LJ$H0ssIgwJ-f(A_lDz0M?gNK0u9<4kKQ;GmfGd zX3BxpJBRS{1kk@Gax(6{IUARtCdn@2cF|(A5^O3wQlRhc)n)vN&06sn@E_lf`CFTYPLAQ*kc;_xMiAn+YM?j%CUJ3JMlNB+&2y1c`H4S>r0e z=vpTSBmBqw5Agr;f8r0UrQ^*Ap|H1gr;d6OG zbC308&4&8qn!4s%A_^u-oH4)$4K5x&wHP8<9Q;CSAcw6bqODO9NJ>a76^{>$fsO(M zI5sdE&(i@ifgqEosz#*5hjC$1@ob(-1GY7i)TMGc@JW%`;3iaVkgAjUKT=hl5s<2b z;BzO}AOAB1yd!$3vB4>t(G;YTVGe)-8KR={5+D^Bl{D~(dwa(0kk~(x6p%gGMYmlBFmsLFI?6ze0SaWp1{;8f%(|7YFe0YGM zmpJI&bJ%c)`l~!DIZY--d)>D-r)?2eaqckt+S)RfW#LnRECbED4>(8kdZRgLsxVPv z2w~Tm3-3t`Aea&UBGHHm=40FifbR{R@KH%X2e`F{34r%yQJDYl-oLMyUGLqhJz)n) RA%i4H04Y_caspCQLqmA~BTN7Q literal 0 HcmV?d00001 diff --git a/resources/effects/GarlicEffect.tres b/resources/effects/GarlicEffect.tres new file mode 100644 index 0000000..60edc9c --- /dev/null +++ b/resources/effects/GarlicEffect.tres @@ -0,0 +1,8 @@ +[gd_resource type="Resource" load_steps=2 format=3 uid="uid://dsg1vjx76ifgu"] + +[ext_resource type="Script" path="res://scripts/systems/effects/GarlicEffect.cs" id="1_rfumy"] + +[resource] +script = ExtResource("1_rfumy") +Duration = 0.25 +Slot = 3 diff --git a/resources/effects/SnowSlow.tres b/resources/effects/SnowSlow.tres index 59111f0..5851046 100644 --- a/resources/effects/SnowSlow.tres +++ b/resources/effects/SnowSlow.tres @@ -7,4 +7,4 @@ script = ExtResource("1_8md01") ColorOverride = Color(0, 1, 1, 1) Multiplier = 0.75 Duration = 3.25 -Slot = 2 +Slot = 0 diff --git a/resources/plants/Garlic.tres b/resources/plants/Garlic.tres new file mode 100644 index 0000000..87cee87 --- /dev/null +++ b/resources/plants/Garlic.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" script_class="PlantResource" load_steps=4 format=3 uid="uid://btkkaow4tyw55"] + +[ext_resource type="Texture2D" uid="uid://m8e84blnx7yu" path="res://assets/sprites/plants/garlic.tres" id="1_datic"] +[ext_resource type="Script" path="res://scripts/resources/PlantResource.cs" id="1_e15gf"] +[ext_resource type="PackedScene" uid="uid://bes4e6sksax67" path="res://scenes/entities/plants/garlic.tscn" id="2_81n0p"] + +[resource] +script = ExtResource("1_e15gf") +Cost = 50 +Scene = ExtResource("2_81n0p") +ReloadTime = 7.5 +ReloadProgress = 0.67 +Preview = ExtResource("1_datic") +Layer = 1 diff --git a/scenes/debug_lvl.tscn b/scenes/debug_lvl.tscn index b600621..44f0aff 100644 --- a/scenes/debug_lvl.tscn +++ b/scenes/debug_lvl.tscn @@ -50,19 +50,19 @@ wait_time = 5.0 autostart = true [node name="Zombie" parent="." instance=ExtResource("9_vwrdf")] -position = Vector2(806, 254) +position = Vector2(806, 134) _line = 3 [node name="Zombie2" parent="." instance=ExtResource("9_vwrdf")] -position = Vector2(824, 254) +position = Vector2(824, 134) _line = 3 [node name="Zombie3" parent="." instance=ExtResource("9_vwrdf")] -position = Vector2(779, 254) +position = Vector2(779, 134) _line = 3 [node name="Zombie4" parent="." instance=ExtResource("9_vwrdf")] -position = Vector2(848, 254) +position = Vector2(848, 134) _line = 3 [node name="Zombie5" parent="." instance=ExtResource("9_vwrdf")] diff --git a/scenes/entities/plants/garlic.tscn b/scenes/entities/plants/garlic.tscn new file mode 100644 index 0000000..e8a2d5b --- /dev/null +++ b/scenes/entities/plants/garlic.tscn @@ -0,0 +1,82 @@ +[gd_scene load_steps=14 format=3 uid="uid://bes4e6sksax67"] + +[ext_resource type="PackedScene" uid="uid://b1hjjbdwf1rtc" path="res://scenes/templates/plant_template.tscn" id="1_5i0e6"] +[ext_resource type="Texture2D" uid="uid://dff73m8ahamaa" path="res://assets/sprites/atlases/plants/garlic.png" id="2_w2jbi"] +[ext_resource type="AnimationLibrary" uid="uid://cjl81f61gdlvi" path="res://resources/animations/plants/garlic.res" id="3_jkb3q"] +[ext_resource type="Script" path="res://scripts/components/plants/behaviours/HpBasedBehaviour.cs" id="4_bv44h"] +[ext_resource type="Script" path="res://scripts/components/plants/ReturnEffect.cs" id="5_oob20"] +[ext_resource type="Resource" uid="uid://dsg1vjx76ifgu" path="res://resources/effects/GarlicEffect.tres" id="6_gho1l"] + +[sub_resource type="Animation" id="Animation_k0cex"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_v4l78"] +_data = { +"RESET": SubResource("Animation_k0cex") +} + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_mdv0r"] +animation = &"garlic/full_hp" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_j5xqj"] +animation = &"garlic/half_hp" + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_tlgpl"] +animation = &"garlic/low_hp" + +[sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_8mvpm"] +blend_point_0/node = SubResource("AnimationNodeAnimation_mdv0r") +blend_point_0/pos = 1.0 +blend_point_1/node = SubResource("AnimationNodeAnimation_j5xqj") +blend_point_1/pos = 0.7 +blend_point_2/node = SubResource("AnimationNodeAnimation_tlgpl") +blend_point_2/pos = 0.3 +min_space = 0.0 +blend_mode = 1 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_thlvs"] +size = Vector2(32, 29) + +[node name="Garlic" instance=ExtResource("1_5i0e6")] +_maxHP = 600 + +[node name="Sprite2D" parent="." index="0"] +texture = ExtResource("2_w2jbi") +hframes = 8 +vframes = 3 + +[node name="AnimationPlayer" parent="." index="1"] +libraries = { +"": SubResource("AnimationLibrary_v4l78"), +"garlic": ExtResource("3_jkb3q") +} + +[node name="AnimationTree" parent="." index="2"] +tree_root = SubResource("AnimationNodeBlendSpace1D_8mvpm") +parameters/blend_position = 1.0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox" index="0"] +position = Vector2(1, 11.5) +shape = SubResource("RectangleShape2D_thlvs") + +[node name="Behaviour" type="Node" parent="." index="4"] +script = ExtResource("4_bv44h") + +[node name="ReturnEffect" type="Node" parent="." index="5"] +script = ExtResource("5_oob20") +_effectToReturn = ExtResource("6_gho1l") + +[connection signal="OnHPChanged" from="." to="Behaviour" method="OnHPChanged"] +[connection signal="OnHPChanged" from="." to="ReturnEffect" method="OnDamageRecieved"] diff --git a/scenes/projectiles/snowpea_projectile.tscn b/scenes/projectiles/snowpea_projectile.tscn index bd0187a..b141c84 100644 --- a/scenes/projectiles/snowpea_projectile.tscn +++ b/scenes/projectiles/snowpea_projectile.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=3 uid="uid://domeukw4ucmyr"] [ext_resource type="Script" path="res://scripts/components/LinearProjectile.cs" id="1_fkydi"] -[ext_resource type="Resource" uid="uid://7uj0oe656jfx" path="res://resources/effects/SnowSlow.tres" id="2_txupr"] +[ext_resource type="Resource" uid="uid://7uj0oe656jfx" path="res://resources/effects/SnowSlow.tres" id="2_fn62x"] [ext_resource type="Texture2D" uid="uid://dn4l67snkx5mr" path="res://assets/sprites/plants/snowpea_projectile.tres" id="2_xt8td"] [sub_resource type="CircleShape2D" id="CircleShape2D_ix1sk"] @@ -13,7 +13,7 @@ collision_mask = 8 script = ExtResource("1_fkydi") _speed = 3.0 _damage = 10 -_impactEffect = ExtResource("2_txupr") +_impactEffect = ExtResource("2_fn62x") _damageType = 1 [node name="Sprite" type="Sprite2D" parent="."] diff --git a/scripts/Utility.cs b/scripts/Utility.cs index ba2e1d2..7de042a 100644 --- a/scripts/Utility.cs +++ b/scripts/Utility.cs @@ -14,13 +14,13 @@ public class Utility // #region Enums - public enum EffectSlots {FREEZE, STUN, POISON, BEBRA}; + public enum EffectSlots {FREEZE, STUN, POISON, GARLIC}; public enum DamageTypes {PHYSICAL, ICE}; #endregion - public const int EffectSlotCount = 3; + public const int EffectSlotCount = 4; public const int LineCount = 5; public const int TileWidth = 50; public const int TileHeight = 60; diff --git a/scripts/components/plants/ReturnEffect.cs b/scripts/components/plants/ReturnEffect.cs new file mode 100644 index 0000000..149e8b5 --- /dev/null +++ b/scripts/components/plants/ReturnEffect.cs @@ -0,0 +1,19 @@ +using Godot; +using Newlon.Components.Zombies; +using Newlon.Systems.Effects; + +namespace Newlon.Components.Plants; + +public partial class ReturnEffect : Node +{ + [Export] + private Effect _effectToReturn; + + public void OnDamageRecieved(int delta,Node origin) + { + if (origin is RuntimeZombieData zombie) + { + zombie.GiveEffect(_effectToReturn); + } + } +} diff --git a/scripts/components/zombies/EatBox.cs b/scripts/components/zombies/EatBox.cs index 79b2604..6645255 100644 --- a/scripts/components/zombies/EatBox.cs +++ b/scripts/components/zombies/EatBox.cs @@ -15,7 +15,8 @@ public partial class EatBox : Area2D public void Bite() { - plant?.TakeDamage(_damage,GetParent()); + if (GetParent().AbleToEat) + plant?.TakeDamage(_damage,GetParent()); } public void OnAreaEntered(Area2D area) diff --git a/scripts/components/zombies/RuntimeZombieData.cs b/scripts/components/zombies/RuntimeZombieData.cs index d4da31d..17893f6 100644 --- a/scripts/components/zombies/RuntimeZombieData.cs +++ b/scripts/components/zombies/RuntimeZombieData.cs @@ -25,6 +25,8 @@ public partial class RuntimeZombieData : Node2D, IEntity, ILocalTimescale, IEffe public int Line => _line; + public bool AbleToEat = true; + public float LocalTimescale { get => _localTimescale; diff --git a/scripts/systems/effects/GarlicEffect.cs b/scripts/systems/effects/GarlicEffect.cs new file mode 100644 index 0000000..d48a60a --- /dev/null +++ b/scripts/systems/effects/GarlicEffect.cs @@ -0,0 +1,57 @@ +using Godot; +using Newlon.Components.Zombies; + +namespace Newlon.Systems.Effects; + +public partial class GarlicEffect : Effect +{ + RandomNumberGenerator RandomNumberGenerator; + + public override void Enter(Node target) + { + if(RandomNumberGenerator == null) + { + RandomNumberGenerator = new RandomNumberGenerator(); + RandomNumberGenerator.Randomize(); + } + if(target is RuntimeZombieData zombieData) + zombieData.AbleToEat = false; + //Animation call + } + + public override void Exit(Node target) + { + if(target is RuntimeZombieData zombieData) + { + int mult; + if((int)zombieData.GlobalPosition.Y/Utility.TileHeight <= 2) + { + mult = 1; + } + else if((int)zombieData.GlobalPosition.Y/Utility.TileHeight >= 6) + { + mult = -1; + } + else + { + if(RandomNumberGenerator.RandiRange(0,1) == 0) + { + mult = 1; + } + else + { + mult = -1; + } + } + var tween = zombieData.CreateTween(); + tween.TweenProperty(zombieData,"position:y",zombieData.GlobalPosition.Y + Utility.TileHeight * mult, 1.0); + tween.TweenCallback(Callable.From(() => {zombieData.AbleToEat = true;})); + } + + } + + public override void Process(Node target) + { + + } +}