From 79eaf1b162a5011ed5e149ecbd8472244a7d8ee4 Mon Sep 17 00:00:00 2001 From: Pacharaphon Date: Thu, 18 May 2023 21:12:55 +0700 Subject: [PATCH] hitBoxEdit1 --- bin/Object/Projectile.class | Bin 0 -> 3828 bytes bin/ShadowPot/ball.png | Bin 0 -> 1476 bytes bin/logic/entity/Chicknight.class | Bin 4931 -> 3536 bytes bin/logic/entity/Enemy.class | Bin 454 -> 3324 bytes bin/logic/entity/Entity.class | Bin 2480 -> 2760 bytes bin/logic/entity/EyeOfQwifot.class | Bin 1758 -> 2149 bytes bin/logic/entity/GriszlyEye.class | Bin 2761 -> 3094 bytes bin/logic/entity/MagicalTortoise.class | Bin 1948 -> 1956 bytes bin/logic/entity/Player.class | Bin 6140 -> 6658 bytes bin/logic/entity/ShadowPot.class | Bin 1929 -> 2842 bytes bin/logic/game/GameLogic.class | Bin 5345 -> 5977 bytes bin/sharedObject/RenderableHolder.class | Bin 6620 -> 6692 bytes res/ShadowPot/ball.png | Bin 0 -> 1476 bytes src/Object/Projectile.java | 108 ++++++++++++++++++++++++ src/logic/entity/Chicknight.java | 74 +++------------- src/logic/entity/Enemy.java | 68 ++++++++++++++- src/logic/entity/Entity.java | 47 ++++++----- src/logic/entity/EyeOfQwifot.java | 104 +++++++++++++++-------- src/logic/entity/GriszlyEye.java | 95 +++++++++++++-------- src/logic/entity/MagicalTortoise.java | 2 +- src/logic/entity/Player.java | 33 ++++---- src/logic/entity/ShadowPot.java | 108 +++++++++++++++--------- src/logic/game/GameLogic.java | 40 ++++++--- src/sharedObject/RenderableHolder.java | 3 +- 24 files changed, 461 insertions(+), 221 deletions(-) create mode 100644 bin/Object/Projectile.class create mode 100644 bin/ShadowPot/ball.png create mode 100644 res/ShadowPot/ball.png create mode 100644 src/Object/Projectile.java diff --git a/bin/Object/Projectile.class b/bin/Object/Projectile.class new file mode 100644 index 0000000000000000000000000000000000000000..789820102e8aa0e729e07c22b0b9e0e7bb535c8f GIT binary patch literal 3828 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 literal 0 HcmV?d00001 diff --git a/bin/logic/entity/Chicknight.class b/bin/logic/entity/Chicknight.class index 64cfadd2ca3660ef12273fb273e819acbbbc81a4..c91eef2409d4f904dd5a24f00850d4488df0115f 100644 GIT binary patch literal 3536 zcma)9Yjjjs75;8AnO6=W4B`ELv`mJ;P^=F~rGY?6ngHQVLbbizxy)QjhsI*p6!PXX;fl@`S+T}vKT-9o|^-;CHmOtc=tfkA<<+ty>Kqk#{nOXOq zbN1P1pR@P(?R{=8zI*-xfSd8R0ID=h$mEii5jV58W$%f%rYs|!wUQ}20H20P#pJ52 z*}F$Wjn%6sO%0Pfcj>$JodfZrVP?&^BaOGqT(bsc^c4y;y3y8c>P8&hct+1A;~VXQ zl}%E|f0LE9>}49JMBCdt-K~;(uNhy>SEn4Sxp9jIUu!O5hEa`C3L%6;7>zLj)N7bl zOz8zPv2MpM)3D( z%~Oav){1%4OoS)l}%Hi?fC(ww1Zw&(>*#-7k;r>vreNnSMHgDRu04e%k1Aqlk;Wewv;jy_|b zDCqqfqR~pM4L!SCFUD6F^gIbuY|UkDbHFBA;&!vbO$c&>gjFCgRxTUHGPDG6vxa)1 z%upIAEXN8B!IWN13C>O|+Jjihy)))cTbACUuo`XTi+N|Co}qi=+~c@*T=<(CdxE%? z$Q1P%|3LE7p;iPG|=KAPSL8!J_VTDfmPrOynq;HUk?FzTaguk_;ljj%FM-^@tQOFf}7IcLjBCU0$o&gOB1rs~T z(4tW=&FnU!wNiXYDOf|~-C?BB8$d?GoQgag85@Nxa)Jr*baGU~jA5V-P2iO)T|(Ze zP{0y;FYDSYdq-|Scxo&3iFmY#D|lL!G&EfIf3byW!0KS6*XVhVz5c#@g5^ST{ceRl zXcENsDcpno!dKJo%IJH{0*h9(v6A8LL~{uD;XnW%(=gUW*h>I+TH)goK!1O(kV$M4 z-3JsNye8_FFdvZD1M>QW!YA<%0djfdCF1l--&lh3CTovjv$SQ*<}i-n(EuLNFtq}e zVR{Om!ly}l`n1(b*eQqh4$PlXcwBZ36|a;B3HTEVpTki~iLM)OE{?9`UwdOu7{~C% z0KTB1?pk`S(QPv3OE}J)(0RDUY`LJ(+2kpOFN@zb&Y@-fR}@ZQkjF4`OfX-RiX#51 z!bwM5w6Z~bjjZe^(OJHOcuqrAUp|QErAp-bndBNyD|`cIc#fjvP$pv)nf>dsVz5UD z)rGRcS)3C`Ql^pKWJx8P7_9_zm2($))#SXwOZX;HFoxRG=(L6l3Y|D7z3(V|R|@AC zmq8Vj^yfX+jH}$n;|vKg;1pW67Be{Kk%m_GPZ`|Tf zv$z*7+J#)&6h?EfG1pfxOzusXMqm3lSSbEs76V^R*Q@yBz3TLMk+Su3hF3M;wH%#- zk3XO}Hf8F9vrw_qs4HP?EHbWy39b z6lpDE)lnFOc&;hZ?)3eGc#3N$L^@7j9y>I#u0EWp$@`9Dloy6U>}PKi12Txd5p=dX zGuy9fum4{LdmQD3RQ`z5n>&KRJDiy?bwqnUHOBHW_$15N6`Nm1US36sc{L>FyBJ|$ z8n5*kScRF`Oz3Z8#BawO?8IE&OY>N*qqrB1IKXHhMiU+)Qjha%<^(M~OB9}G^v^Q> z=ZVZkM*20z`E^G6Ene_{=SRRLtiV6f>fklrLFDpPye?xm`iaQ^Ptkzd|6pza%W7+9 zhbD#i{M(@$Zwn8#GZ^KN@lxz8?sEO#+ZmgG2KVy0pMryY4)Hl$#=~qLV`DsA#%GV> zq^OC?p`_@ub1-=hpD*D_cAq?lr`cTpV7lEMJ>!m+_+pV$Wb#B`-4n;i?#QzxEFDBB z7Wq0mvFb8jpyC?RxWx9wqo|8@bBBpOql80IZ%yl!HSHs>nI&ruM!DqRAR1zk4oMv` zTgKipzD48T9*)LyJrq|W{3p4Af%`amYK{BD1Jz^bu2}io?>KgD$1AcfG z7fX0dysUCq8FpAwV9pnvQz&v6b(^J5D#)Vwr}0`DZ%9UwT5k>6gTvptQXw2izc1sRYkQ4n`2_A} iP20==ANKLwdwKeMoPFI~SadZP7J0d#;V(`k{`y~)&_$I1 literal 4931 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

^ks6rjy@b^KYWbsup22=!d};peipy2 z>SPS58UksoB&dKB(MG(4U*cDc;(>8|`7B^w&hmAIrG=D9fwWzil>FRt z&TDecn{Ay(&k0brl;OoPykwnv_taCjvFKer;ndkaLx$eeU*h*YM8f!N;HgzaXf_ctYfd?@jFFlMZO+`} zn~wi5;2x(AsCRj^*9+wZFKzzOFeUwyV{8|BgjPd^?{+-Mq}w5Th|(WsQa&<4^5QYci;qiIa$o1Ex&H%-J8vTZ diff --git a/bin/logic/entity/Enemy.class b/bin/logic/entity/Enemy.class index f477b40c5e4992a5e3b6197992b01723c147e8cd..a3afc4c155109efc5cc97b619ca135772367a3ef 100644 GIT binary patch literal 3324 zcmai1i+>zd75*l>$t2sGG$c(zNgG=FaI>LZEEs__P18-=goZYf5}E?l$?h~e?d;Av zJ4qAYq7v{Cf7T}|DvH(zs8l*B6af`{;Nws7=Xd4~>29r({&w!&bMHCdIp2BA_MLyf z`Z|CS{L4gxfezQ3ck)@g95}&p_HfxQEt^Oh=)6HL#|9d$^1N#sFvbk1{DSXOZ#u97 ziaI9GS<I<&Erg;5+5{Ap=eOow5@gFwmQxn3&Wi=dF^RJ<7+VAP@D=7)a*4f}KJF ztqLtjwZOneg+?@Sopj3f@rBZy?Vq&f1iNF>%UkY@HSoPQ(a?0>x9#$&$dfVAx>w=8`omcf4=L=&Fyj>+&vgo;zHJ%UMtrG_vrE}(-Y(nO zYSF6L*@x_W5S0@h8NsNDgJk#r-BUOupv|=Yh*JoPqBf>*ScDSqxb4gr17Yf@!Z?`k z4OQ_%yKkWHy}dZ5Fo_2lwNnmkze*2TRAzdNfBmOfKNSOAH|3HAaY1~F(kgCH&0Dm6 z*P@C+)pk0V(+#5wBw~|3Hd%qB-@vWuddr8SmSlglU>1*>5F<4$wp45~6sgqT{D7_xt+8H;3pG-6+FFDWeJW0H_c z#V)f?_uNda23%W;nIscu@Ck)aO3=-Lrw>#3G(KzMGbAsfr#?3dPl$VFMbhP#Wn_F_ z;eAL;Gd-zr5)Vr?Kc(=r446crG%qJ#QrL{!{;Lw>dSUSveCq-y$DGHpm)1e7_g>yA zFIv^?QQxW*oqRRtvCx+SR$0?Qz7^yzg^T!xiLV>jAwIu{rouPzEj{97Qb&y`BW_IU z_B;5liDy{ab%rVy!_DSA*Yg#=hwt)25zfw(3*Q>_ac6v@I(BFd~uu}aa`BH z)*FJ;8dGAQ5y^b`vBFPeJ|tO&r$q2mg`d4E;Ly5=pDX+Vza(o_&gb*COeI3-mY*@u zFrPQDtKPBy!6ADkDtc}0m3$|+ z6F$L$YCuxn<=iDzwkv3RiGl{S^Vt>|X`^Zi zijrF>%V-63pp)OIicRREIoWk{*AVUawxq5h-4a7R%@aAx^k!a0?{jF&$a)2Rm$13_ zS+r*o+-H&@wqHVXMh?V}MC8YAx(wnq6RVvVokZ&4zb!=BPK=%CML+r?|GG8Gx_=q$ ziu~J63yny0wkPQj8$EXGHJUbgbb#LUhZvX~2=V^aVLm^&dVtUSLmXHgOzK^3b+D25 zj%-=ky3&1tdF@xWkHSJMl$pegH%tZk#K+ezOYba)3H+ey4#7~)eX9M_1ki_I9s zah#w(ZMZ8Uvw_b{L}r4z+c3odlGN?Shq!B`odh1jH1lf6po$~Oa+NfQhke%_l1spz z2w3S0F|dIdJVJ>S!V?6L>7n+M*+ zzL>BOU*K+~5aNs16Q&DiA8yCp{9STSO=5=E6En=Hzf5>Z3`=D{w_m|(?2pH^h(FnZ zP55evuMJ$rw?jNTAnb>DPA|{vMN&s$F2p7AKPHg!tq2@HD|=%-vyzbfhM`J?q)!IEl>`qqYYIGi&&B z<{Cz3#Wp_@Ri5h`djGuaDU;Z^!l^>IA8MfIm@>)u0Y))TDuTh${b!`Ma#d K|3{RPfBpxUwC=C~ delta 177 zcmew(d5oFs)W2Q(7#JAr8Kft28Bg>K5#;7!U}xaqVBlqBU`@=)EK8lZxM^}AhhjY= z0}BHy0~=5=BM<`B07*_DFAgZq0;Ku0q-AusGjM4M@oZ(_+Xxh4Vh{j{GcW^5b|BMe8W9Fjpm`vc7?8yTW{ERM0QE95NCJ6GObk*0klzx0 diff --git a/bin/logic/entity/Entity.class b/bin/logic/entity/Entity.class index 700706455ae8978ec80175d4bca0a95b4b961e06..4b97f14d9e3c8c058b75b0a4cfc4c358180e1578 100644 GIT binary patch literal 2760 zcmZ`*ZFAIA6n<_uyW3qt!Iqaop==fDZfXfHq9Ra)mY1b1#V!^oDyG@68=7uvl0u7q zb@%~(@q<5s8FhxL;|G6$Kg#jBH|Z|TL}vD$bI&=?dAsMN{PXW$e*?IR?~CXY81np< zYnx6da-%Kth9X610{fp?&n?rlIxTZy<(XqgMHB>v!?qPT%~)dA7oASi39J>*5h%Ry z1F!i|K+No19tjjfJ8+y1#R*55c*$R#MuF9IH$tkOyP>O`h-HCN(+Q)%-*TD)`EcEl zwA6G1=HU7rfx)?6YKO7Uleg)V4ydK^H$W>v4jVF z5o?7l(W)~wu0h}CSsq*R*gPjW9?8Qma?UufdmC~J=B@Rema;VN0N=GPAH>q3V=qB& zIMdq-YUQ4|;nL3D$c{Wn_K#YI?n=0DI<+&s1vXj7P?=WoxN}>37viO_MYXFk zr;d&RnNz>Cm+L8o-|85YLK&*j+pH_8ovBe0#DuKWt^i9cbdWqsNho#*(=bE-AD0{rl4asfzLVnX@gO3p?r%HkB| z8Y#*pQk3;6$_-KUAP$jo0x_)Uk%V#))t&35?2ae6(S)8zXhqo%(!&_u<@p}1e`LNI z>4fnIP8zvwj2qfEYLc5UMqX`W(m2M`G$yxk))+j$jSIigybmAqJjK$$pc?nSgyVdr zQ5JpzM^NE8hLa3qFw7^kGU70}h);QAKwM&4LUEVL^(ju4kkbUNV2XFazZ$2KM13|@ zT3<1YH%#gc&i;N6y zt!D*x26!S3zL*JaW`b*J@YPJPgQwldeciMte@Uf1oe6Gbg3UDeRwlR&w;Q?FunWJY zBF|=mpJhg#O-EkH1g~a-7t-KHCfLh-=e2aVA7q04Oz?Ud{5TUFAk1i3ly2CQOz`u} zAsJ6cwll#mu$e@j;xNnaLBSZ|2dTHTWhHHKP1?%Cq1dXsSOxii68aF>%Jwyp_O(i1 R-v9WLpJD0irJ9xR{sX9(zySaN literal 2480 zcmZ`)QFGfw5Z<$8J9d<`BuxlOnkJAowo0m&LV>mf(zt0{oCNIRHUU~>>1r#r<&311 zgm1^=V80o z>4385Z6jX3Wp#N~w1LrNHR^{jnfFfYfMmMX;l@6r5&OXR(X9<`b;35Iw9{>2*X>#@ z^kDilv$UEOv4;@Z+pgz^D~x7}m5Q3D)L^8o^&DQHG`*wK1zH3}vDC;Dqf0uyNoR#t z)agv589KcYY47Tkqam?-MW=kEUDaud-WsC!kfHCk+M(EfU#D?8$LLJe_4w97x5@nn z(Fu-Kd$!eSSiURXW1|+fT^!LwobahZK~d}w&k>5V!qBpxVM2;ZPf=O+VBfJqv?*^} z-fHYWR4n6HDeV?$mDX}}htcTZd^fGIty7uqq77CPd1%FQ3G!i~NKyFYTj2m{v0J=frWFYf^J&Xq%yP)n{ zFv&W0%Y(^0S1hS!vjDGpbPWXcu1*CSVl*)C2=li(4GXh~Uy~O@SijS0ROC4%Vu-sS zjJ8f=!YJtLgSnrN>0dkf0^8DQf+o=)H&}c17K{cwJY~>|yW-Gv*k9>Tq24?2ZNBb` zD?c24FRqC5(iRXrjVFVN)Wj^}E2D`?gha8iM2XUl=1YmUqF?nJzX93Q|7FBr^h_PAl#JCxEc-RF#1~M+>d0B?{tqkSe9Hg; diff --git a/bin/logic/entity/EyeOfQwifot.class b/bin/logic/entity/EyeOfQwifot.class index 9beba6590efb6d394d006283634bc012a3611f82..57b75ca60817812a15d42699b85420121b127b42 100644 GIT binary patch literal 2149 zcma)7OH9jNLibYrL6f)D!^apgNf2fn`^gFT(hO(%Pq;u~*_vn1z`Of8!zkmH5z;&!f z(WG$L^$L!i(WSr%USuX-=;@`I=gyKBMA4$qvtxD2DLIQ?rJ~S!m1b~FA(6~xb2X=e zwX8FD_{d4b(ZP9zmN74{4KyQWB7)W!6xvOg*ryO#wpJ(03MwnJohITkyU(urK69DW zmKzjhrOU(tSy3-z=)s{V4k{e26fIxprx%}SJIFlHrM&j7MOROHE-e#>(W}rrF>_9# zFZaY+v6fad6s68iMMbt^aJgrtB6YS~aF8zef9d@J&Sd%?hS+r_7PlZdrE}6({(8`X1Ufk%M-p8aLO0()s`e2K(voW!X?m;B8lu${T5JaMXt%Col6&9V#Pzu0 zM#?SUV_zN5I!0)X6WKaW?csALTruc#msXk{eY~f5&un5YmEOc7A)+}XVuU0By|_yF zIUcF==*K5Gj>n{;jFWhY0envQuL%4r!WU8whOpPRNLk~KPYL`puEi03gHutQZ*T97 z_5Kys>oKevEj)(=KA^TMAq534Gz3;#ffW{Eb6tt1>me?LV<3`x4ZR)42;*L6xvqqv zOuEsj9*V8G72p;T%UXBpHxw2+I=bQT?=_xoptL*QHU0~`(GahDE1tgn{*oyR8R-N|WBfqX%A4w4M_=MQ%C}jR+;xfKU8lek9LXnYbsIp8 zc9t@}OU~~x&m0b6iWR)i%1smR3?)0)Kx=x7)-OV literal 1758 zcma)6OH&(15dH>)7Q|vJJPp`!9Fri)zy|!tL$(tKFvu3h7(&1aiHFr7Ef%}VYQ@91 z9CHk(R4RwuIQW#5Ayql#2c#;0DCJ7!n_U&JaL8e1db)dh`s=S}{`}|nKLC6T*Fb~7 zg|b(4Y)iR;6YN-%J8E`qZp&Ho0s}FDt`pW7$8}b{YE>Y9n__TRpg)z%#=U|{pb;%5nhLyx~}ZNdZOHd^5tq-O?zcZCc4lq&^S3aD$ti-mz#2J+p5~iRhF|Mi^|IBIjf^z zFwv`>n?eI`%R8=mRNGip{(_Du(4O~fSzeUBqxW@XEGRj|+E>T--x6h+@HWSeK#N8n z0vG5$yC5t_!IxVCsnp4IZRu{xsx{@yO3AUSDa+2L(&@c#;w@ZB;6r2$d?e6$Rxg;it*=iMRWR<= zh|bq6-!<8U5rt!Vf6v6HdT&h5O)#fXt(!10c}zz?fhiNy$kDHA`%1Y>Bw#}8ADYM? z(=R9R2#*cS3S2$W9cP!@#2lWGM@>=KIRckY@pQbcCMI-$Hxz9$^uO2?Xd`v@^BGyG zw^v*STEX^Ao$9dgErt(B1mxjND~YOA3Slph%dk~eOnjva5a06ra$!l6^2~(9s%}pe zJTA)}dU{BL=e?S5tNV_A zQpsa~$%rNZS9rRSUk?zY#Q%V^!CjU67}x$x|Ha|o(40vY_L0aWf7-{n%&&N3A3eX& z+<-pL-8={+c(4_1{7O1F_u)MHsm(-Ta1ocdV?ew~s|cmblo~>b{mL{1-p17^0XoFP z#C9{UFt9vxfYeKU9NQcX7FpzF-?QQA(J0xNe zpGVceO?v1`iKC)xrhwsNfyH59fh8={F7Omz)I)eANuRirA&xIOSedV1!7d((YxX`t ma(kp&KN6qQ`rzpLb0IrpM0uU~Z-i->(FOH11j=F78~*}7QGX%; diff --git a/bin/logic/entity/GriszlyEye.class b/bin/logic/entity/GriszlyEye.class index 9b3ca58e1bb6194134f557a564cfb43d3dace32f..014521188d8e55de807a99ec3f8f7a2cfebfe10a 100644 GIT binary patch literal 3094 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 diff --git a/bin/logic/entity/MagicalTortoise.class b/bin/logic/entity/MagicalTortoise.class index d4788319e5f3714fdd9a5a8132afca1c297d1088..d8b2dcee310da8ceb84db5578da2d19a94c5c844 100644 GIT binary patch delta 298 zcmbQkzl48+yE1ELZen^WBZHJrR$^IVT7`aba%x_xK3G)W6C`In(bb5Ln}>m&frFEQ zmw}(1fp21~l7s*Q8zTdUZ%9yPdPa#MCj%pc5Dx<@1KY+Y-He933>G{LmdGlMKzglt z7;Hd-?7ksBsc9fxybN|c4E79cn-?&-F}W}@FoBFFS-`*xl(7QKfK0Rnvb2FJ1SfxDtp=Kq$L0hiH?qA30Nm9%SO5S3 delta 246 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 literal 6140 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 Cc!i<> diff --git a/bin/logic/entity/ShadowPot.class b/bin/logic/entity/ShadowPot.class index 8a4249beb45492596dde40b4529b75f86b7f5875..6f258d5e2222b7d5e9d0a74277d150887eb722d0 100644 GIT binary patch literal 2842 zcma)8X?GK46n>^lLem#0A#AonWsx+6Mv4nsD1`=SHHAtLDX!DWOEM+R#Ob6hxbM5T z0wOAUJl5lK+-U02bNt{(|BYWg>hZag(9L|X={s|C@4MXlJonx=zyI^|uK@O9CWsmX zt8-4qw&FVP+1{CWDr=^li9yE;qRv2gf$czEkDf8G#B!V*C*=(o{RRTN?Y!-E8)%O9 z_b1B>GUlj`AL1h^dv~=RH&EB>q;&|jXjBMdNduN*c@WDCTtAjIU7bEMJfbZxepKhv z+BJuBx{rrwSD^_jcxGzwsGZ4rI}BWx95KhuQ!*5?#v4+39_* zHVxE9+m4HUqrxV!FBkhh&oiyl`*V(Unwq4Y*N2Ov!`eM2fe^-|W0|?*rfbXhin7kj z+G7URRv=r9e;3i6eNE_0&OYm)nl!pEF@tm2@#8aMY=QCX)?8GfW+-#sppr3D3xD~gNo~${R z6@q zFAfBeFc7JhSqcZ`_)tcBy-ty#xsq3X3jOnwrc;!6DI`T1ObsUK*bdPhRyZjK7c>jo@|aUO&2)0` zNDu{9+XCbk%~No}WT_*!B!Ok;(@<0xpL2mMIG9v8b8Y63`1Gj4V=|}SKQ9E0C#2^* z$pfQ_M51~H3E;hWTHzTy%S1QR>BD+rE__yAH2EJ;{LW^0OzEm%lDNVwfNV`wHXxYA zLfZ8F*7%CTOK258UQ>7-Z%FBDZ!l+`(XN3t(YA%Blnv~9Z=x8)TRfm#Bb8QCHj6bI z!n-&h#Cryo%~kM#>5HO=!Ui>chAZE7{W`*uojH@)6W+Hlp_7WZtAZmReI?zaY9b11h z8*dAn=LS50Ry<573cNbcGW4ej!&?mQJi`-ER{LRJm<8nmXPXRsn6@Sa|H9@Vb~ZMy zYgqTE4;E9g!r26w6Igcq0zE{BG8`i%i%kBsuT7w{t8HKbxIPW(aEC2_`MGk94JDB;y)to}()99E&LoD1)feV{2AtLD~+m`TQB?E_Os7o^! z=b-O|q8GQ*mpdqRF_PWr#vUa296%3J*pHKJGMbvxyg`dNG%womO0)_i_!w6hTQ_#$ z6RxW9iD*Ra-xvtu&D#1kH1bDMC47sF8^S^C7dS%^d>X-L5quuO7c=;B8Y8}%{`(0N z!8iQ(4c{*2Aj#ir1LWYa@0BWVTJeh4?d*XED+jKve&7#t`-c3)N^##~^Y&ajyXQ3B Hu0iQvdgOS= literal 1929 zcma)6&sQ5&6#iZa85o8irj(XKe*!iHN(z>?np&-d0vcK*NTEvG$7DzbhnaLTDd5gO zK~|m~7u~UNr3bLbg$tMd5B?(__4vI>4gn4e7w^q|_uhBk{l0te{PFLvzXA9N6%7%A zF2^g_X3BB{JJ?R;iZbtQ&Ut}`s6hOfZPK+iwgqDMY}XF%3-lyrX0la}g50oDQ{1vD zSbA_#AUfgYEgcPLHqeMzGg{E9!4SAuE=u3ZKVDt8%pf&yxp~W%tBy78Ig|{vp1GJLV<4_>G=>I&_N?t%k189hmcO9F z5=GWCrL!n~Tb*mlXi&7v0_ST0PQp(Mh%K%eE@Ez007Gmf>~zdTocHCXKq7HGVN<%V zWH~kE%Tm!c%M+d(SX%)(QrTZNa0OTSK;HIAhwZs4Uj;bjNVky61-|VT(mMJuprK!& zfAjZZbOM199P2$EJ%WsAl%1TAn9x*Ro_UZDs1ipy#}bZ(0v+HOXy9ceT)vVFxpOX50{o_4{+^Absbw=5sbZ23H8J_fA8h@`fxmP zfaGi3-o?Ujd?b`(yO`$Pn+F){(4EFo^bJ~T8Si3*(jDf$i~du5J_s#3eLkc#M2`-x zkGV1jm{NEfLcB@nl;fPgPGpI2k$6^!>IKo1h~*nx#<%=Ye20OMi>?su&LI~&n8hRF zeat8w(EdihhQ5}T?&j{lLel5(d6f-}(?c;O>SU{`07FLtv*&9h3(O-&yTAgzsD=2G zAyxItN#a=KA~VZ-SScKeFU);{Q5c-GKJTbY^&g8u+ffvCR# diff --git a/bin/logic/game/GameLogic.class b/bin/logic/game/GameLogic.class index 75164ad2080ef012d07dad10d9849c127ef1c3a6..de792250460b760ee7ce21d732361c43d2d4de17 100644 GIT binary patch literal 5977 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 Y*L_IgGdFjv4~7fyMtq=jlcdW33vMP19RL6T diff --git a/bin/sharedObject/RenderableHolder.class b/bin/sharedObject/RenderableHolder.class index 5240fb24bb30c3ab036c5624d5692f285355d761..33f071fb346c4f525ed77cfbdf7a368856f8b8cf 100644 GIT binary patch literal 6692 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 literal 0 HcmV?d00001 diff --git a/src/Object/Projectile.java b/src/Object/Projectile.java new file mode 100644 index 0000000..1c8a80d --- /dev/null +++ b/src/Object/Projectile.java @@ -0,0 +1,108 @@ +package Object; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; +import logic.entity.Player; +import logic.game.GameLogic; +import sharedObject.IRenderable; +import sharedObject.RenderableHolder; + +public class Projectile implements IRenderable { + + protected double worldX, worldY; + public double screenX, screenY; + private Rectangle solidArea,solidScreen; + private double angle; + private int dmg, speed; + protected int z, radius; + protected boolean visible, destroyed; + public GameLogic gameLogic; + private double xspeed, yspeed; + + public Projectile(double worldX, double worldY, double angle, GameLogic gameLogic) { + this.worldX = worldX; + this.worldY = worldY; + this.gameLogic = gameLogic; + this.angle = angle; + this.speed = 3; + this.z = 10; + this.visible = true; + this.destroyed = false; + this.xspeed = Math.cos(angle) * speed; + this.yspeed = Math.sin(angle) * speed; + this.dmg = 5; + solidArea = new Rectangle(0, 0, 8, 8); + solidScreen = new Rectangle(screenX,screenY,8,8); + } + + public void update() { + worldX += xspeed; + worldY += yspeed; + screenX = worldX - gameLogic.getPlayer().getWorldX() + gameLogic.getPlayer().screenX; + screenY = worldY - gameLogic.getPlayer().getWorldY() + gameLogic.getPlayer().screenY; + solidArea.setX(screenX); + solidArea.setY(screenY); +// System.out.println("X =" + xspeed + " Y = " + yspeed); + boolean isOut = screenX < 0 || screenX > 1280 || screenY < 0 || screenY > 720; + if (isOut) { + destroyed = true; + } + checkEnemyHit(); + } + + public void checkEnemyHit() { + Player p =gameLogic.getPlayer(); + int x = (int) p.getScreenX(); + int y = (int) p.getScreenY(); + int width = (int) p.getSolidArea().getWidth(); + int height = (int) p.getSolidArea().getHeight(); + boolean overlap = solidArea.intersects(x,y,width,height); + System.out.println("Overlap = " + overlap); + System.out.println("X = " + x + " Y = " + y); + if (overlap) { + p.changeHealthTo(p.getCurrentHealth() - dmg); + destroyed = true; + } + solidArea.setX(screenX); + solidArea.setY(screenY); + } + + public Rectangle getSolidArea() { + return solidArea; + } + + @Override + public int getZ() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void draw(GraphicsContext gc) { + // TODO Auto-generated method stub + gc.drawImage(RenderableHolder.ball, screenX, screenY); + drawHitbox(gc); + } + + @Override + public boolean isDestroyed() { + // TODO Auto-generated method stub + + return destroyed; + } + + @Override + public boolean isVisible() { + // TODO Auto-generated method stub + return visible; + } + + // Debugger + public void drawHitbox(GraphicsContext gc) { + gc.setLineWidth(2); + gc.setFill(Color.RED); + gc.strokeRect(solidArea.getX(), solidArea.getY(), solidArea.getWidth(), + solidArea.getHeight()); + } +} diff --git a/src/logic/entity/Chicknight.java b/src/logic/entity/Chicknight.java index b52c5fd..41876f6 100644 --- a/src/logic/entity/Chicknight.java +++ b/src/logic/entity/Chicknight.java @@ -7,21 +7,17 @@ import logic.game.GameLogic; import sharedObject.RenderableHolder; -public class Chicknight extends Entity { - private double angle = 0; +public class Chicknight extends Enemy { + private Image image = RenderableHolder.CKRight; private String currentState = "default"; - // AttackBlock - private Rectangle attackBlock; - private int attackOffset; - public Chicknight(int x, int y, GameLogic gameLogic) { super(x,y,gameLogic); this.maxHp = 10; this.currentHealth = maxHp; this.dmg = 5; + this.z = -100; this.speed = 1; - image = RenderableHolder.CKRight; initSolidArea(); initAttackBlock(); } @@ -70,20 +66,14 @@ public void draw(GraphicsContext gc) { drawAttackBlock(gc); } - @Override - public void attack(Entity p) { - // TODO Auto-generated method stub - System.out.println(currentState); - ((Player) p).changeHealthTo(gameLogic.getPlayer().getCurrentHealth()-dmg); - System.out.println("SKDASDKLASMDKANDKLDKLMLWQD"); - - } + @Override public void update() { // TODO Auto-generated method stub - screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; - screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; + super.update(); + + Player player = gameLogic.getPlayer(); if (!canAttack(player.worldX, player.worldY, worldX, worldY, (int)(attackBlock.getWidth()+solidArea.getWidth()))) { angle = Math.atan2(player.worldY - worldY, player.worldX - worldX); @@ -117,7 +107,6 @@ public void update() { currentState = "attack"; attack(gameLogic.getPlayer()); } - updateAttackBlock(); } @@ -126,54 +115,15 @@ public void initSolidArea() { } public void initAttackBlock() { -// screenX = worldX-gameLogic.getPlayer().worldX+gameLogic.getPlayer().screenX; -// screenY = worldY-gameLogic.getPlayer().worldY+gameLogic.getPlayer().screenY; - attackBlock = new Rectangle(screenX, screenY, 10 * 2, 7 * 2); -// attackOffset = (int)(*2); - } - - public void checkEnemyHit(Rectangle attackBlock) { - int x = (int) getSolidArea().getX(); - int y = (int) getSolidArea().getY(); - int width = (int) getSolidArea().getWidth(); - int height = (int) getSolidArea().getHeight(); - boolean overlap = attackBlock.intersects(x,y,width,height); - if (overlap) this.attack(gameLogic.getPlayer()); - } - - public void updateAttackBlock() { - attackBlock.setX(screenX + solidArea.getX()); - attackBlock.setY(screenY + solidArea.getY()); - } - - public void changeHealthTo(int health) { - if (health>=maxHp) { - currentHealth = maxHp; - } - else if (health<=0) { - currentHealth = 0; - setDestroyed(true); - } - else { - currentHealth = health; -// System.out.println("Plathong" + currentHealth); - } + attackBlock = new Rectangle(screenX+solidArea.getWidth(), screenY, 10 * 2, 7 * 2); } - public int getCurrentHealth() { - return currentHealth; - } - - // for Debugging - public void drawHitbox(GraphicsContext gc) { - gc.setLineWidth(2); - gc.setFill(Color.PINK); - gc.strokeRect(screenX, screenY, 32, 64); - } - +// Debug Chick public void drawAttackBlock(GraphicsContext gc) { gc.setFill(Color.BLACK); - gc.strokeRect(attackBlock.getX()+solidArea.getWidth(), attackBlock.getY(), attackBlock.getWidth(), attackBlock.getHeight()); + gc.strokeRect(attackBlock.getX()+solidArea.getWidth(), attackBlock.getY(), attackBlock.getWidth(), + attackBlock.getHeight()); } + } diff --git a/src/logic/entity/Enemy.java b/src/logic/entity/Enemy.java index f09941c..758ab90 100644 --- a/src/logic/entity/Enemy.java +++ b/src/logic/entity/Enemy.java @@ -1,12 +1,78 @@ package logic.entity; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; import logic.game.GameLogic; public abstract class Enemy extends Entity{ + + protected double angle = 0; + protected String currentState; + public Enemy(int x, int y, GameLogic gameLogic) { super(x, y, gameLogic); // TODO Auto-generated constructor stub } + + public void changeHealthTo(int health) { + if (health>=maxHp) { + currentHealth = maxHp; + } + else if (health<=0) { + currentHealth = 0; + setDestroyed(true); + } + else { + currentHealth = health; +// System.out.println("Plathong" + currentHealth); + } + } + public boolean checkEnemyHit() { + Player p =gameLogic.getPlayer(); + int x = (int) p.getScreenX(); + int y = (int) p.getScreenY(); + int width = (int) p.getSolidArea().getWidth(); + int height = (int) p.getSolidArea().getHeight(); + boolean overlap = solidScreen.intersects(x,y,width,height); +// System.out.println("Overlap = " + overlap); +// System.out.println("X = " + x + " Y = " + y); + return overlap; + + } + + public int getCurrentHealth() { + return currentHealth; + } + + public void attack(Entity p) { + // TODO Auto-generated method stub + System.out.println(this.getClass().getSimpleName()+"Attack"); + if (checkEnemyHit()) ((Player) p).changeHealthTo(gameLogic.getPlayer().getCurrentHealth()-dmg); + } + + //Debugger + public void drawHitbox(GraphicsContext gc) { + gc.setLineWidth(2); + gc.setFill(Color.PINK); + gc.strokeRect(solidScreen.getX(), solidScreen.getY(), solidScreen.getWidth(), solidScreen.getHeight()); + } - protected String currentState = "alive"; + public void drawAttackBlock(GraphicsContext gc) { + gc.setFill(Color.BLACK); + gc.strokeRect(solidArea.getX(), attackBlock.getY(), attackBlock.getWidth(), + attackBlock.getHeight()); + } + + public void updateAttackBlock() { + attackBlock.setX(screenX); + attackBlock.setY(screenY); + } + + public void update() { + super.update(); + solidScreen = new Rectangle(screenX+solidArea.getX(),screenY+solidArea.getY(),solidArea.getWidth(),solidArea.getHeight()); + } + public abstract void initSolidArea(); + public abstract void initAttackBlock(); } diff --git a/src/logic/entity/Entity.java b/src/logic/entity/Entity.java index d1a8621..cbadf88 100644 --- a/src/logic/entity/Entity.java +++ b/src/logic/entity/Entity.java @@ -5,22 +5,27 @@ import logic.game.GameLogic; import sharedObject.IRenderable; -public abstract class Entity implements IRenderable{ - protected double worldX,worldY; - public double screenX,screenY; - protected int z,radius; - protected boolean visible,destroyed; +public abstract class Entity implements IRenderable { + protected double worldX, worldY; + public double screenX, screenY; + protected int z, radius; + protected boolean visible, destroyed; protected int speed; protected String direction; - public Rectangle solidArea; + protected Image image; + public Rectangle solidArea,solidScreen; public boolean collisionOn = false; public GameLogic gameLogic; + + // Status protected int maxHp; protected int currentHealth; protected int dmg; - protected Image image; - - public Entity(int x, int y,GameLogic gameLogic){ + + // AttackBlock + protected Rectangle attackBlock; + + public Entity(int x, int y, GameLogic gameLogic) { visible = true; destroyed = false; worldX = x; @@ -28,14 +33,18 @@ public Entity(int x, int y,GameLogic gameLogic){ this.gameLogic = gameLogic; this.direction = "right"; } - + public abstract void attack(Entity t); - public abstract void update(); - - public boolean canAttack(double x1,double y1,double x2,double y2,int attackRange) { - return (Math.abs(x1-x2) < attackRange && Math.abs(y1-y2) < attackRange); + + public void update() { + screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; + screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; } - + + public boolean canAttack(double x1, double y1, double x2, double y2, int attackRange) { + return (Math.abs(x1 - x2) < attackRange && Math.abs(y1 - y2) < attackRange); + } + @Override public int getZ() { // TODO Auto-generated method stub @@ -60,8 +69,8 @@ public double getWorldX() { public double getWorldY() { return worldY; - } - + } + public String getDirection() { return direction; } @@ -89,7 +98,7 @@ public Rectangle getSolidArea() { public boolean isCollisionOn() { return collisionOn; } - + public void setCollisionOn(boolean collisionOn) { this.collisionOn = collisionOn; } @@ -97,5 +106,5 @@ public void setCollisionOn(boolean collisionOn) { public void setDestroyed(boolean destroyed) { this.destroyed = destroyed; } - + } diff --git a/src/logic/entity/EyeOfQwifot.java b/src/logic/entity/EyeOfQwifot.java index 21a9844..d01cd84 100644 --- a/src/logic/entity/EyeOfQwifot.java +++ b/src/logic/entity/EyeOfQwifot.java @@ -1,54 +1,86 @@ package logic.entity; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.shape.Rectangle; import logic.game.GameLogic; import sharedObject.RenderableHolder; public class EyeOfQwifot extends Miniboss{ - public EyeOfQwifot(int x, int y, GameLogic gameLogic) { - super(x, y, gameLogic); - maxHp = 100; - z = -100; - image = RenderableHolder.EQ1; - // TODO Auto-generated constructor stub - } + public EyeOfQwifot(int x, int y, GameLogic gameLogic) { + super(x, y, gameLogic); + maxHp = 100; + currentHealth = maxHp; + z = -100; + image = RenderableHolder.EQ1; + currentState = "alive"; +// initAttackBlock(); + initSolidArea(); + // TODO Auto-generated constructor stub + } - @Override - public void draw(GraphicsContext gc) { - // TODO Auto-generated method stub - switch(currentState) { - case "alive": - if (gameLogic.getCounter()/10%2==1) - image = RenderableHolder.EQ1; - - else - image = RenderableHolder.EQ2; - break; - case "dead": - if (gameLogic.getCounter()/10%2==1) - image = RenderableHolder.EQDead1; - - else - image = RenderableHolder.EQDead2; - break; - } - gc.drawImage(image,screenX,screenY); - // TODO Auto-generated method stub - - } + @Override + public void draw(GraphicsContext gc) { + // TODO Auto-generated method stub + switch(currentState) { + case "alive": + if (gameLogic.getCounter()/10%2==1) + image = RenderableHolder.EQ1; + + else + image = RenderableHolder.EQ2; + break; + case "dead": + if (gameLogic.getCounter()/10%2==1) + image = RenderableHolder.EQDead1; + + else + image = RenderableHolder.EQDead2; + break; + } + gc.drawImage(image,screenX,screenY); + // TODO Auto-generated method stub + drawHitbox(gc); + + } + + @Override + public void attack(Entity t) { + // TODO Auto-generated method stub + + } + + @Override + public void update() { + // TODO Auto-generated method stub + super.update(); + } @Override - public void attack(Entity t) { + public void initSolidArea() { // TODO Auto-generated method stub - + solidArea = new Rectangle(0,0,256,256); + } @Override - public void update() { + public void initAttackBlock() { // TODO Auto-generated method stub - screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; - screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; +// solidArea = new Rectangle(0,0,256,256); + } + + public void changeHealthTo(int health) { + if (health>=maxHp) { + currentHealth = maxHp; + } + else if (health<=0) { + currentHealth = 0; + currentState = "dead"; + } + else { + currentHealth = health; +// System.out.println("Plathong" + currentHealth); + } } -} +} \ No newline at end of file diff --git a/src/logic/entity/GriszlyEye.java b/src/logic/entity/GriszlyEye.java index 8e5b5f4..d5d8b84 100644 --- a/src/logic/entity/GriszlyEye.java +++ b/src/logic/entity/GriszlyEye.java @@ -2,71 +2,81 @@ import javafx.scene.canvas.GraphicsContext; import javafx.scene.image.Image; +import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import logic.game.GameLogic; import sharedObject.RenderableHolder; -public class GriszlyEye extends Entity{ +public class GriszlyEye extends Enemy { private double angle = 0; public String currentState = "default"; - public GriszlyEye(int x,int y,GameLogic gameLogic) { - super(x,y,gameLogic); - this.speed =3; - solidArea = new Rectangle(20,0,24,32); - image = RenderableHolder.GERight; + + public GriszlyEye(int x, int y, GameLogic gameLogic) { + super(x, y, gameLogic); + this.maxHp = 10; + this.currentHealth = maxHp; + this.dmg = 3; + this.z = -100; + this.speed = 3; + this.dmg = 3; + this.image = RenderableHolder.GERight; + initSolidArea(); + initAttackBlock(); } + + @Override public void draw(GraphicsContext gc) { // TODO Auto-generated method stub - switch(direction) { + switch (direction) { case "right": - if(currentState=="default") - image = RenderableHolder.GERight; + if (currentState == "default") + image = RenderableHolder.GERight; else { - if (gameLogic.getCounter()/10%2==1) { + if (gameLogic.getCounter() / 10 % 2 == 1) { image = RenderableHolder.GERightWalk; - } - else + } else image = RenderableHolder.GERightWalk2; } break; case "left": - if(currentState=="default") - image = RenderableHolder.GELeft; + if (currentState == "default") + image = RenderableHolder.GELeft; else { - if (gameLogic.getCounter()/10%2==1) { + if (gameLogic.getCounter() / 10 % 2 == 1) { image = RenderableHolder.GELeftWalk; - } - else + } else image = RenderableHolder.GELeftWalk2; } break; } gc.drawImage(image, screenX, screenY); + drawHitbox(gc); +// drawAttackBlock(gc); } - - @Override - public void attack(Entity p) { - // TODO Auto-generated method stub - - } +// @Override +// public void attack(Entity p) { +// // TODO Auto-generated method stub +// System.out.println("GrsizlyEye Attack"); +// +// ((Player) p).changeHealthTo(gameLogic.getPlayer().getCurrentHealth()-dmg); +// } @Override public void update() { // TODO Auto-generated method stub - screenX = worldX-gameLogic.getPlayer().worldX+gameLogic.getPlayer().screenX; - screenY = worldY-gameLogic.getPlayer().worldY+gameLogic.getPlayer().screenY; + super.update(); Player player = gameLogic.getPlayer(); if (!canAttack(player.worldX, player.worldY, worldX, worldY, 24)) { - angle = Math.atan2(player.worldY-worldY,player.worldX-worldX); + angle = Math.atan2(player.worldY - worldY, player.worldX - worldX); double xspeed = Math.cos(angle) * speed; double yspeed = Math.sin(angle) * speed; currentState = "walking"; - if(yspeed<0) + if (yspeed < 0) direction = "up"; else direction = "down"; @@ -75,24 +85,39 @@ public void update() { if (collisionOn == false) { worldY += yspeed; - } - - if (xspeed<0) + } + + if (xspeed < 0) direction = "left"; - else direction = "right"; - + else + direction = "right"; + setCollisionOn(false); gameLogic.checkTile(this); if (collisionOn == false) { - worldX += xspeed; + worldX += xspeed; } - + } - + else { currentState = "default"; attack(gameLogic.getPlayer()); } + updateAttackBlock(); } + + public void initSolidArea() { + solidArea = new Rectangle(20, 0, 24, 32); + solidScreen = new Rectangle(screenX,screenY,8,8); + + } + + public void initAttackBlock() { + attackBlock = new Rectangle(20, 0, 24, 32); + + } + + } diff --git a/src/logic/entity/MagicalTortoise.java b/src/logic/entity/MagicalTortoise.java index 755cc74..c784edb 100644 --- a/src/logic/entity/MagicalTortoise.java +++ b/src/logic/entity/MagicalTortoise.java @@ -6,9 +6,9 @@ import sharedObject.RenderableHolder; public class MagicalTortoise extends Entity{ + private Image image = RenderableHolder.MTRight1; public MagicalTortoise(int x, int y, GameLogic gameLogic) { super(x, y, gameLogic); - image = RenderableHolder.MTRight1; // TODO Auto-generated constructor stub } diff --git a/src/logic/entity/Player.java b/src/logic/entity/Player.java index 0d3869d..776b767 100644 --- a/src/logic/entity/Player.java +++ b/src/logic/entity/Player.java @@ -28,8 +28,10 @@ public class Player extends Entity{ private int healthBarY = (int) (11*1.5); //Status + protected int maxHp = 100; + protected int currentHealth = maxHp; protected float healthWidth = healthBarWidth; - + protected int dmg = 5; protected int iframe = 0; //AttackBlock @@ -40,13 +42,7 @@ public Player(int x, int y,GameLogic gameLogic) { super(x,y,gameLogic); this.speed = 3; this.radius = 32; - - maxHp = 100; - currentHealth = maxHp; - dmg = 5; - - image = RenderableHolder.playerRight; - + screenX = gameLogic.getGameScreen().getWidth()/2-radius; screenY = gameLogic.getGameScreen().getHeight()/2-radius; initSolidArea(); @@ -55,17 +51,18 @@ public Player(int x, int y,GameLogic gameLogic) { @Override public void draw(GraphicsContext gc) { int count = 0; + Image playerImage = RenderableHolder.playerRight; // TODO Auto-generated method stub switch(direction) { case "left": - image = (RenderableHolder.playerLeft); + playerImage = (RenderableHolder.playerLeft); break; case "right": - image = RenderableHolder.playerRight; + playerImage = RenderableHolder.playerRight; break; } - gc.drawImage(image , screenX, screenY); + gc.drawImage(playerImage , screenX, screenY); drawUI(gc); //Debugging @@ -90,13 +87,14 @@ public void drawAttackBlock(GraphicsContext gc){ gc.strokeRect(attackBlock.getX(), attackBlock.getY(), attackBlock.getWidth(),attackBlock.getHeight()); } - public void attack(Entity enemy) { + public void attack(Entity e) { attackState = "yes"; - ((Chicknight)enemy).changeHealthTo(((Chicknight)enemy).getCurrentHealth()-dmg); + System.out.println("Player Attack "+e.getClass().getSimpleName()); + ((Enemy)e).changeHealthTo(((Enemy)e).getCurrentHealth()-dmg); } - + @Override public void update() { // TODO Auto-generated method stub direction = ""; @@ -144,12 +142,15 @@ public void update() { } if (InputUtility.isLeftClickTriggered()) { for (Entity entity: gameLogic.getGameObjectContainer()) { - if ((entity instanceof Chicknight)) { - Chicknight enemy = ((Chicknight)entity); + if ((entity instanceof Enemy)) { + Enemy enemy = ((Enemy)entity); boolean canAtk = canAttack(worldX,worldY,enemy.getWorldX(),enemy.getWorldY(),(int) (solidArea.getWidth()+attackBlock.getWidth())); if (canAtk) { attack(entity); } + if(enemy instanceof EyeOfQwifot) { + System.out.println(enemy.solidScreen.getWidth()+" "+enemy.solidScreen.getHeight()); + } } } diff --git a/src/logic/entity/ShadowPot.java b/src/logic/entity/ShadowPot.java index 052f369..bfe56bd 100644 --- a/src/logic/entity/ShadowPot.java +++ b/src/logic/entity/ShadowPot.java @@ -1,58 +1,86 @@ package logic.entity; +import Object.Projectile; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.shape.Rectangle; import logic.game.GameLogic; import sharedObject.RenderableHolder; public class ShadowPot extends Enemy{ + + private int cooldown; + public ShadowPot(int x, int y, GameLogic gameLogic) { + super(x, y, gameLogic); + image = RenderableHolder.SPRight1; + maxHp = 10; + currentHealth = maxHp; + cooldown = 1*60; + initSolidArea(); + initAttackBlock(); + } - public ShadowPot(int x, int y, GameLogic gameLogic) { - super(x, y, gameLogic); - image = RenderableHolder.SPRight1; - // TODO Auto-generated constructor stub - } + @Override + public void draw(GraphicsContext gc) { + // TODO Auto-generated method stub + switch(direction) { + case "right": + if (gameLogic.getCounter()/10%2==1) + image = RenderableHolder.SPRight1; - @Override - public void draw(GraphicsContext gc) { - // TODO Auto-generated method stub - switch(direction) { - case "right": - if (gameLogic.getCounter()/10%2==1) - image = RenderableHolder.SPRight1; - - else - image = RenderableHolder.SPRight2; - break; - case "left": - if (gameLogic.getCounter()/10%2==1) - image = RenderableHolder.SPLeft1; - - else - image = RenderableHolder.SPLeft2; - - break; - } - gc.drawImage(image, screenX, screenY); - // TODO Auto-generated method stub - } + else + image = RenderableHolder.SPRight2; + break; + case "left": + if (gameLogic.getCounter()/10%2==1) + image = RenderableHolder.SPLeft1; + + else + image = RenderableHolder.SPLeft2; + + break; + } + gc.drawImage(image, screenX, screenY); + // TODO Auto-generated method stub + drawHitbox(gc); + } + + @Override + public void attack(Entity t) { + // TODO Auto-generated method stub + Projectile projectile = new Projectile(worldX+solidArea.getX(), worldY+solidArea.getY(), angle,gameLogic); + gameLogic.addNewProjectile(projectile); + } + + @Override + public void update() { + // TODO Auto-generated method stub + super.update(); + Player player = gameLogic.getPlayer(); + angle = Math.atan2(player.worldY - worldY, player.worldX - worldX); + double xDirection = Math.cos(Math.atan2(player.worldY-worldY,player.worldX-worldX)); + if(xDirection<0) + direction = "left"; + else + direction = "right"; + + if(cooldown==0) { + attack(gameLogic.getPlayer()); + cooldown = 1*60; + } + cooldown--; + } @Override - public void attack(Entity t) { + public void initSolidArea() { // TODO Auto-generated method stub - + solidArea = new Rectangle(16,24,32,40); + solidScreen = new Rectangle(screenX,screenY,8,8); } @Override - public void update() { + public void initAttackBlock() { // TODO Auto-generated method stub - screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; - screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; - Player player = gameLogic.getPlayer(); - double xDirection = Math.cos(Math.atan2(player.worldY-worldY,player.worldX-worldX)); - if(xDirection<0) - direction = "left"; - else - direction = "right"; + attackBlock = new Rectangle(16,24,32,40); } -} +} \ No newline at end of file diff --git a/src/logic/game/GameLogic.java b/src/logic/game/GameLogic.java index 305a90c..0cfd6dd 100644 --- a/src/logic/game/GameLogic.java +++ b/src/logic/game/GameLogic.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.List; +import Object.Projectile; import drawing.GameScreen; import input.InputUtility; import javafx.scene.canvas.GraphicsContext; @@ -20,13 +21,16 @@ public class GameLogic { private ArrayList gameObjectContainer; + private ArrayList projectilesContainer; private static int counter = 0; private GameScreen gameScreen; private Player player; private Chicknight ck1; - private GriszlyEye ge1; - private MagicalTortoise mg; + private GriszlyEye GE1; + private MagicalTortoise MG; + private EyeOfQwifot EQ; + private ShadowPot SP; private Map1 map; //GameState @@ -36,6 +40,7 @@ public class GameLogic { public GameLogic(GameScreen gameScreen){ this.gameObjectContainer = new ArrayList(); + this.projectilesContainer = new ArrayList(); this.gameScreen = gameScreen; player = new Player(384,288,this); @@ -43,16 +48,16 @@ public GameLogic(GameScreen gameScreen){ RenderableHolder.getInstance().add(map); ck1 = new Chicknight(200,0,this); - mg = new MagicalTortoise(200,200,this); - ge1 = new GriszlyEye(200,200,this); - EyeOfQwifot eq = new EyeOfQwifot(500, 500, this); - ShadowPot sp = new ShadowPot(300, 200, this); + MG = new MagicalTortoise(200,200,this); + GE1 = new GriszlyEye(200,200,this); + EQ = new EyeOfQwifot(780, 780 , this); + SP = new ShadowPot(300, 500, this); addNewObject(player); addNewObject(ck1); - addNewObject(mg); - addNewObject(ge1); - addNewObject(eq); - addNewObject(sp); + addNewObject(MG); + addNewObject(GE1); + addNewObject(EQ); + addNewObject(SP); } public GameScreen getGameScreen() { @@ -63,6 +68,12 @@ protected void addNewObject(Entity entity){ gameObjectContainer.add(entity); RenderableHolder.getInstance().add(entity); } + + public void addNewProjectile(Projectile p){ + projectilesContainer.add(p); + RenderableHolder.getInstance().add(p); + } + public void checkTile(Entity entity) { int entityLeftWorldX = (int) (entity.getWorldX() + entity.solidArea.getX()); int entityRightWorldX = (int) (entity.getWorldX() + entity.solidArea.getX() + entity.solidArea.getWidth()); @@ -144,6 +155,11 @@ public void logicUpdate(){ if (objectContainer.get(i).isDestroyed()) getGameObjectContainer().remove(objectContainer.get(i)); } + ArrayList projectileContainer = getProjectileContainer(); + for (int i = 0 ;i getGameObjectContainer(){ return gameObjectContainer; } + public ArrayList getProjectileContainer(){ + return projectilesContainer; + } + } diff --git a/src/sharedObject/RenderableHolder.java b/src/sharedObject/RenderableHolder.java index d908f80..008ebe0 100644 --- a/src/sharedObject/RenderableHolder.java +++ b/src/sharedObject/RenderableHolder.java @@ -28,7 +28,7 @@ public class RenderableHolder { public static Image pauseOverlay,pauseMenu, soundButton, urm, volumeButton; public static Image GELeft, GELeftWalk, GELeftWalk2, GERight, GERightWalk, GERightWalk2; public static Image MTLeft1, MTLeft2, MTRight1, MTRight2; - public static Image SPLeft1,SPLeft2,SPRight2,SPRight1,SPLeftAtk,SPRightAtk; + public static Image SPLeft1,SPLeft2,SPRight2,SPRight1,SPLeftAtk,SPRightAtk,ball; public static Image EQ1,EQ2,EQDead1,EQDead2; public static Image moonSprite; public static Image healthBar; @@ -95,6 +95,7 @@ public static void loadResource() { SPRight1 = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotRight1.png").toString()); SPRight2 = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotRight2.png").toString()); SPRightAtk = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotRightAtk.png").toString()); + ball = new Image(ClassLoader.getSystemResource("ShadowPot/ball.png").toString()); //Eye of Qwifot EQ1 = new Image(ClassLoader.getSystemResource("EyeOfQwifot/EyeOfQwifot1.png").toString()); EQ2 = new Image(ClassLoader.getSystemResource("EyeOfQwifot/EyeOfQwifot2.png").toString());