From ecfeb2f7641c7d94326957d7d7b6489d76986a30 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Mon, 17 Jul 2023 20:03:38 -0700 Subject: [PATCH] shungite spike state --- Assets/Sprites/Misc/mini-shungite.png.import | 34 +++++++++++++++++ Assets/Sprites/Misc/shungite-spike.ase | Bin 0 -> 838 bytes Assets/Sprites/Misc/shungite-spike.png | Bin 0 -> 458 bytes Assets/Sprites/Misc/shungite-spike.png.import | 34 +++++++++++++++++ State/NPC/Doc/DocAttackState.cs | 31 +++++++++------ State/NPC/Doc/DocShungiteSpikeState.cs | 36 ++++++++++++++++++ 6 files changed, 124 insertions(+), 11 deletions(-) create mode 100644 Assets/Sprites/Misc/mini-shungite.png.import create mode 100644 Assets/Sprites/Misc/shungite-spike.ase create mode 100644 Assets/Sprites/Misc/shungite-spike.png create mode 100644 Assets/Sprites/Misc/shungite-spike.png.import create mode 100644 State/NPC/Doc/DocShungiteSpikeState.cs diff --git a/Assets/Sprites/Misc/mini-shungite.png.import b/Assets/Sprites/Misc/mini-shungite.png.import new file mode 100644 index 0000000..6aeb4a9 --- /dev/null +++ b/Assets/Sprites/Misc/mini-shungite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://debqunpkdemj2" +path="res://.godot/imported/mini-shungite.png-01bdbec41fe54ed8fc826d4314ec257e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Misc/mini-shungite.png" +dest_files=["res://.godot/imported/mini-shungite.png-01bdbec41fe54ed8fc826d4314ec257e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Sprites/Misc/shungite-spike.ase b/Assets/Sprites/Misc/shungite-spike.ase new file mode 100644 index 0000000000000000000000000000000000000000..2d0291901d2e4ad1f3ee17b8ac9e8bb8f48f61a4 GIT binary patch literal 838 zcmcJN?MqWp0Edq@QTt$i&{Rmh#>7Y++N5bMX;>z1HaDWJB5{%VNim15te}O&(nX}E zP*GSdC)Jli=*>}N77}UZOIVuV2dyxQ1Y0HRxkXBUK<9EF&b{2r`8~gL@|OrP;RzBF zSC|MALhR*U9ID0Xf0^|J3-SGnVqsMk5#pr3tET_6W{i{_5F&Y93DlM}K;!9q(C&K$ zua3Qeaq4uKyj=zJkFS9>?Rn7KYlZ!zXJApP{Jyq82X8to@L{tZj&wG|siE62Yefny zO-q9=eJb=hWR72y|C)YO1(nhAH@f&tSfiA)c``C!pG6BtPvpXc_#C(~#RO~D9)_25 z-LS{h3g6XvVEED~7#WoaqvKaWNu_}~g~iZP?SRhK7U=D~1)ugkhaYF&2b$?eA@7=s zZYYLUsDwT!gC?kf4k!S7)bU0dV{~yv6iXEGLk=^va6$+hRPaCo1LBjN;G`xpc?nBW zVv>=7q$3)+2$d*jk~mfigRml07;J~is-?^!9zrDX`=|xj{68as<9G1F*~T3ailnej zIff^L^TzDnm9A?|9hW|Rwia$vZuXno9;nr`$AT+e4K_>U^oHf0i1M~sg?0Zx_(bg1 z@*}!$RTTwSitFq4nC^7vUKh4@ebRvHS&Qj_!rh@sx6jYLHNO^XI}g$Y}#Gl=v#equCy#>U-#tB*IwnR Z7;Dk}t}dt6tns^kI%|fPg^cL(egUtx3(Eii literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Misc/shungite-spike.png b/Assets/Sprites/Misc/shungite-spike.png new file mode 100644 index 0000000000000000000000000000000000000000..7b0591a8779c9f6f279a99b50ce9a2648f6c6e22 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyT>(BJuHp(7s#b9}aozs?yNdT+ zUUK)gq_M7Qn4VjcQR#B$6{jLD+?wdCZB*sqxVAj}z?9!#!9&%A#7QkpYV8|W&%k|4iehX161py?k#9z5vj;uvDl zJ9SbZ-w_247t1qCX8xXEAQ}*mG3)8_-p>t;q9+}HcCc({eZ1v5>m4gAN$Y+Ng)ZNQ ztQK{L^aNEV14h3Cjf%dqi7wig88jN4#f2Xzew%5T$gCQ2e)6lEtaGJV<_WHM`1D|Z zYP+VK!rL!b)%BO~P1<$C=eXG^j&(0({AC}WkQG_&seRft!%OkWJyrd?+y&JqShhvx zE116d6_O*S`C2rx$i2Yx-AaLfc46O(;!lfTI%t`0c$N2)dZKUrlzvBNk-SiIpl297 MUHx3vIVCg!04dhY0RR91 literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Misc/shungite-spike.png.import b/Assets/Sprites/Misc/shungite-spike.png.import new file mode 100644 index 0000000..2fd120b --- /dev/null +++ b/Assets/Sprites/Misc/shungite-spike.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvx2b0y6dup53" +path="res://.godot/imported/shungite-spike.png-3c88db04670aa56f0aed81fe7332990b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Misc/shungite-spike.png" +dest_files=["res://.godot/imported/shungite-spike.png-3c88db04670aa56f0aed81fe7332990b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/State/NPC/Doc/DocAttackState.cs b/State/NPC/Doc/DocAttackState.cs index d4ee473..fdae8a3 100644 --- a/State/NPC/Doc/DocAttackState.cs +++ b/State/NPC/Doc/DocAttackState.cs @@ -1,5 +1,6 @@ using Godot; using GodotUtilities; +using SupaLidlGame.Entities; namespace SupaLidlGame.State.NPC.Doc; @@ -39,9 +40,11 @@ public partial class DocAttackState : NPCState } - protected virtual void SpawnProjectile(Vector2 position, Vector2 direction) + protected virtual Projectile SpawnProjectile( + Vector2 position, + Vector2 direction) { - var projectile = _map.SpawnEntity(Projectile); + var projectile = _map.SpawnEntity(Projectile); projectile.Hitbox.Faction = NPC.Faction; // global position is (from npc to player) * 2 = (2 * npc) - player //projectile.GlobalPosition = 2 * NPC.GlobalPosition - playerPos; @@ -49,6 +52,20 @@ public partial class DocAttackState : NPCState projectile.Direction = direction; projectile.GlobalRotation = direction.Angle(); projectile.Delay = 1 / _intensity; + return projectile; + } + + protected virtual void Attack() + { + var player = _world.CurrentPlayer; + var playerPos = player.GlobalPosition; + Vector2 position1 = 2 * NPC.GlobalPosition - playerPos; + Vector2 position2 = 2 * playerPos - NPC.GlobalPosition; + Vector2 direction1 = position1.DirectionTo(playerPos); + Vector2 direction2 = -direction1; + SpawnProjectile(position1, direction1); + SpawnProjectile(position2, direction2); + _currentAttackDuration = AttackDuration / _intensity; } public override NPCState Process(double delta) @@ -70,15 +87,7 @@ public partial class DocAttackState : NPCState if ((_currentAttackDuration -= delta) <= 0) { - var player = _world.CurrentPlayer; - var playerPos = player.GlobalPosition; - Vector2 position1 = 2 * NPC.GlobalPosition - playerPos; - Vector2 position2 = 2 * playerPos - NPC.GlobalPosition; - Vector2 direction1 = position1.DirectionTo(playerPos); - Vector2 direction2 = -direction1; - SpawnProjectile(position1, direction1); - SpawnProjectile(position2, direction2); - _currentAttackDuration = AttackDuration / _intensity; + Attack(); } return null; diff --git a/State/NPC/Doc/DocShungiteSpikeState.cs b/State/NPC/Doc/DocShungiteSpikeState.cs new file mode 100644 index 0000000..2b23149 --- /dev/null +++ b/State/NPC/Doc/DocShungiteSpikeState.cs @@ -0,0 +1,36 @@ +using Godot; +using GodotUtilities; +using SupaLidlGame.Entities; + +namespace SupaLidlGame.State.NPC.Doc; + +public partial class DocShungiteSpikeState : DocAttackState +{ + private float _intensity = 1; + + protected override Projectile SpawnProjectile( + Vector2 position, + Vector2 direction) + { + var projectile = base.SpawnProjectile(position, direction); + projectile.Delay = 4; + return projectile; + } + + protected override void Attack() + { + var player = _world.CurrentPlayer; + var playerPos = player.GlobalPosition; + Vector2 left = playerPos + Vector2.Left * 64; + Vector2 right = playerPos + Vector2.Right * 64; + Vector2 up = playerPos + Vector2.Up * 64; + Vector2 down = playerPos + Vector2.Down * 64; + SpawnProjectile(left, Vector2.Zero); + SpawnProjectile(right, Vector2.Zero); + SpawnProjectile(up, Vector2.Zero); + SpawnProjectile(down, Vector2.Zero); + + // only attack once and stop (but keep in this state for 8 seconds) + _currentAttackDuration = float.PositiveInfinity; + } +}