From 8713898e496661fd9f1198e08c3614f325058af5 Mon Sep 17 00:00:00 2001 From: N4K Date: Wed, 16 Aug 2023 15:14:37 +0300 Subject: [PATCH 1/7] HappyNarezkaAnimations --- .../Content/animations/FlameSkullMoveRight | 1 + .../GameObjects/LivingEntities/CoreEnemy.cs | 2 +- .../LivingEntities/Monsters/FlameSkull.cs | 5 +++-- .../LivingEntities/Monsters/Frank.cs | 18 ++++++++++-------- DangerousD/GameCore/Levels/Level1.cs | 3 ++- 5 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 DangerousD/Content/animations/FlameSkullMoveRight diff --git a/DangerousD/Content/animations/FlameSkullMoveRight b/DangerousD/Content/animations/FlameSkullMoveRight new file mode 100644 index 0000000..c0c96b6 --- /dev/null +++ b/DangerousD/Content/animations/FlameSkullMoveRight @@ -0,0 +1 @@ +{"id":"FlameSkullMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":576,"Width":24,"Height":16},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs b/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs index 9c02d2b..fafc936 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs @@ -22,7 +22,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities //здесь я не понял } - public virtual void Update(GameTime gameTime) + public override void Update(GameTime gameTime) { if (monster_health <= 0) { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs index c521c2e..da492f2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs @@ -14,10 +14,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public FlameSkull(Vector2 position) : base(position) { - + Width = 62; + Height = 40; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveLeft", "FlameSkullMoveRight" }, "FlameSkullMoveRight"); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveRight" }, "FlameSkullMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs index 0434e4d..a0615f0 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs @@ -19,7 +19,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters Height = 160; GraphicsComponent.StartAnimation("FrankMoveLeft"); monster_speed = 1; - name = "Фрэнк"; + name = "Frank"; } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FrankMoveRight", "FrankMoveLeft" }, "FrankMoveRight"); @@ -39,17 +39,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { player.Death(name); } */ - - if (isGoRight) + + if (_pos.X <= 1) { + isGoRight = true; if (GraphicsComponent.GetCurrentAnimation != "FrankMoveRight") { GraphicsComponent.StartAnimation("FrankMoveRight"); velocity = new Vector2(monster_speed, 0); } } - else if (!isGoRight) + else if (_pos.X >= 500) { + isGoRight = false; if (GraphicsComponent.GetCurrentAnimation != "FrankMoveLeft") { GraphicsComponent.StartAnimation("FrankMoveLeft"); @@ -57,13 +59,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } } - if (_pos.X <= 1) + if (isGoRight) { - isGoRight = true; + _pos.X += monster_speed; } - else if (_pos.X >= 500) + else { - isGoRight = false; + _pos.X -= monster_speed; } } } diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs index 835674c..e718794 100644 --- a/DangerousD/GameCore/Levels/Level1.cs +++ b/DangerousD/GameCore/Levels/Level1.cs @@ -12,8 +12,9 @@ namespace DangerousD.GameCore.Levels { var Трава = new GrassBlock(new Vector2(0, 128)); var Death = new TestAnimationDeath(new Vector2(128, 128)); - var Zombie = new Zombie(new Vector2(256, 128)); + //var Zombie = new Zombie(new Vector2(256, 128)); var Frank = new Frank(new Vector2(384, 128)); + var FlameSkull = new FlameSkull(new Vector2(512, 128)); } } } From ff46f3694abf5f7d0d3e0156410fc298483d3e43 Mon Sep 17 00:00:00 2001 From: bmvolf Date: Wed, 16 Aug 2023 17:21:45 +0300 Subject: [PATCH 2/7] added death animation from zombie. zombie can walk between 2 points --- AnimationsFileCreator/Program.cs | 2 +- DangerousD/Content/Content.mgcb | 36 ++++++---- DangerousD/Content/animations/DeathFromZombie | 1 + .../Content/animations/ZombieLeftAttack | 2 +- .../Content/animations/ZombieRightAttack | 2 +- DangerousD/Content/deathAnimation.png | Bin 0 -> 23391 bytes DangerousD/GameCore/GameObjects/GameObject.cs | 2 +- .../LivingEntities/Monsters/Zombie.cs | 66 ++++++++++++------ .../GameObjects/LivingEntities/Player.cs | 11 ++- .../GameObjects/PlayerDeath/DeathRectangle.cs | 32 +++++++++ DangerousD/GameCore/Levels/Level1.cs | 4 +- DangerousD/GameCore/Managers/GameManager.cs | 30 ++++++-- .../GameCore/Managers/PhysicsManager.cs | 8 +-- 13 files changed, 144 insertions(+), 52 deletions(-) create mode 100644 DangerousD/Content/animations/DeathFromZombie create mode 100644 DangerousD/Content/deathAnimation.png create mode 100644 DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs diff --git a/AnimationsFileCreator/Program.cs b/AnimationsFileCreator/Program.cs index dc2bf5b..bda2baf 100644 --- a/AnimationsFileCreator/Program.cs +++ b/AnimationsFileCreator/Program.cs @@ -62,7 +62,7 @@ namespace AnimationsFileCreator container.TextureFrameInterval = 1; container.Id = id; string json = JsonConvert.SerializeObject(container); - StreamWriter writer = new StreamWriter(id); + StreamWriter writer = new StreamWriter("../../../../DangerousD/Content/animations/" + id); writer.WriteLine(json); writer.Close(); } diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index b5e65dd..ed4246e 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -13,6 +13,30 @@ #---------------------------------- Content ---------------------------------# +#begin ../../../animation1.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:../../../animation1.png;MonstersAnimations.png + +#begin deathAnimation.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:deathAnimation.png + #begin File.spritefont /importer:FontDescriptionImporter /processor:FontDescriptionProcessor @@ -34,18 +58,6 @@ /processorParam:TextureFormat=Compressed /build:Font2.spritefont -#begin MonstersAnimations.png -/importer:TextureImporter -/processor:TextureProcessor -/processorParam:ColorKeyColor=255,0,255,255 -/processorParam:ColorKeyEnabled=True -/processorParam:GenerateMipmaps=False -/processorParam:PremultiplyAlpha=True -/processorParam:ResizeToPowerOfTwo=False -/processorParam:MakeSquare=False -/processorParam:TextureFormat=Color -/build:MonstersAnimations.png - #begin PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png /importer:TextureImporter /processor:TextureProcessor diff --git a/DangerousD/Content/animations/DeathFromZombie b/DangerousD/Content/animations/DeathFromZombie new file mode 100644 index 0000000..e6174de --- /dev/null +++ b/DangerousD/Content/animations/DeathFromZombie @@ -0,0 +1 @@ +{"id":"DeathFromZombie","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":99,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/ZombieLeftAttack b/DangerousD/Content/animations/ZombieLeftAttack index 63d7675..cb1466b 100644 --- a/DangerousD/Content/animations/ZombieLeftAttack +++ b/DangerousD/Content/animations/ZombieLeftAttack @@ -1 +1 @@ -{"id":"ZombieLeftAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":126,"Y":50,"Width":50,"Height":40},"frameSecond":[{"Item1":0,"Item2":25}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"16, 0"} +{"id":"ZombieLeftAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":126,"Y":50,"Width":50,"Height":40},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"16, 0"} diff --git a/DangerousD/Content/animations/ZombieRightAttack b/DangerousD/Content/animations/ZombieRightAttack index 2a48da2..7da67ee 100644 --- a/DangerousD/Content/animations/ZombieRightAttack +++ b/DangerousD/Content/animations/ZombieRightAttack @@ -1 +1 @@ -{"id":"ZombieRightAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":126,"Y":9,"Width":50,"Height":40},"frameSecond":[{"Item1":0,"Item2":25}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"16, 0"} +{"id":"ZombieRightAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":126,"Y":9,"Width":50,"Height":40},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"16, 0"} diff --git a/DangerousD/Content/deathAnimation.png b/DangerousD/Content/deathAnimation.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb4a52db46469a9dd62b44221a64897aa802204 GIT binary patch literal 23391 zcmb5WWl)=a6zvxio3hJy9ReH?i!pxk>HdTxp~jI zckY>MGxtNjWFF5m`@i;DznyRuC21V2cUS-b07q6vQVjq=vPXRCFwhX+m}~5x0|4&< zvXWvN9$9DEHYuk}Q#A+ni}-psuPY8+LI6CiIemwZb>Fes>_C4=y{x~VO+Z$d`h5w+ z!>s=Pi$#}GB|gx6L}ObhbQeDESI+I5439N51dDL4e~UF!i;I0{99M?TbJ8@{Ilue^sQn&<(jHNRw_`8 z6&CL$ISBp~*@}u1U`MwTAYS0u8rCz0CXh?F#5KjQ+AA!OMjk=oFHPbg~dn9>}};!Tn>697O)&ZjK9QWv3rJ`^uOIS;xBwMj|z)&JLB9jP;1{_v;HG zWX^X#{VWP_R?SNqfsjZYkL0JdUQv>dnkbogX^kSMDoLs)nQpK^i6eh-E7$)VX~$vP zP4lY0{h+uU^^U1Tc>KDBwD%24hEx9IJI&o63>zxqSi({G1Dq>yfqIOXylW1N+4mmh z{_dX-m6|krlebLLV4Llh{v+14!SjLC6(ggq@}eNYyB1l<@(AZeC&9+w zbb($2y;-jdfMy|p5Zvk#k@T*-zxt6za~GV)Va~jnmNj!y2&-+ogxaArX9WqutmOH) ztFvb^@HlQ|hy9yL6^446bG+HM0e}<|Ung_qNGrT7$@MqdLmAK6!FmJq2&NU$KU0RDP6 zRx1+x>F$B{yu^_riol+R)K0X6LV0dy^$ZFvEU0DzsAPiG2<&9oCl5D{!S{9f!^4~2 zX3#d!=dnVMw827)2 zu;zAQ-Ai(T|EdzB=GC{zVl{4fvKv~(eRWUtchI%X!#!dK?XPu5z~?TBlbu!YNMkT4D4b5`O!xR9gK-Vt;@iciFG}TS5DXf!E5Xk%7mxpD z{evxBjv}ti8o1y~$&M#=T{L%!wG>_J3z^`sb)~n!@=tw?%|G0y_zs*f4;-j_I@DE@ zc;jz6ZT70A$z&ar9f-fxiP31^%+1{KYpt$FAykmYnH@4NAs-JMk=ClQ}C`o>~r%fE4VHM)1bg&cQE>R%dtaH7S=cfcOLu zBJUym9_jULXPX8J8f5*>)Z#${T4X6tLD|cacN4e{mopPAKVJ>`m?D)M)S=8?dU3CX zunOc=pEcEsdnmobTu}IX>8QMMH>-*7ocmpfrVbE$q)mJ6~xoT zI9~O@BZ+cbcc7S{wkNfYKOsY(M*PE!stty6(td?(^jNFDBhYUiDJkeomWXtT!B{$_ zZZ}%K5VUIU<42$WR9)^izi*V0!|kXOFbLJ{z&NAQw$>DG^8Zc|`$b{nCPovY0U+ZOk1tse={MNJ40NG*TN^Rl@UHoglr?6x z*WV0hS$bkaS>$L|frKYk83A>~Lj$m$fr{`jyJZpUYXcq&;sd$%Gvl|{!N4Oh=we1f z4)Vaz&-{n(tZb~;gGPJ28fFz+jvxPtD$mjWfJ|nv^O}EB8dcHIpDW~BbAHQ!>}tHg zohkw6kFWf|JlVyJcNLt`9rz+8YHIC?%)H*0J(%k2<@X`T#n2{#b#mG|-wq9&f z{fLz=1a}INs9+dX_vpa6G_$f!Hjy(@SJ@D}J9MVT;yT>;qjMmTxdEH%$($sTc2GK( z)aXtAmbV^skSGafQf{J-c`E70=b?@*l;K|ijEp-D5hWBue1CV{fJ_0MTc-A$icLbuW)eST@34>6Nv;C3B5uv88Wc2)TuATwd0#M)^9cb^Sfz3MEl9 zqPUeD!#_WNe)$Lg+pCAQa}B)S@)Ih{oiCyLcnqyoe|JmBzkof^ zs9MAxI8K5NPD0X$PnRq!ad;6Mqx7L2tSiiK`ME?DGeul|d`9-?A9i=8e~zhglxyDk zx)5TK#|7Uq`gQ%>A19AEigjSYYeofoNv`CtElF6~_mDw)RKJ;WK&tbO5$6_e4AuE$r zrzM4TP2x(G=NWdMJ>!N2ue<{=5@YdPeyK+Tq`Y1`4$$<@Eh<&XCU|6Ja%EAr?82lp66%47ZU=WxH4S7$f3>Re@=(okoDLce3H7HBH6Q_U8-2U z=qvakStrla`@j{7+4kOgQyRN4xHfsICC)###JuP#SXSlWa(`(39bkoQ&_3O^$$Z{y zVo}EpLw!eETCNDWDbh{8x%-wpG7gX6;^51-GfVA2g7t12DzYx^-du(w^g6d^yLQ{? zl;7{=OrEZ$RXiD_rUfV7-H8JvdgtOS|c z@5HFTXY>{WpP&JCTRkM;39cRXg$vADZfo@p?$_2(A@? zO4qmHR>jz^FnhJ4;rg&e>2GTHZ&B)x?vI^IW z3|g|<8E)-+_o-YPmUj6vi{JcN{g8;&swVpn>lcz8|B5K{Z=qrmLmHL zQe#9BTg!q|6c%AgD-{9n(ir?7l*BK5auTCkt?Bk*;boS0%HXHlN zKUkv+aehnIWEafL8S8P<9nf&6^;XxI;%w1MBSKE6A*C6ut@$)MWKBuO>I~M=ZA4u0 zw1?dbiGr^?tCKa%CZZWPXBNz{AL!w%NwMdxr|G4h(2i*X>uW{D5}N`4^nZ9PJVu8E zKe-%RRKe7V3j_Zc32lbgj()GJ9htW=bKb`8KM0ioA#$||9({SWXFI~)1k!gJc%jz6!vszur&7#jxp@qU^BPX zC@z09y!PIfV=H4~mbL`zMnS0gyHAUja^8|gHqy1 zzohr~L=dW;c>=X^&|*`aM}WksYG}1VU-ytCiQ*yOG@9JxrY2D!wysq2s(H^Qno-bIT_YeH!k(*V3teKN3k-BiH;(ES*73 z$>I4&B%fr!pMA^~O7J=TMwT5>rFqTWpEUS3(sJt+SV>u%l7KzO>LZ(5=f=b$CptIY z>gFp_TcgBg(kQNuycmg%aN}0}U6d+%Oowdo^SMK4fv}kg522l7f>%=AvX6+ak=(ID zv&VF~_8bvr8($ZfQoi{%$SC>y{?c$$B$u? z0Yq~doe9;GT5Q~u_%^sp{C(70w*~WsQv0?FcXtd9vRDZBXuk}Y)e2&T-u|{xCYeFr zv6tePQSEGVSjGaMo45NANEO~I$^-<5iTVCL!g7@sY=LazKA3IK9S#ms;Kg5fVo@gS zjEKnFnIt!2!>bA?lt9XMy5O#Yq`nqDrb`17>m(V}=JPcrWlu63lKmv1`41}9I9mE}Gy&DGS!&X3f_uD|h~KQWcZ<=YalO_Etws#=-~j&qo= z56>wK`dy%tHTZ=rp*0#>t%<^>o0ij*UwI|dzI>e$Hh_~_kHIVO+K-Tz3NtkcOo+`J zPsndGkV~7#ip^xtEh_LUpj4b@cWS<5#1lQ`suOm-5IUnqfsc1Gvu{1=N=QCEN|7qj zx;D4YRd)WG?H`gh>E9xt#QoU(I0w^o5fk({)4fMe7JGn^CEcMl%bn4Q_8pm}PJW(`tc!F>nZkwUmL2!_Q4vjR{B?SrPl5x=g7<@( zb{VSGRl_|7E!mY!u&omvBPRvf;PsY8Yq(}(Q?x+!V5dJ$f~xks*pngp))mJQ7=kTAZBr(b%bT`yMfWiOQ_539?Q)OlQ)=HC=3ji#Ky3V@<^% zEx2sqTg{OI=qMi)=QsGtS0>uDm=skrgy9J?KF0+@EFt{xj?i8-Xn7rk0aty04fJlD z%3f^TW9K-iZ_oDXV_l};rtF|t!9E2JPygQW}!GX?4j6)s_} z8TQK}D@Llzfnyk77tj0>Ksv(jHB-CAZMvNpWErZ{vZt80O3ch|#OVsk%#FpeRMig2 zdMk+zo%{@lD;wxfo$uI;Eoh1(hW|Na-~6CVXMysf_d84uR4o3P*!qaXiEquESppS6 zDB-D(YA+c)au~iyFG$;(XT5C2o*10q4h=5zPZ=my=hE|D>ZVZ@jcheAd9ri0>Qoa; zhGl2yTVH0Wd(LXb6ZR$GSV)s4q%BjHN@p@>#Svcv@nNdkat3y&r|(|O;a&aS#h_}` zrj>^_fB2fwWQwuL_*NG}xc&O{^fdAU^LsI%a=^p*zR+ubf$&T7KpTN;7q3l#NpPa7 zIu|<^*WWQ_A@kM)!TZM3usbrm9z<$(zK>((98a(?W#2d zOXe88?F44yerx++^1B&OWG?wH5TqZ2*Z~UMQB_juLgHd1ZC}%6yy><>_6Xoy$zvLa z&#^&CUpKLtC92g3wd)Nbd<1>P#q*pFXr$rANf&xtEc` z3ky>Btou9zaKh|bhx8};ttEB6pu6)ZEfEFeJ1P?$j0tbL*vVCGB=Eh;K3rPDNJCwU z_V^r(^gT=De_MVEDqy;I?(iTIn>6#u^+zcJuh<`+8o4Y+Db^8XT6DtqG>L;%>7mm7 zIGUMn-#0YlpWdPrFuSk5$7&s5xKvnFv-hL|_#<_MsLC0(dM!s>*@k#Re>!x!lwWRw zimdbGJBmx8@&Vv1aE#w|jC8QRYK~O0N2aIV@(p&%KLK3S_k4gT$?5vNZ3ec&wt8WjTdoUcu;XD&3>O8GjyjsJ35(oryl)vqv3)Nl z1iYTY2Ip%B`nh& zE{TqP^5Im%F}4BI*af^1vmhB{4$3{`OacPH*%DN$8)<5&rtN)8SfNxSk)w#?cn@$= zUMoo;V%I>hsCxBrG3})DY`ZfMtj&vd2YHSP+TENx>^S+-Ho?sZ2j(e}J0trowfuSf z{eyL!D}f8XmT4VRDE{GR%9TF7^13%U!%^z0KSm;cAZ2qhDPAmo`E?bS*I(dc`=)V4 z<9Gx#Twu8kZfbU_w+9_3ll6kK^Csxn9ToDA7WOlyuKBN?FCiWt5YO#aFQ5>ZR1qGfyT)rzA(8aNZeHTho%aQ15F z{=tkv!8C|n$zH)SvH4-)_T4|5_-+*0UTNvi)l2B-&ktGZ$kkgE(6u`59io~J@n=-U9OqHs7e@RNQnhxP@K#4RO5t9O9}^YV zSj^GQTh#@fKj&H52*@Yyo!4>dyPltAiyJ{z1>5?o87Tde)2O}9vky)_D3(uI?Qd2I zaz8Sf;5y!iWT%1^64%F_Vavo{FxKmWUDj&Rp~TjIH;l(>@lI8#wG1PepgjDLeSWZ& zrFT5RmOIVidOrn-j|>fEO1B;BzG2*%r2RV~Vb*HxbI@eRp^}K=YjpV&b)v-6=rMSu zRBtM1_zcG7A&|rsF0LDHen{CtBUH-d?znPo7~1_SAUQ*CkpI3+u?=s%PEcw0k2a@d z`JF6G`h*ur`Gen*9%P80%dWcy*R$*Uq(qTl`I_s7;nGs{R9u&Sl9Tx)qjSnT?k;M=IR zQ^Jwx>%%TQ#;*gDNw7zk@W-+%I~n(y(-*2<~twdrrO;wzqpocolPWXgHD z{y0MMn@rfjPR3#iEm-u8%>ajOgU43KvZ@R+tmUB7Mz(kJQ}xJB?wnz7th=PpcLF0^ zKNWr743J}S%d$_6biV-0?zmQ2m?vC{vn?Zb^G&@>R`g5GUN$J~z-muc&f-uZT|tJ% zu9XX|s(HJFxy~L-fYYlpchqsGWQ&=UYEKyX&9e?r#+6d7EXa53`zueXo`*E92q$jE zjuE0}Y`)#)*-5%;tj-MH6;YiJLgsKl>kwbK!z*d)&t&J|c|=x+Jw-ie{Jy*QfX!!4 zz;Kkf({7EyOz#l#z=flS9~|br^EHVKVGYB=Im$PVMMU1xhNE$9X)K4`XM*$MrtRuw zzsu1A{F~hj{wl+%jiZ9SeSiFU<|`uJ*I0f>Ltc5)c`Gu?+ZvoBffZVnm>gia#fznp zBtkdj-4i(Oh!hpt0GPza!Mj8S{&{$4+Z%Bvs?q-gk;bmWbdUquh~(0UGra!X?Q#mq zb{5EA6(+Svd^OV0QW2=0#7h&R*xx>Ra3Ol^X*%(jyFSy&3>?n6(kts({b*14k@>Y) z+R=!&UwE%<{aG`q*8+8M=cyX|+u1{Um;PM$DWnQmb!V3CM8`qNlp1mZFl9r(& zgYDdT^bl{}zErYFs_;Vq&H_Vtf`4mJkoB5_c|CS9x10_aaVjjA6;(!!Lg7(((vNX% zIB2VW`js=P3h}{C7KcJ|0X=Z9V#Sg5etjlKQSG1p?_0IkU7!|2Avbfs8HmKqFFMnW zcu=X`l}FD^$-7;(=0aY@uSxGDFKfnrDye#LxDMQq_HeFl`lb3_&&UeZlfB?BuBDJ_DltkT_{%0-&%wlR$EMqL}!{)<%XWUC_^ zsbc25DK8Kw-+!fV{W;t~sh7U~6qTK6yqNQF4(RQYQXZ~A;&3oYu1m@3cvu31cR7FS zYh9VyWu88(?>jLOwE054Kh#pglDvDs^KkUorIumDYN0i76)k+^ZXJ7npX#mR8#_po z{e+`+-A;b_5q#{}p6V1IVPHV*kQ$WFah4t2iBSah$K?$%Lhe- z9DI4$@>@oqVl#pea_GK1?}>pS=*>HC2SH3*jM~P>`kj|cfwCJK)&oQTi#+_;;5&>T zwMs&$`u`yhr;4K)b^f2_A-p^C?Ehc^{@p6$UyXs=IhGNx-AhxzL3+J(!WnT`bbnqXz zfYGrSNBHiuq>Jq34h`CH)v?{M&c&O*d2}z12O|E8z4q7b6in1kJs#j9ay&I;s?0koF4z>q9ZxH1S2XCOw-=Nb#H%?`jbkN`wq8H zH)Q1n8r=<+%Vkqzpb3W(ut$$+QPe>kjN+U260(0{ms~{&NO8LTO>JEt-#R<1IC5%M zif)#(Q7tK_ne0-zII0WvhD2yH;8xYztW1;Kq9UWuaU|37HOqaGJaFmKK zBZOxi@k;_MmQF)TF)0znpAX}Ho$$Y*OPja6DkOM%=x*!%qyEkyQ6k}(U$E>z*q zTFNxssb^w8)wX@e=$KFO<(!4=zdiYP7(6UIU(BIXzc+!`X67VxnzqBrX`A7dR#+^GipRn8KN(NTp*mS>AP1o3 z7si?<`R?-Pe2yzJ+d4~te)b=_U?8||z4LxKNVY-}XnftB8k^D2vOZw-z{YlaD*b(se5&z6++=i2E8L4`ut+CG@@3ND{_z#rvBxJV)K(8j5Vpq@_ve0&WTH0z`RN8Zx7+q&n*rM`g6nq8 zUXm&5%aVLgn`%?Zti|cI)2nS(k3^hi-fD?gq5ssHd?X1%1GAh1j-pR&Aym17-^$hL zGVuwbRxRuXw=l^ZBcFl=Ta0s@F@$aXAM8`JC3AaDTpkQ>`;*fpSlQf(ysF|<$JKRn zr%xAt(0{9=2HZm%xYe84o59~~Jb4L2rLqPzgZ@~{>vGFcVAC*w(`c#wxs_6)$FVZz zh!LtmnUMkSZG1n7G5a2pnj=m74GaI?XM%sZ>D064zA+j!+aj|)5>pKB%_ka;Pdy{A z;esapQ4wlSL+Og5+igQT=JNMUm~&HFP_`r8>5qwzi@&d*k>D=4# z6zbDB8QVOr?j8@xikWq`Y$W5nC;jtR(f#AYT*3H2LmXi z$woolC!eOit0mc1W~;|_b3f}0US8yErJDu10??2|EmQSG^ejw~Qm;GPK(SNmT2QIh zY?mS+6MfL-^G#!&F@8J0nMB%hkPmHZ#*q7F9QKW@DV@8(Q9RAeRGRF&}^ z8P@-#)1sYJ;8j&o<%vxWQ4E{pLs#&%;mqRK(!>&nTh<+ z_IQa3@hxjV3zJ#wkE#H7s9DV!apTsLKlw1t&S7NWmlaW>f^rpHfsLn&Lc6lNrG2LK&q)q71GElgfO)lROb$-IBF zE7%}durG^+&wDfTV#jN$aA74*58Xc;Q{M%`0nPV15n?nz)eDy`!7>+K9>)$BV)lRP zNA<@xN#Jay=KbVeGv_=ArY}pf>7=m#B}F;=_Pgo8wo#>P*L1kuQ&hPZ)zj&;YZNKa zdQID_8mlFN_QW$)PXBP*keW=?pKthg!?BqKLh`Z(2(Mv`u%f>YfdU;=aBg zK4Y9=#L^Ob=~u6=qHMWvtZ{2=>xI_{A=!JIK&hD;77P2vPnbd!N4>!$y&iu3w~od# z>FX(#=*so^BTnW5U#$9Vf#bh^)zj~kG(dP@_W286DYq2AM-L)H+pAvK*g+0X)Oi~O z?ENiimNSF(S9TSqP%(`D#p#w2WC(D$hIM;*B&Np*MV0W)dTtFddZM->xWZTcIJcNyv)3o4@PN z?d~E1L<=SG>>H?=GMXO^^%te##ySjr*THX4v2J^(->+`J@2PjTY7>0X%kjgHFu*Jf z(-oXv^AD@M7q*Y!nw;MAC9YR=IpmG`n)JIO;2I5r&PiviSMg}wU|Pz2`4;#pV6GCf zg{=5j@OH)Wko=}U$cBMj{DsCu^Q-K%s-(ljSD@uGD7G>V{j*w$a-YtddiLxq+={_W z(xCl2^e8KXp)Xu3s)^i)lKQ^EcvG$_KQLT2SU#*W@@0gTz1&=0v9w7fwH_8x4K)E4 zEhckl4b?A*=^F)JDMT0(tsO{KdDr7_-0a`-H$IAp0P_aPY*%tOPG9+uqR-Q9H-lai z*yUHNvD*@!ON>xWS^|mb#lChX7PNX({K7Nb^MP?J*g5Xut;7Yvb8sg@By|n$RNmHl zmyNKm;n#>%>9XVsoRhfJiM>v@?9>}`@V)o=$?d4|4Ao0ir8EjesUn&hRD?=Ekj{9v z24sQOF+5oa)3P(9$bBw6(mhC|0u zjl5zjQGCRM&E+$I*j$5iE<6%>F{#Nm7>~jf4oT&GbOZizY^+2rl>LOswG`dbfzuhL zF^@G;2$HEaHEC@w-3WT}hS~&Pu~+mnlqY*t^AGaGE(*B^)vl_Xg-b*A9bSt;oMA%p zan~EW!YwQKJef7 zb3j4xy!f^%-IEAQTY5x0qJW8Wj}wq)>cd&nQ8&!I7^0^N%=tOo=@-bpzK<=zf#_h$ za3VfteVAVVzgy6eE;;8e3sIJWD=Hmgj;|L1(+4aX;o>kjbqnk$#VDw}yuECB&f|Yr z(hi8;fGY1RL|r_a@VuFH2sK7+3{ADk5qi;^{)7vQC=fy?fhWc}jJ!CVGf}#@EC6Qw zzLym+J-y|CQc@^zR{AWl_~_T=Y9E7J=RHf@T9@L#Cb@r5=oIdr_qHLi>mE6nm&*K{ z!){*8G`@Gt0j;;}89T9ycE0Y(W!T8#dmXUSQr}R(G`$z+vFx>|Olmh4qRXr&48}_S zv}QHy-^L{659&VnZm5^)TRFozer*YrEu|;FT9C4Ca9CbeKcpAX3tBJW=ZW_qmaJN9 zBR})~Zm76cSirPAzwhb2;ikrXu68{mg(4jcH2OT7N_Z~#N*9^zSBX{bUF({7V$v_) zf3zhPuT-*isz3On=m)xMPN&E)&PAjo^-PVR9tyOd&biP3IW@>QC%+- zlWcina>Nx&#o)SmO4`t+I-y;YFNp{Idw!?f0=+V1X&q`fZ99SCJ|<5=@j1n|xtxKk zR*=*lCz)xy@i+l2jyx6Yok8vqd(z`>%)T%!iRFM4xi`GR?fj*BxiL#l-@ zP0PF8fdn%2G+2drM)^!o{@P6KU_q0Z<~7aUwp8EX<;mu|u#rrn^N7aUo*h(v_$psV z;O&661e5s_m4CYPH#YBa$fW5vLApr+)ufTQNl-b#IZ1ucAsc!<>}PEzc~i(S~mWf_b$-*hcJpgW1Y8mvAm2SN5PQA0r&qpcS>bISVp!9Db6FKx`@T`m8E~_D_G;E>(sNMPGs80h8 z{GuB3Eu|8h9WzaKz6|CC)i&#e`e+svF>vO5w$H+8@IG=r7?Gt=9$*_^M}!S%wytbz zNCDjDBw~c;?^G$%1(;U1RaRv3xtOBD0KY7$*=B~+8DU=33CqGC-8%2T64jyrHMIBp zDa@SpHR@O>%P-&BLl}9>HGulL}Tj`-U6@l!Bch!5htG&e+Qnpg_Y% zgF;{TQ-I7|vf@xivBT;H-(97WqKQaQ(NIKzks8_7@l^G(W=Rgow~abVKY zB4wY8a|y%Lh~Vt$mHD}O$qa6+^ZcH&4!yg;H_FtFf0;poxanq$>^}K5Cgc&KF4ht?jNiKSbfLl6dfY z=u10|##^yOn89AWBVG!_wTV56QO?G`V8%BRtf|#HJvq)M!TU!8qJ+($f9BEU(K^fI zv?8Q_Q87O>SBkVsYbZPWk9E@`R_6BlH3a@{)-{Qn_}WU^{FdFEQ5)Sa2W9OdgY%+d zHI#UNAS%hw6*`;eQbJizw3SmX>qIemX@>`+X&hUWxPG>$s)XiFMd-Ri7@9DjZfU1H zTh~W;7B=6@6E;!uyAV}?SEPH1FNUZ9XNGenDd`$s-B4ey$v|0wA-`8xF1F7pS5DEw zl=kS>@Q%3YIIN7+e%8ihDD98KS3;0i6vGE+8a}zl2vA+ip>5bV=VF}A`j+vN7_tF! zdite~k(sY#{J$u^{e8lwCYCB62j&0vV84}yXph7KO?&@c3^y$WaFraTQyn0<>ZI{E zD*XNn<3p=0DhmlCg#Gx^@gnn^zeiDakh*m~K2c<~&V7~g6p)(EbOJk@Bz24>eAniT zTK~}(!p0Z*>FJ{9At1@)V_f8S*@>dl=)#HH8CFt<@4M@5AQ@2f6vw4+&vJP|6y1sE zau}sBr>EK+yt!yRt>p?8xNC}R3#0&Apb#hp1Y;sy9_@ptFEK|^7trz9rNN@4C#MbQ*q_IGiWt{-WBNj8cmRa)J3$_pOe zq?IK`h#_txOX%6g*2qLSRJOlV-L*!qJiSba)=Mo#S*?mY(jlfrZ2aSKGQ66a=z!y6 zj(b~;w0>TBa*9(WZOjWAu;qG`{}-+7_f)>nAFVFVi0JbCfNQViiMyP=+D#rlYfE%+ zrr{0UP(MiY7B>AM^qN5V{oPf_mi2&v2~ngQ>zHOT?$=gV5{t%XdtXl5Wand^{rc;q z-W1{y0!xTwTOiA2${>3(O19t^@M+rtq#40((+;LHsX?8Y$!CA;?VpaA>?jzqap>93 zhTYv`WtKUxx^w-Xj`D_7r2JIB)Xo2$jpnSli__sN1nGw%a(~0QF{USNMmD`W8=qI= zb}9c;>doj6<(g(ZKNp&^NvS5KUXlSOxVp(0t7`uLgVBZaJHd;7gzB|EI~fFLilB>z zy!rjX5!jwamNHnT0Ccgp(UT+EmLs8wx)<5lLJI1t%?!&m3c|TmJP_{x)Mo6OvxwF# z_F#}Pv>xy?CB{&$?dr&m%Tw)F7+&;9Y|ZQ`TsdGZ%trS6Kp!2 zlmV8ERez>E1|wz{TGx8r8$2s>gD7syJ-WTptM5G}3+>vCw*un~E*XGJ zchYW%7P7LI{$TUv&r};xkbt5USit}Py+}MZP`(4h5O^s zd6i!T-ji8;|F2P5BvwaF^v3^^cPkjbji3(5IM-Y;JQss?ZBX)_f^eAOF(9#$E~;p* z)I-AihQ2pMk3vf!uiV%3d;%+k;B%RChmhB9%_TKMaY0-ZT7vUI^m zj;2d1fDf(qFmU5!3W4J)`Pl!2o*R{>VaEk7k`n8I8ftDh-BgFIpooc*>Kw!Td> z3G#Wvpe)-9=)fn%llk>6_yn5TIrXt;tB0(4n~knD7J4K;nkO+kNQQ>&v(~joMIbUC z=r^A!3R!1Tt8{E~cVLI@hv5(Q9h;^H`e2E3e)!Yh#^8qWGXYaXPbPWEz*%?~Pz;P@ z+B8Do32VPXAl2m~;T|5qEi-oBO&#DaNSDybI zGiA@7eT#T091)Ddm}f1yZ=i^A*)L|#?UN$&LL6xcRtsAh;nc>TYfPRVT5G++cE|iS zt>KfTNS%MZx6dNi$H40X#TRdcd(aQ`J|zbwi}Hbz6gSh{KlG!G{iEdH(P*GvoSM7G zj~qz`4Hj5blYpbZd9xBi5s(va(ZS}%{P3^PpI214_ORrwz$;wI>2*H6n@^UvZ#Z-Y znymBbMwx#y<1Fg&n-2W-F_AH3y-5gNaGK9OSzgP1lh_097^eI?7J_KE4Rxbz05hys|4L(A)%#~hU#H7%&`~^Y2qyx>8>71 z(Ee4AI@mh^=W^@vWXo<~aXI0N0#{LciLF20FjYQs_agF>W?UH>|8=hxg>r+K9K6D6 zAYJ=A9+1w%u{r~^@f}4}_Y^U$CHkZr8lQMS{%_O^dhN97vi5cIP3SsTt9A*xb=UTg2!F~nSI8>pW%Q<5ri#yJsDCS)pL|NBw|A0E$) zcNI=-dWYo$4GzHn*z7Nfy|hov!h<|$P-30cu9p@xSnHjL!?lp!vx=4@=3I(1{ttgB z6Wd+UGLLu~Gz+O~%3vGD-SCbdflaSDq%PmcgNno*$q}U;6)`oIve33sgcHtLD}71l z!KPO*jK)mr>Gtyrw)H^NS{`Cps!q0}cbF2rMDX<)s?y+a-At{7rX5&ATRtOTL-Lu1AIw|*lKwwjB^39{x0CNmHGp7ndS|+|KgEEM81Z`j=&#>ULo*D8bi!*ik`Nbru>m;_SN@} z!zg=aQR^G)AsK6Dm+)p7WDczzw`dQ_ax@OJ;=r`&dsW#VL%d&pyWmZ@H7ISn9pIdb zld!Cayxd?cB}Y7#S+wQtJQ$*(+EBXszDr5<%PbvK+CHchgHMzS7=z(qPq1Sm%|F(> zNVd1U;MFP&-u7Hbz$sRHEd?aql#HDnfFX!NkP#=97zNTl#4?v- z9F61iW-GvKK*nh&f)yMW@oACNch@93Y@6XLCoB&q;!3jptjL)-*6#k=g${{xbw-cR zWIFl9J0oZr zIU~4x88+tkd*Aq5$!=vZ=qPxZWyKk3e;E1iQth(reb7bf#0X2FpwqRr)xD1O5REsI zgr^I8g|=nXhBunJul~0xt~#vAH|)}ago5-C>F(HQ1Vp5}M>k`n(jAi?NVkB9loF#s z$}vJV0R;vFq*3Yi2jVxc>-*#T{(i6bx$gIQ>zw;O=U7OCDh1^0O-OauQJS`N{&c=i zNFX}^KYVL1CIQ8nB9#jzC{*rUAhVfbs(nLx2*@g*lXCqKX6K`Uo2y;O(q-uzfziod z%WPJa;=6n8$GbL$&c(wBLhZq_UnQraiyUk{K+_QsYbv#+soNL$|A;PLQSBW5UYkR# zqY{BrE?6(ze0#|GQf7FeMn_18Tl=`fbFP9-W{Alwt}U8Bb7l54SUhqjz;Nz9MJv^p zF(=J}4z>8j(g~j<6{^Z-KtyPiVx@do#k>fJAFzuvY~w@;0KyU4#V?I=rFoFOyu_bG zikNxDha=Jj z#-Hnrg^)eGqLmhp-TZnj1~<~0pR3JLF=195hmzw!`~i#08DVq9gk@ zaa}Voa93^qV#;8^!_1`WU-V{(yfz+FQi!ySoZ3&zA7Ll)>>a*UuEZ^ij{93r&5+UD z<@63sC*_n%x;I_1sQLJ1WyZHGDk0g$Cq4#DZ`BuG0&xh3NxcVAGFVILqF{5dlm~J6 zK!i`!s`H3fBb`5nD#5-u2Td8MIgEhR(se~Fwe8+|0!9#e77=lx+gU*4p8v5=B0ux?i zc*Rcd#$$cF9shJ72i1Q&@tOIfzB zqU6eN90Bp2JA2&|Fde*B&>~dN7@b|(EQ5~Mluj$vAdr}hLIt@oC9<-{)fUGV+_m#t zSeXaHP%;E+5w_3;3J^*JqXjI@Y(Oi@y%@`buV!fKWhPDc5#A$ z{>|v{GFN7Q(!o3G83-gyonoPTiY9hKV3((6CMC5#{=9qCJ=#CGH4!is0j5+yUhDY& zNcbamP+T7=3gq!q;=_e37*%;=RfXwBncB|2Qv!3fp<6ChkOX$i+#o9KNMKBhFZ`4t z)pFS?kmhmuH<%ZlwENXi(D9P}vl$~(nAt?rhp@xs!);0+BKv3ao6q!`UfjYf$xB&t z@8N5#CdtU6mt1qaLn02vzA7$yMl|_CL&)Cp(kVLfzW?lWtg*0sBuE~xjLiMhqHOL`GK8KnTodOV3$><%|EALi|bzgipTy1yUg`oEW5o)1GQL-S|TBVuzsPn zRfv6o&u*NnhR&7A@RZ^^9E9M%@LKnN4%}^Z08O7GYEwWKNmln_c1DHnSPm=0XO6jM zzOj-;Va0rXHP|k&w-$t!i(`gXZ+`}7?FLN4_AkFp2K#>GX(GjIPQ@{GPd{;Tqe^SF z(qPU2ljE=B^35|IY7Y%ZVbVD-npS=;W|MCw0+jg_MPq}2pNDxX0JI6!zD4|J>|qQC zpQOyXuBKuRwN#WZ8mOQWd)-m?e{QT+$Zl_QsZ(EZKL8FHH9qTWbgR;W*C<;6YH-$G zOczn9ds*Xroo!yfD@m2wuNI`G z6sq6Bi;jm3c_Da@1@8%#Z_Zcs4CIvmx2al#5{dJ4aTkYKNZNN(+e`$(`uz_lM#v7W z6@*#s=zVrsgY+{J^WjmJ0%_T;wcCoj+1mwZI&C{?;8g)1#^ntP_WXuv3BN3zQoQ`SKKf8N#Iv#}sVT9SnXeIP0Rx)=1PI6kA4! zJ$T=JnL(~~zf#|;C4v%d^@wM zR3jOxFLZN%A+m|u`5FJrEaT7u9~|D%d~&7Tfl<00?^i)~u=PK}FZP>V`&i7b`Pj(s z;jM9#rQmJ9Kz|9?|Ie#k>t5>VUSw*L|G2_lhObz3n>KqMZD!}kkHfGLAg_sNh>RRE zS?;Co)#c*{2p?lz5P)l#zMDSy@&k`|2r_*DKmN8C@-F#G3y!Qy(S_^`@wnAmQIg@< zdK`(qxyXWBSAyMP1KymUor$w{&>&wq3@LRvqTZ;@oZsNWzgj8ZN>}u zsXuFqo&0`gg^MfhiV`SrSnEA3#T$BZ-<}a%&cDCMD9}j|L=);V0w3lt@wVi8pO#7h z3`k2n5CUA}*mmg`o6KqR1wY*EK&4rcEf~=WbxSXv)c;VxKJs8heQn2@-h9N@t6Z<- zN7rLQ)tA@>6KRY4V8HQt7_g&t_7KtAnT4NA~ATZdVHFyrRLm0{vbdm8yYuSc=n5I@v%?v(S41h zy99&F11IO5=k~`T9T^t8htXxz|5%W=Nng;4R|(3fbH*=9*{28)VprZRVFdmCdJv}P z`7Y1wPBFuA;UM`$x5KULpBVvw+#j~MsHf=nvu;ESwu9IH6?pnuh&NpQFUhHfjrFe) zT_38le}zThBFsFeOT>mRTvr4b)8ka;*xUOX;Z2QA~n?}yG`O<_2-@wqcWVlIW%wP zl@lC8e`M9AjW7io@u@d3s$v2)jaPJx`*`EH97@yJxfm&d@;ighWgu17pSfcybiR~) zwh3O*%Oq%Tg?zlEce*bpGs*wl+P9i4JUZGjY{3)vcsxEvkfm7Q$0@Cmkrqmy}#;$SK*PW2s&JMdhdw zy{3GUz)IYhL}}6B>#`BPOr8k$j0bHBv$LDqMwfnO1YUyPYujJBo?v9ASE zO&EX_CQA#$qz5%KPu?K)&*Z>o>;4HIEvLp+m-w$Amm7vaDTq!UiGO%<+3Asrc{!yv z({5C;mx1{@d+kJfn(*7qBOP1(SG?Bc-Q&|;4mRN_jy@Eb<`2!_ zYy**S*$2lU77J=E#SRo#aA_NNJ;(CAV8IHrF)Xcz6YD3O%<+bh7C?Q1m(Nu!mW$ZtL<_^cKuK!st_f9OwHM``2<(p@ zIS*P@XNEusQr|2?GIrAUnBJMgDIKn+{*_m2@!*e_@5srktw?$WdB2fm5^HJ7oR&$Y zVYZP0=}Q$^3M?z?BfkAz1=g0w0F3S*V6XYs*4JUl5Rrv$e_Hric7pCcEXF_)n4da0Dsbvm75x^=g8U6c|eiHZ&w zcg|8WjEyW?+iyS3kXJvm0DN*87=hW~=-k!eYP*S-w&*1FTN1(wHs2tTy^Ww*nUL1W zvF|BPw1UK=>Jd+Ks}Nl7CHSNO0z%;f#+{3DPjtfaZTnuW>TF^X+GC>*cs9&@ANqRr z;rIRWrT`0i56~24wGPfng9E2TOg8(YE_EjDc}Ggw4&vv`Sw{)PMxEA#dEMJPF=C`O z-fUYEcs6JgcIHS`5&E&mJc7zfauTIK>r4_8aHa5EtVmxbb@TjniueR6TfLA~d_<@T z^RP`XIVwnbPJDr&IZ4l?dxz)eSGB`MfB>h)~ixoXtu)p_H*? z(4#F#$Q!881T08w zo#Ic*&3xqfVgrcY9|ceQY*nA7gq{AHe^tvGUb9Ktk-y$aD-OAOBDyTqMECvT>iVZVCi5e8YB5|1BU&Q}BysA29}Plv*-J!jkJC_(HSYC{hDHTksoWeSkP_C5bU zt~GtTDT_XzP^OZw7ri}0cMH=iXV=+uoZiq9{P|SFA_0!WhwrgfI@CK(3%4u5Wir4-$}6zm*EKgmEV0e5gBO=K z-CXN#<=?l@YjyW@($Y$U;y{zDesf-*T80-QZ^kIKcIFJsjWfSUE+szkE#J&}`8_zQ zd|1G-<8I95DJejGZXDs6(idba!a|#nx$_yViM)6stfCzn7R7QK$=r6&LE}!Zl&F9E z#_pR9%_7N(%O9meRzb!vECAEMgdZlW&!rc(W80378jJR)S9Z2pL<8bP>c09jC%|2f zdA|Qz-7N?KHh$?V(HuP95)RIb(6(SuDlqNWmz#=^`GiVQvW&g6tv4`Fw&QR4hJv=* zA5NR(QVgDN?LbczJ>kKbymS4_ep@Vx(^zoJfw!-71Gke@<7C}c>tcmp3K&>*&{Wo@ zuyt$le7UQ=n7h1IZRXAXs;fYJ;lAUJ-P|&w9n&2~RCEbimX4u{ZSyS;$W-Sw_j`ZE zRu)9CJJj=I#yn5C{|02)WOm^6%zP+RRV|HRw8rm~z6d){xI?p((~?dm(EB?^Kj;pk zqG10e;h_28RH=|Sqv%bZzX+k(d8;q*P|3AA0l$M5x;P~ZF51ot^$#78G!jD0h(*U! zH|XUSWj?7{!p5q;GfftC%`^Ldm5p>YYma2O&~A5CN(RLo7oHCvb~>pB_Ne+|Nc-HT z^ZIxnGKKJk?w07Rmsgs94hyF05j-0H?Q+1$4caQAqCX5zw-vk6GnY#v`@$u6`njwd z;uA`Cjq!DucfHxM6<@s0bUn;Q6W!+id8+G-9^o-5=1wv>=+FoQcBX&~)xb=A3L|_J z)hBNa=QIplN6M@cj}kNlg9jR069sXrOzZQ@8fDa{tBg}NJl^H?dG;Z%sYQG?@_Tp) ztrWCyzs+(VzqRUu8RnAw0l7T;u1uyXL+$2hk8@7^l{2vY+iDtiEm8T-wZOGx8PfQ$ zNYQGt&F9%64~jV-{P1>NbrObCzBpL!sY=d{lhbR!;!@{q*qO~q$)-d{yu$-nPmKjDC8l$52!%WzIi+C$x7K7ic@JEgE8oou2 zh(*QpYZ0}tI!&D$Mf8ti&Z|&=jQ_KTmsZcsDu@5AEuV}6)u4i)Ihn?@Vs+4_@PM;k zrBiU~PhmNJ^<#*4e{Q~u4rYEO_D1PuQbEVS>T0$9gJR%8_BwaewkY&1K=m?;{STG* zKBmlL(<9{U_FXp+^8T;!yw=nX_P??YgzO9bjH~hpFS~t@=Vlf4O%3w??@{me7B?#SCfwT+wER8_O%ie6p zz`HVapz;x=;3fFtx9deVeS@s0(Y3rEqCa^Af0KmU6UT+_grnQO(%gZdu~LXPC>!OE z)fJ>=8mZOVr~?)a_ORJY-=O_&o7E5*bSRVZ`>DnGf{&fWklWoC{s>crlOjYUM)^fu zyC@g|Pk)y4K~J{heAtU+Jx}Fz^;!xJqWcAjLtm041DS z)t7bc;e+Q?x$b6t40vjloZ49>FhOa2Y(cLX#yS3~nczpfh^3K&!{No5Rbt?lb5TB0 zz+>4^jqDoy2F7wc^!d=54&CEzrD{l)&Q4q+D`yf z9hSDgUfUF4w$Vf5-*BE$6?m;HUzdw^S0-+(U6v@YY>cEIvO4Lb z*%-r?anDs6@s0Gcc&5LMre(XCWV>F?mmC9 z7winaE9`iBrq;savrlaYFkv>YKh(u|zg>7Wn9nq+P1K|FefeEB}<^LUnVSH zt9i|J_iIrQT_k&y;m@Fl)<+f^2>L3|x)_uC7gF_a_82yGK7PcCX&U1N zS58<+o^#qRBHvatFSjY`V@>q451~Q&UU4P>dd=U^C&vf8blff@e(8$yxsg%TcKA>d zj03^7cd+bNv%z1qmntX!&An>nCXogami}V1-JjWep!r+hLUs&F^F=2Og#8(oDI^#{ q+D&sf6)cz { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft"); public override void Update(GameTime gameTime) { - if (AppManager.Instance.GameManager.GetPlayer1.Pos.X>Pos.X) - isGoRight = true; - else - isGoRight = false; - Move(gameTime); - - if(Pos.X + 20 <= AppManager.Instance.GameManager.GetPlayer1.Pos.X || Pos.X - 20 >= AppManager.Instance.GameManager.GetPlayer1.Pos.X) + if (!isAttaking) { - Attack(); - AppManager.Instance.GameManager.GetPlayer1.Death(name); + Move(gameTime); } base.Update(gameTime); @@ -46,16 +39,22 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Attack() { + velocity.X = 0; + isAttaking = true; if (isGoRight) { - GraphicsComponent.StopAnimation(); - GraphicsComponent.StartAnimation("ZombieRightAttack"); + if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight") + { + GraphicsComponent.StartAnimation("ZombieAttackRight"); + } AppManager.Instance.GameManager.players[0].Death(name); } else if (!isGoRight) { - GraphicsComponent.StopAnimation(); - GraphicsComponent.StartAnimation("ZombieLeftAttack"); + if (GraphicsComponent.GetCurrentAnimation != "ZombieLeftAttack") + { + GraphicsComponent.StartAnimation("ZombieLeftAttack"); + } AppManager.Instance.GameManager.players[0].Death(name); } } @@ -67,20 +66,45 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Move(GameTime gameTime) { - double delta = gameTime.ElapsedGameTime.TotalSeconds; + float delta = (float)gameTime.ElapsedGameTime.TotalSeconds; if (isGoRight) { if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight") + { GraphicsComponent.StartAnimation("ZombieMoveRight"); - velocity = new Vector2(monster_speed, 0); + } + velocity.X = monster_speed; } else if (!isGoRight) { - if(GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft") + if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft") + { GraphicsComponent.StartAnimation("ZombieMoveLeft"); - velocity = new Vector2(-monster_speed, 0); + } + velocity.X = -monster_speed; } + + if(Pos.X >= rightBorder) + { + isGoRight = false; + } + + else if(Pos.X <= leftBorder) + { + isGoRight = true; + } + } + public override void OnCollision(GameObject gameObject) + { + if(gameObject is Player) + { + if (AppManager.Instance.GameManager.players[0].IsAlive) + { + Attack(); + } + } + base.OnCollision(gameObject); } public void TakeDamage(int damage) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player.cs index 90266bf..3c8e320 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player.cs @@ -5,18 +5,21 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using DangerousD.GameCore.GameObjects.PlayerDeath; namespace DangerousD.GameCore.GameObjects.LivingEntities { public class Player : LivingEntity { + bool isAlive = true; public Player(Vector2 position) : base(position) { Width = 32; Height = 64; } + public bool IsAlive { get { return isAlive; } } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft");//TODO: Change to player + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack", "DeathFromZombie" }, "ZombieMoveLeft");//TODO: Change to player public void Kill() { @@ -25,7 +28,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public void Death(string monsterName) { - //анимация по имени монстра + if(monsterName == "Zombie") + { + DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName); + } + isAlive = false; } } } diff --git a/DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs b/DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs new file mode 100644 index 0000000..1ddaf45 --- /dev/null +++ b/DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DangerousD.GameCore.GameObjects; +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; + +namespace DangerousD.GameCore.GameObjects.PlayerDeath +{ + public class DeathRectangle : GameObject + { + public DeathRectangle(Vector2 pos, string DeathType) : base(pos) + { + Height = 128; + Width = 128; + PlayDeath(DeathType); + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List {"DeathFromZombie"}, + "DeathFromZombie"); + private void PlayDeath(string deathName) + { + if (GraphicsComponent.GetCurrentAnimation != "DeathFromZombie") + { + GraphicsComponent.StartAnimation("DeathFromZombie"); + } + } + + } +} diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs index e468dbb..c140696 100644 --- a/DangerousD/GameCore/Levels/Level1.cs +++ b/DangerousD/GameCore/Levels/Level1.cs @@ -10,9 +10,9 @@ namespace DangerousD.GameCore.Levels { public void InitLevel() { - new Player(new Vector2(0,0)); + new Player(new Vector2(80,0)); - var Zombie = new Zombie(new Vector2(256, 128)); + var Zombie = new Zombie(new Vector2(140, 128)); var Frank = new Frank(new Vector2(384, 128)); new GrassBlock(new Vector2(0, 224)); diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index f017120..55d83c2 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -19,6 +19,7 @@ namespace DangerousD.GameCore public MapManager mapManager; public PhysicsManager physicsManager; public List players; + public List otherObjects = new(); public Player GetPlayer1 { get; private set; } public GameManager() { @@ -33,16 +34,27 @@ namespace DangerousD.GameCore internal void Register(GameObject gameObject) { - if (gameObject is LivingEntity) - livingEntities.Add(gameObject as LivingEntity); - if (gameObject is Entity) - entities.Add(gameObject as Entity); - if (gameObject is MapObject) - mapObjects.Add(gameObject as MapObject); if (gameObject is Player) { + livingEntities.Add(gameObject as LivingEntity); players.Add(gameObject as Player); - GetPlayer1= players[0]; + GetPlayer1 = players[0]; + } + else if (gameObject is LivingEntity) + { + livingEntities.Add(gameObject as LivingEntity); + } + else if (gameObject is Entity) + { + entities.Add(gameObject as Entity); + } + else if (gameObject is MapObject) + { + mapObjects.Add(gameObject as MapObject); + } + else + { + otherObjects.Add(gameObject); } } @@ -54,6 +66,8 @@ namespace DangerousD.GameCore item.Draw(_spriteBatch); foreach (var item in livingEntities) item.Draw(_spriteBatch); + foreach (var item in otherObjects) + item.Draw(_spriteBatch); } public void Update(GameTime gameTime) @@ -64,6 +78,8 @@ namespace DangerousD.GameCore item.Update(gameTime); foreach (var item in livingEntities) item.Update(gameTime); + foreach (var item in otherObjects) + item.Update(gameTime); physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, gameTime); diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index e847c45..03d97b3 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -92,8 +92,8 @@ namespace DangerousD.GameCore.Managers { if (livingEntities[j].Rectangle.Intersects(entities[i].Rectangle)) { - livingEntities[j].OnCollision(); - entities[i].OnCollision(); + livingEntities[j].OnCollision(entities[i]); + entities[i].OnCollision(livingEntities[j]); } } } @@ -107,8 +107,8 @@ namespace DangerousD.GameCore.Managers { if (livingEntities[i].Rectangle.Intersects(livingEntities[j].Rectangle)) { - livingEntities[i].OnCollision(); - livingEntities[j].OnCollision(); + livingEntities[i].OnCollision(livingEntities[j]); + livingEntities[j].OnCollision(livingEntities[i]); } } } From 403572637a2daa2a9da2ce8f963fdbe98cdc339e Mon Sep 17 00:00:00 2001 From: N4K Date: Wed, 16 Aug 2023 23:32:54 +0300 Subject: [PATCH 3/7] add animations(not all) and monsters(not all) --- AnimationsFileCreator/Program.cs | 2 +- DangerousD/Content/animations/BallMoveRight | 1 + .../Content/animations/FlameSkullMoveLeft | 1 + DangerousD/Content/animations/GhostAttack | 1 + DangerousD/Content/animations/GhostMoveLeft | 1 + DangerousD/Content/animations/GhostMoveRight | 1 + DangerousD/Content/animations/GhostSpawn | 1 + DangerousD/Content/animations/SpiderMoveLeft | 1 + DangerousD/Content/animations/SpiderMoveRight | 1 + DangerousD/Content/animations/SpiderOnWeb | 1 + DangerousD/Content/animations/SpiderWeb | 1 + DangerousD/Content/animations/WolfJumpLeft | 1 + DangerousD/Content/animations/WolfJumpRight | 1 + DangerousD/Content/animations/WolfMoveLeft | 1 + DangerousD/Content/animations/WolfMoveRight | 1 + DangerousD/GameCore/GameObjects/GameObject.cs | 4 +- .../LivingEntities/Monsters/FlameSkull.cs | 4 +- .../LivingEntities/Monsters/Frank.cs | 32 +++----- .../LivingEntities/Monsters/FrankBalls.cs | 41 ++++++++++ .../LivingEntities/Monsters/Ghost.cs | 7 +- .../LivingEntities/Monsters/Spider.cs | 74 ++++++++++++++++++- .../LivingEntities/Monsters/SpiderWeb.cs | 41 ++++++++++ .../LivingEntities/Monsters/Werewolf.cs | 6 +- .../GameCore/GameObjects/LivingEntity.cs | 8 ++ DangerousD/GameCore/Levels/Level1.cs | 22 +++--- 25 files changed, 214 insertions(+), 41 deletions(-) create mode 100644 DangerousD/Content/animations/BallMoveRight create mode 100644 DangerousD/Content/animations/FlameSkullMoveLeft create mode 100644 DangerousD/Content/animations/GhostAttack create mode 100644 DangerousD/Content/animations/GhostMoveLeft create mode 100644 DangerousD/Content/animations/GhostMoveRight create mode 100644 DangerousD/Content/animations/GhostSpawn create mode 100644 DangerousD/Content/animations/SpiderMoveLeft create mode 100644 DangerousD/Content/animations/SpiderMoveRight create mode 100644 DangerousD/Content/animations/SpiderOnWeb create mode 100644 DangerousD/Content/animations/SpiderWeb create mode 100644 DangerousD/Content/animations/WolfJumpLeft create mode 100644 DangerousD/Content/animations/WolfJumpRight create mode 100644 DangerousD/Content/animations/WolfMoveLeft create mode 100644 DangerousD/Content/animations/WolfMoveRight create mode 100644 DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs create mode 100644 DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs diff --git a/AnimationsFileCreator/Program.cs b/AnimationsFileCreator/Program.cs index dc2bf5b..83faf52 100644 --- a/AnimationsFileCreator/Program.cs +++ b/AnimationsFileCreator/Program.cs @@ -62,7 +62,7 @@ namespace AnimationsFileCreator container.TextureFrameInterval = 1; container.Id = id; string json = JsonConvert.SerializeObject(container); - StreamWriter writer = new StreamWriter(id); + StreamWriter writer = new StreamWriter("../../../../DangerousD/Content/animations/"+id); writer.WriteLine(json); writer.Close(); } diff --git a/DangerousD/Content/animations/BallMoveRight b/DangerousD/Content/animations/BallMoveRight new file mode 100644 index 0000000..fe03349 --- /dev/null +++ b/DangerousD/Content/animations/BallMoveRight @@ -0,0 +1 @@ +{"id":"BallMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":229,"Y":332,"Width":16,"Height":16},"frameSecond":[{"Item1":0,"Item2":8}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/FlameSkullMoveLeft b/DangerousD/Content/animations/FlameSkullMoveLeft new file mode 100644 index 0000000..8b2ffbd --- /dev/null +++ b/DangerousD/Content/animations/FlameSkullMoveLeft @@ -0,0 +1 @@ +{"id":"FlameSkullMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":593,"Width":24,"Height":16},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostAttack b/DangerousD/Content/animations/GhostAttack new file mode 100644 index 0000000..7ada2dc --- /dev/null +++ b/DangerousD/Content/animations/GhostAttack @@ -0,0 +1 @@ +{"id":"GhostAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":101,"Y":503,"Width":24,"Height":31},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostMoveLeft b/DangerousD/Content/animations/GhostMoveLeft new file mode 100644 index 0000000..32b880b --- /dev/null +++ b/DangerousD/Content/animations/GhostMoveLeft @@ -0,0 +1 @@ +{"id":"GhostMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":536,"Width":24,"Height":26},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostMoveRight b/DangerousD/Content/animations/GhostMoveRight new file mode 100644 index 0000000..74911c7 --- /dev/null +++ b/DangerousD/Content/animations/GhostMoveRight @@ -0,0 +1 @@ +{"id":"GhostMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":503,"Width":24,"Height":26},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostSpawn b/DangerousD/Content/animations/GhostSpawn new file mode 100644 index 0000000..c9f62f8 --- /dev/null +++ b/DangerousD/Content/animations/GhostSpawn @@ -0,0 +1 @@ +{"id":"GhostSpawn","textureName":"MonstersAnimations","startSpriteRectangle":{"X":26,"Y":503,"Width":24,"Height":30},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderMoveLeft b/DangerousD/Content/animations/SpiderMoveLeft new file mode 100644 index 0000000..262a25b --- /dev/null +++ b/DangerousD/Content/animations/SpiderMoveLeft @@ -0,0 +1 @@ +{"id":"SpiderMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":225,"Width":34,"Height":8},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderMoveRight b/DangerousD/Content/animations/SpiderMoveRight new file mode 100644 index 0000000..ffebe55 --- /dev/null +++ b/DangerousD/Content/animations/SpiderMoveRight @@ -0,0 +1 @@ +{"id":"SpiderMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":199,"Width":34,"Height":8},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderOnWeb b/DangerousD/Content/animations/SpiderOnWeb new file mode 100644 index 0000000..c9f8c45 --- /dev/null +++ b/DangerousD/Content/animations/SpiderOnWeb @@ -0,0 +1 @@ +{"id":"SpiderOnWeb","textureName":"MonstersAnimations","startSpriteRectangle":{"X":80,"Y":199,"Width":16,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderWeb b/DangerousD/Content/animations/SpiderWeb new file mode 100644 index 0000000..39363d6 --- /dev/null +++ b/DangerousD/Content/animations/SpiderWeb @@ -0,0 +1 @@ +{"id":"SpiderWeb","textureName":"MonstersAnimations","startSpriteRectangle":{"X":108,"Y":199,"Width":4,"Height":8},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfJumpLeft b/DangerousD/Content/animations/WolfJumpLeft new file mode 100644 index 0000000..2e54b48 --- /dev/null +++ b/DangerousD/Content/animations/WolfJumpLeft @@ -0,0 +1 @@ +{"id":"WolfJumpLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":133,"Y":290,"Width":40,"Height":33},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfJumpRight b/DangerousD/Content/animations/WolfJumpRight new file mode 100644 index 0000000..43760af --- /dev/null +++ b/DangerousD/Content/animations/WolfJumpRight @@ -0,0 +1 @@ +{"id":"WolfJumpRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":133,"Y":258,"Width":40,"Height":33},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfMoveLeft b/DangerousD/Content/animations/WolfMoveLeft new file mode 100644 index 0000000..924a49c --- /dev/null +++ b/DangerousD/Content/animations/WolfMoveLeft @@ -0,0 +1 @@ +{"id":"WolfMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":292,"Width":32,"Height":32},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfMoveRight b/DangerousD/Content/animations/WolfMoveRight new file mode 100644 index 0000000..67ca172 --- /dev/null +++ b/DangerousD/Content/animations/WolfMoveRight @@ -0,0 +1 @@ +{"id":"WolfMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":258,"Width":32,"Height":32},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index c4b19cf..358c451 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -14,8 +14,8 @@ namespace DangerousD.GameCore { protected Vector2 _pos; public Vector2 Pos => _pos; - public int Width { get; protected set; } - public int Height { get; protected set; } + public int Width { get; set; } + public int Height { get; set; } public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height); public Vector2 velocity; public Vector2 acceleration; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs index da492f2..cd00606 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs @@ -16,9 +16,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { Width = 62; Height = 40; + monster_speed = 3; + name = "Skull"; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveRight" }, "FlameSkullMoveRight"); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveRight" , "FlameSkullMoveLeft"}, "FlameSkullMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs index a0615f0..b0b3429 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs @@ -35,37 +35,27 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Move(GameTime gameTime) { - /* if (player.Pos.X - _pos.X <= 20 || player.Pos.X - _pos.X <= -20) + var player = AppManager.Instance.GameManager.players[0]; + if (player.Pos.X - _pos.X <= 20 || player.Pos.X - _pos.X <= -20) { player.Death(name); - } */ + } - if (_pos.X <= 1) - { - isGoRight = true; + if (isGoRight) + { if (GraphicsComponent.GetCurrentAnimation != "FrankMoveRight") { GraphicsComponent.StartAnimation("FrankMoveRight"); - velocity = new Vector2(monster_speed, 0); } - } - else if (_pos.X >= 500) - { - isGoRight = false; - if (GraphicsComponent.GetCurrentAnimation != "FrankMoveLeft") - { - GraphicsComponent.StartAnimation("FrankMoveLeft"); - velocity = new Vector2(-monster_speed, 0); - } - } - - if (isGoRight) - { - _pos.X += monster_speed; + velocity.X = monster_speed; } else { - _pos.X -= monster_speed; + if (GraphicsComponent.GetCurrentAnimation != "FrankMoveLeft") + { + GraphicsComponent.StartAnimation("FrankMoveLeft"); + } + velocity.X = -monster_speed; } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs new file mode 100644 index 0000000..127362d --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs @@ -0,0 +1,41 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class FrankBalls : CoreEnemy + { + public FrankBalls(Vector2 position) : base(position) + { + name = "FrankBalls"; + Width = 40; + Height = 40; + monster_speed = 1; + acceleration = Vector2.Zero; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new (new List { "BallMoveRight" }, "BallMoveRight"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs index b8827b1..18464b2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs @@ -12,10 +12,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public Ghost(Vector2 position) : base(position) { - + monster_speed = 1; + name = "Ghost"; + Width = 48; + Height = 62; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "GhostMoveRight", "GhostMoveLeft", "GhostSpawn", "GhostAttack" }, ""); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "GhostMoveRight", "GhostMoveLeft", "GhostSpawn", "GhostAttack" }, "GhostMoveRight"); public override void Attack() diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs index 9513d71..bffa5f6 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs @@ -12,15 +12,85 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Spider : CoreEnemy { + protected SpiderWeb web; + protected float delay; + protected int webLength; + protected bool isDown; + protected bool isDownUp; public Spider(Vector2 position) : base(position) { + isDownUp = true; + isDown = true; + web = new SpiderWeb(Pos); + name = "Spider"; + Width = 112; + Height = 24; + delay = 0; + webLength = 0; + monster_speed = 1; + acceleration = Vector2.Zero; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderMoveRight", "SpiderMoveLeft", "SpiderDown", "SpiderUp" }, ""); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderMoveRight", "SpiderMoveLeft", "SpiderOnWeb" }, "SpiderMoveRight"); - public override void Attack() + public override void Update(GameTime gameTime) { + if (isDownUp) + { + Width = 48; + Height = 72; + delay += (float)gameTime.ElapsedGameTime.TotalSeconds; + if (delay > 0.5 && webLength <= 4 && isDown) + { + StartCicycleAnimation("SpiderOnWeb"); + webLength++; + _pos.Y += 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 4) + { + isDown = false; + } + } + else if (delay > 0.5 && webLength != 0 && !isDown) + { + StartCicycleAnimation("SpiderOnWeb"); + webLength--; + _pos.Y -= 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 0) + { + isDown = true; + } + } + else + { + Width = 112; + Height = 24; + } + } + base.Update(gameTime); + } + public override void Attack() + { //48 72 + + } + + public override void Draw(SpriteBatch spriteBatch) + { + if (GraphicsComponent.GetCurrentAnimation == "SpiderOnWeb") + { + GraphicsComponent.DrawAnimation(new Rectangle((int)Pos.X, (int)Pos.Y, 48, 72), spriteBatch); + + } + else + { + base.Draw(spriteBatch); + } } public override void Death() diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs new file mode 100644 index 0000000..d91ccaf --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs @@ -0,0 +1,41 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class SpiderWeb : CoreEnemy + { + public SpiderWeb(Vector2 position) : base(position) + { + name = "Web"; + monster_speed = 1; + Width = 16; + Height = 0; + acceleration = Vector2.Zero; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderWeb" }, "SpiderWeb"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs index 91af742..9d5acb8 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs @@ -14,9 +14,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public Werewolf(Vector2 position) : base(position) { + name = "Wolf"; + monster_speed = 1; + Width = 78; + Height = 96; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "WolfMoveRight", "WolfMoveLeft", "WolfJumpRight", "WolfJumpLeft" }, ""); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "WolfMoveRight", "WolfMoveLeft", "WolfJumpRight", "WolfJumpLeft" }, "WolfMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs index 5352489..2826863 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntity.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs @@ -23,4 +23,12 @@ public abstract class LivingEntity : Entity } base.Update(gameTime); } + + public virtual void StartCicycleAnimation(string animationName) + { + if (GraphicsComponent.GetCurrentAnimation != animationName) + { + GraphicsComponent.StartAnimation(animationName); + } + } } \ No newline at end of file diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs index 0116688..165c006 100644 --- a/DangerousD/GameCore/Levels/Level1.cs +++ b/DangerousD/GameCore/Levels/Level1.cs @@ -2,7 +2,7 @@ using DangerousD.GameCore.GameObjects.MapObjects; using Microsoft.Xna.Framework; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; - +using System.Collections.Generic; namespace DangerousD.GameCore.Levels { @@ -10,17 +10,18 @@ namespace DangerousD.GameCore.Levels { public void InitLevel() { -<<<<<<< HEAD - var Трава = new GrassBlock(new Vector2(0, 128)); - var Death = new TestAnimationDeath(new Vector2(128, 128)); - //var Zombie = new Zombie(new Vector2(256, 128)); - var Frank = new Frank(new Vector2(384, 128)); - var FlameSkull = new FlameSkull(new Vector2(512, 128)); -======= new Player(new Vector2(0,0)); - var Zombie = new Zombie(new Vector2(256, 128)); - var Frank = new Frank(new Vector2(384, 128)); + var Spider = new Spider(new Vector2(112, 0)); + var Zombie = new Zombie(new Vector2(256, 0)); + var Frank = new Frank(new Vector2(384, 0)); + var FlameSkull = new FlameSkull(new Vector2(512, 0)); + var Werewolf = new Werewolf(new Vector2(640, 0)); + var Ghost = new Ghost(new Vector2(730, 0)); + var FrankBalls = new FrankBalls(new Vector2(Frank.Pos.X, Frank.Pos.Y)); + + //Spider down-up + new GrassBlock(new Vector2(0, 224)); for (int i = 0; i < 50; i++) @@ -28,7 +29,6 @@ namespace DangerousD.GameCore.Levels new GrassBlock(new Vector2(i*32, 256)); } new GrassBlock(new Vector2(500, 224)); ->>>>>>> livingEntities } } } From 5e5cc3ef7436e6a5cf0802bb5001c00e4539a255 Mon Sep 17 00:00:00 2001 From: bmvolf Date: Thu, 17 Aug 2023 09:56:55 +0300 Subject: [PATCH 4/7] edited core enemy --- .../LivingEntities/{ => Monsters}/CoreEnemy.cs | 15 ++++++++++----- .../GameObjects/LivingEntities/Monsters/Zombie.cs | 6 ------ .../Player}/DeathRectangle.cs | 0 .../LivingEntities/{ => Player}/Player.cs | 0 4 files changed, 10 insertions(+), 11 deletions(-) rename DangerousD/GameCore/GameObjects/LivingEntities/{ => Monsters}/CoreEnemy.cs (90%) rename DangerousD/GameCore/GameObjects/{PlayerDeath => LivingEntities/Player}/DeathRectangle.cs (100%) rename DangerousD/GameCore/GameObjects/LivingEntities/{ => Player}/Player.cs (100%) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs similarity index 90% rename from DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs rename to DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs index 1b28997..4fbe6ff 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/CoreEnemy.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs @@ -24,11 +24,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public override void Update(GameTime gameTime) { - if (monster_health <= 0) - { - Death(); - isAlive = false; - } base.Update(gameTime); } public abstract void Death(); @@ -36,5 +31,15 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public abstract void Attack(); public abstract void Move(GameTime gameTime); + + public void TakeDamage(int damage) + { + monster_health -= damage; + if (monster_health <= 0) + { + Death(); + isAlive = false; + } + } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index 22e32d0..dba2deb 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -106,11 +106,5 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } base.OnCollision(gameObject); } - - public void TakeDamage(int damage) - { - monster_health -= damage; - //play take damage animation - } } } diff --git a/DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs similarity index 100% rename from DangerousD/GameCore/GameObjects/PlayerDeath/DeathRectangle.cs rename to DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs similarity index 100% rename from DangerousD/GameCore/GameObjects/LivingEntities/Player.cs rename to DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs From 3533e2e9ba0665cb2a6dccc0a4b11ce64f881bb0 Mon Sep 17 00:00:00 2001 From: N4K Date: Thu, 17 Aug 2023 09:58:08 +0300 Subject: [PATCH 5/7] littleChanges --- DangerousD/Content/animations/GhostSpawn | 2 +- .../Content/animations/HunchmanDaggerLeft | 1 + .../Content/animations/HunchmanDaggerRight | 1 + .../LivingEntities/Monsters/FrankBalls.cs | 2 +- .../LivingEntities/Monsters/Ghost.cs | 3 +- .../LivingEntities/Monsters/HunchmanDagger.cs | 40 +++++++++++++++++++ 6 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 DangerousD/Content/animations/HunchmanDaggerLeft create mode 100644 DangerousD/Content/animations/HunchmanDaggerRight create mode 100644 DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs diff --git a/DangerousD/Content/animations/GhostSpawn b/DangerousD/Content/animations/GhostSpawn index c9f62f8..99d53e1 100644 --- a/DangerousD/Content/animations/GhostSpawn +++ b/DangerousD/Content/animations/GhostSpawn @@ -1 +1 @@ -{"id":"GhostSpawn","textureName":"MonstersAnimations","startSpriteRectangle":{"X":26,"Y":503,"Width":24,"Height":30},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"} +{"id":"GhostSpawn","textureName":"MonstersAnimations","startSpriteRectangle":{"X":26,"Y":503,"Width":24,"Height":30},"frameSecond":[{"Item1":0,"Item2":20}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/HunchmanDaggerLeft b/DangerousD/Content/animations/HunchmanDaggerLeft new file mode 100644 index 0000000..b21064a --- /dev/null +++ b/DangerousD/Content/animations/HunchmanDaggerLeft @@ -0,0 +1 @@ +{"id":"HunchmanDaggerLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":224,"Y":129,"Width":9,"Height":6},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/HunchmanDaggerRight b/DangerousD/Content/animations/HunchmanDaggerRight new file mode 100644 index 0000000..43354f1 --- /dev/null +++ b/DangerousD/Content/animations/HunchmanDaggerRight @@ -0,0 +1 @@ +{"id":"HunchmanDaggerRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":224,"Y":116,"Width":9,"Height":6},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs index 127362d..7101da2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs @@ -21,7 +21,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters acceleration = Vector2.Zero; } - protected override GraphicsComponent GraphicsComponent { get; } = new (new List { "BallMoveRight" }, "BallMoveRight"); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "BallMoveRight" }, "BallMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs index 18464b2..1e47e99 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs @@ -16,11 +16,12 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters name = "Ghost"; Width = 48; Height = 62; + GraphicsComponent.StartAnimation("GhostSpawn"); + } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "GhostMoveRight", "GhostMoveLeft", "GhostSpawn", "GhostAttack" }, "GhostMoveRight"); - public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs new file mode 100644 index 0000000..9e616ed --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs @@ -0,0 +1,40 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class HunchmanDagger : CoreEnemy + { + public HunchmanDagger(Vector2 position) : base(position) + { + name = "Hunchman"; + monster_speed = 1; + Width = 9; + Height = 6; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new (new List { "HunchmanDaggerRight", "HunchmanDaggerLeft" }, "HunchmanDaggerLeft"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} From 7cb3a13280fe0b63c658d3699ea4b0aa14bd437f Mon Sep 17 00:00:00 2001 From: bmvolf Date: Thu, 17 Aug 2023 10:33:49 +0300 Subject: [PATCH 6/7] animation1 deleted --- DangerousD/Content/animation1.png | Bin 24516 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 DangerousD/Content/animation1.png diff --git a/DangerousD/Content/animation1.png b/DangerousD/Content/animation1.png deleted file mode 100644 index a599347de189822c5589d98cfabf43dbe9207ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24516 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 Date: Thu, 17 Aug 2023 10:56:50 +0300 Subject: [PATCH 7/7] edited animations --- .../GameCore/GameObjects/LivingEntities/Player/Player.cs | 5 +++++ DangerousD/GameCore/Graphics/GraphicsComponent.cs | 7 +++++-- DangerousD/GameCore/Managers/AppManager.cs | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 3c8e320..cd23ad2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -16,6 +16,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities { Width = 32; Height = 64; + GraphicsComponent.actionOfAnimationEnd += () => + { + AppManager.Instance.ChangeGameState(GameState.GameOver); + }; } public bool IsAlive { get { return isAlive; } } @@ -31,6 +35,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities if(monsterName == "Zombie") { DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName); + GraphicsComponent.actionOfAnimationEnd(); } isAlive = false; } diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs index e4eb390..6e60b29 100644 --- a/DangerousD/GameCore/Graphics/GraphicsComponent.cs +++ b/DangerousD/GameCore/Graphics/GraphicsComponent.cs @@ -10,7 +10,7 @@ namespace DangerousD.GameCore.Graphics { public class GraphicsComponent { - //public Action actionOfAnimationEnd; + public Action actionOfAnimationEnd; private List animations; private List textures; private List texturesNames; @@ -116,7 +116,10 @@ namespace DangerousD.GameCore.Graphics if (!currentAnimation.IsCycle) { currentAnimation = neitralAnimation; - //actionOfAnimationEnd(); + if(actionOfAnimationEnd != null) + { + actionOfAnimationEnd(); + } } currentFrame = 0; diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index dc44ba9..ab061b9 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -13,7 +13,7 @@ using DangerousD.GameCore.Managers; namespace DangerousD.GameCore { - public enum GameState { Menu, Options, Lobby, Game, Login } + public enum GameState { Menu, Options, Lobby, Game, Login, GameOver } public class AppManager : Game { public static AppManager Instance { get; private set; }