From a63eac1ed21f84156a9250e8ce5064c42bac732d Mon Sep 17 00:00:00 2001 From: GriszlyExe Date: Thu, 18 May 2023 20:38:02 +0700 Subject: [PATCH] Hi --- res/EyeOfQwifot/EyeOfQwifot1.png | Bin 0 -> 8333 bytes res/EyeOfQwifot/EyeOfQwifot2.png | Bin 0 -> 8664 bytes res/EyeOfQwifot/EyeOfQwifotDead1.png | Bin 0 -> 8846 bytes res/EyeOfQwifot/EyeOfQwifotDead2.png | Bin 0 -> 8483 bytes res/ShadowPot/ShadowPotLeft1.png | Bin 0 -> 1891 bytes res/ShadowPot/ShadowPotLeft2.png | Bin 0 -> 1887 bytes res/ShadowPot/ShadowPotLeftAtk.png | Bin 0 -> 1915 bytes res/ShadowPot/ShadowPotRight1.png | Bin 0 -> 1880 bytes res/ShadowPot/ShadowPotRight2.png | Bin 0 -> 1886 bytes res/ShadowPot/ShadowPotRightAtk.png | Bin 0 -> 1906 bytes res/ShadowPot/ball.png | Bin 0 -> 1476 bytes res/health_power_bar.png | Bin 1448 -> 1483 bytes src/Object/Projectile.java | 108 +++++++++++++++++++++++++ src/logic/entity/Chicknight.java | 74 +++-------------- src/logic/entity/Enemy.java | 75 +++++++++++++++++ src/logic/entity/Entity.java | 45 +++++++---- src/logic/entity/EyeOfQwifot.java | 88 ++++++++++++++++++++ src/logic/entity/GriszlyEye.java | 97 ++++++++++++++-------- src/logic/entity/MiniBoss.java | 16 ++++ src/logic/entity/Player.java | 9 ++- src/logic/entity/ShadowPot.java | 86 +++++++++++++++++++- src/logic/game/GameLogic.java | 26 ++++++ src/logic/weapon/BaseWeapon.java | 5 -- src/sharedObject/RenderableHolder.java | 50 ++++++++---- 24 files changed, 538 insertions(+), 141 deletions(-) create mode 100644 res/EyeOfQwifot/EyeOfQwifot1.png create mode 100644 res/EyeOfQwifot/EyeOfQwifot2.png create mode 100644 res/EyeOfQwifot/EyeOfQwifotDead1.png create mode 100644 res/EyeOfQwifot/EyeOfQwifotDead2.png create mode 100644 res/ShadowPot/ShadowPotLeft1.png create mode 100644 res/ShadowPot/ShadowPotLeft2.png create mode 100644 res/ShadowPot/ShadowPotLeftAtk.png create mode 100644 res/ShadowPot/ShadowPotRight1.png create mode 100644 res/ShadowPot/ShadowPotRight2.png create mode 100644 res/ShadowPot/ShadowPotRightAtk.png create mode 100644 res/ShadowPot/ball.png create mode 100644 src/Object/Projectile.java create mode 100644 src/logic/entity/Enemy.java create mode 100644 src/logic/entity/EyeOfQwifot.java create mode 100644 src/logic/entity/MiniBoss.java delete mode 100644 src/logic/weapon/BaseWeapon.java diff --git a/res/EyeOfQwifot/EyeOfQwifot1.png b/res/EyeOfQwifot/EyeOfQwifot1.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcf7d9a4a94815c85af16facc2f34f1a9560bcf GIT binary patch literal 8333 zcmai32Q(b-yPjQ()prqOwbi1xDA6q;dI=(0^xk$YS)J9p5H$!A5rQBQLJ%8K(h$*W zlqk_lqC~rr-@o7gJ$KHTnQz{Cp0_;j_nnzDlVGT?K}C)r2LOOdOH<7V06^zM5CA1P zKUrbRozE|ByIs9%=y6r!D%ul`HOAOEIH|e$Vm$2v4J818Fa35}tIk_P`c8vNqt9~j z)T}I*6Rr+^A;ds5`Ow|uKVUa|V~(kfH^KN|U}~iBsRB9v zM%RGp9FuX*>F$LSnF8M?D+06OMZrBV-}mfv-Hu1~gRi~?N5vHyS2#Z}e<(zLdeXeQ z+y8UgAl_WB83!9Pu*&Hb$-xzZjl)lF4Hdo5L!5jaR7ttWFq58;<&{J>&BG?{%0E{z z)AF%9azLa=zA($N;2_)V3%Pr2qn1#a{EraQoJ6Om^--hKMMF1pI$2h(f3l;y#FS`w zJpw{J8-6^Hs+=l}y=iMGatAE*K}`!z_q=2G^8-8D%RW$*m9$3R)i9c;NAJD7HZSCQ zVR}W!$5n}B?mx&Fnivm&Fd+c%6342 zxi0|F>;2wAnIBR_0e~pX&BV;lOix$N0qrGX=ZLm<5()6a{9!2s$ejyhO%G1%|A8|0Zv7UdTI68Y;c7l7zx zF)u>yT2|V3?D=X(|=k21% z86fQFhW8&=jz|@(pFbMwp&}Sy(p*EpI<3ECzc%%l<_Cd%XV} z@t?l_8T^K~o1fC(9sGy+Us(UrCAq%|XY!{b|69)g6Z$uIe@Xip_WJ zLG&MMONsoXx9|V}m=RiPDkcG-^;;BoCmX2!tQS&cwe-_74l=`%e(oXO&XRJ2Xdj8) zVAi5fFevGN*tL4ledoZBV{5bR?DSz#wYvVLBHAN5}uoRQ(5ix+3$tO)7*s?kjQq1^_XledQknJ-3xj2{u zP{o%dM5FX{DUx{!%vK1n7+}>>M2%cSn7woxc3o~qhT3MK=NfB`D^^run_Y4`bk$jh;lnK1mkHUo$h90ZL9 zmhCQPgCpi)P>^e;=fGa(X~XP~zV1!I8@=3BMv|=YrbRT zS-|THsqeFTe8UpLjxj&UfqEX>!zSNi+5Y=+uY?uamt_j5=VmZ=x5x+>hF}IZtrbPX z&|qTcB75YRX|SuRR>9YcY&cr*XY<+`o5ERxy3uKzz2<;~47J%a%Q=;RwdY3;vag8_ zqSSw`CDn#dODPq)hA8yP!+>gbs*z^`kKH+DoJnWQeN>D{l5%w{L< zwZ@*=QOC1lkeLfVT~BW+G}x#>O(A!s&(;mX+XvSL2_#!3hd2Gk8fhvF23=X&*0dSr z@g{+F>El!+Pu6PdYmqLACZXNmt6QDGz|o_Ro0fX zST;II4v{$0awuqV_w!I90U7Eyu#+_?mrLVg6t?xUS;1PEVU{Bgb z6(`_hpy#!XtSf`&tpS-dEuNBDI@BDN1w;X7y5l^hy$?3TbLO=Hx|9YS#qE_Ju6hW_ zBz5wVGzDm&KXdn@m;|DDWcYdP^j` zPt&y-c!;ksP~2_YR;+UBGZ~A@fpXJSd8zEnD5(NLw24g-_{(5!upWoZvqLi8eK5=* z+(|C3={h8jGYzqKdTOx!iUIF>nrYgDK-@W3&NVkW?WI;U{ z@h@U+A~6@QEibpwfY;IE#gzd@O&xjhMDAGHP;hO%nWu9kGtec5v0*FHe zzH@Efgc!jCT37eoUjhf}mpCaPa&VdJ5F9y5;Y6N{VSp&26v}iKNkoP^hLBvr+PW3> z%1qP~#h0Dw4%t8ThosK>8v~R$P&a=5z7yOADVBsX2Ao+texYU_K+BbvDcQO{o-rA+ zX2#tW{Gvnzl6q|^sjOl)1uFPKLFKZ=@sJV{!eMv;STGzKG?c9tV}zPGP0-mW5Iu9ok}@=z>xx%vf-1E6u%ytC8(N zq@OQ*%D7ZCY$*I}_HfI$!p&nnW92lfGXEC76zCWz63@?zM9dB^YUUR#z3(Ht>n9S$ zug}Q!x&DHRXS=W#lt60Be@OP0R~khfS7xsg7#{lkK?|3ob;k0%AAVCcznk} z_7M?^-bXZGqM|tXMK=Rh*;tzP%~H~VFpnQ&^wTe7Z~z?)+ur^uDn2Q5C^ec@taBR_ zAngxw2V5v)07sM?RYXDVK5&=w#x7Saq|2`(w`rGDE?_L|+m69Y?ht*uVC>I5_6}|q zQ`+4TQD(EVUzJ)Q>z#!qmd&ADQQf^dXp^0)tT^8 zTix(^g&dhp4I~7Gzo@BUESzxD{hCVrim~>yHCmFHREwE-pWDDNVscLr1x1y9Mqbo= z#%b}SU%<|*H7m)#l&_e&oQhSv;Q|xU((pt$xhw=}ER&YxZJsVTqIu6SmFdHRy)bz> z#Sr<=_EC6oE2-NqPhWFU4%`bgdbdO88XY5&R@aqIV1#e$_JnxPkT%S)Bq`dK|H9+b zJE$hKaL%=wZ^;>Py0lMFLR5@{lx|mDM;D~a-#k(dnX2%$wT&UFxhe3i606YPmkAW) zVh|F%Nx1n8QNi}Iz*>)AT%}+7mLx07#FHKbx$}^;ggq(0Nrc7j&fgCY<@CD|=U%QrkJ zu^h|@oaD|>*T&!!VdWO#1yHc32;>#fsU;B*IBsdPfr?`UdmXP2T8=lGKtFwDegM4X zbp6G8$nNU^{FS!H9-aRh)&rDg^Hp@b_TF05ohN+83HlH7w zIMQ2Hj*c6YF)$&%p$}*FZywFR)>+ESrK2GbV@kgHj~rC|&bW%)?-8t}k?$a$wW^<+ z!?Pjvp7WaNVfLNL(4GA4`}wc@bn8fFAWQGRI3jw#@G2BpH+L`9_m&YCFW8QRTAR=Z zNiyht`Pq@?hH?+9-w)FgdPxCld~?Y8rgNeoeO-A$j0dnTI_0}`fsvR^m`Um^^-kR4 z*L43H11cX9jrc1w`e+u0-J3r~G66GgMGrb+wd*cx>bqwueXIHayq6rbL?Hv2xWeAK znbG8*dVze1NQt~VX{?UT*I!EM*ro8aabdBMxdZ{LJBZNu=8&yZFC)Lv`onEJsbnI2 zN4bS4esPn}rhCwQ2iKUFw<6nX?lY&?*J(>GR+bb;OfXjBqZPG6htyfVvkq@MEX-ed z5g?@ogn-+yOa)4~7{Cy2Sd||6>8?|U%d5o~iyFs;^TV*)Tkdtx+)z42ZlJK?Od_Tq z2}Rf~E;l7O@9aD`t?ZSs8ffPXJu9l0=LYKZ>xWB_hTqwm*$RItZU+?xC*o6v3l4}= zBYX>2`{^d0f$^%vVv1UKXdiUPIf_X2^7nAPUy7DR)RXQrEP3o8J_`eE4QG5P^se!? z6twvI!35&$QOGq}!XXK@JI1c7>k~WZ?pJS6E}5x=Fn*~sZIo5`RR?afAS17o_hrTo zB9sZXNl={QJQ$72C~MLn0|?hZk5Jckb<%^TTdsR!s3UWRm)*ian%itV02gqFA)w=C z)!{)~dRRz}&$vq_mleeHo9FhgDIS0Uq!|(QVGpllVdkdWx~uP*+RM_ndRhZX5abF0 zu_qMGxbiw%midzrsx?7EgzOG+Bi)3lepwpVu*k*T{FMw})>%CoQH?`~dVL|F?yGd_ zrOy+`CE7{|o2q7-h>LK*#y~|~2#}`*=NiSZ@=vC=i0lWhc>pyZp*aNOt?Y>bxsfoc zO*oKYqs9j!f`Q!K*t#^xW9tP|>Dj|f4=mTBuAFSwfC%2v#xsHk6qeR^6v4F$r1&wc zf>C+4UgZ&Q8~aVM2alIH4etdFKZW;`pbcQ49PnqNNv)o6hM!y(sVLDtA$6bzg!uZg zi4Krd2EM6l_5~;1tq%VnRcJ4x#DiW}2tF4-YG8cZb<~#!0LTeLv}?lGdWI{4YwvDy+^I;gUL!bRn%!IGFRgm0nInqXVoGR(k+@R)uL+QFf)8FjA~H@-b*DW2Z&J&W*;UM;iyAiF+*a zSX!D6c^}Az1sY@&WUs|Hsz4RK3BZ8?86MkYyeHy?!#ts4$glCvp*Da2TlKAPwGq=5^uY_f%0K3(E(aJ`SiD46k|j0*v33&F_&jqUZ5~|i%kNG z4KBkWio`JmUjox^L>?{2Xgzw~ERxWZ4Nx+B%aQ_3fwX|{s{N<^v%3`Xsl0>V z>8W2rP_3rIo$|yow{4{_h8P)pM>Z}q(7Z7>c_9cyTuk7=AvxewxTzB{5l{W)%^~OD$8`!z}p`0+5q->TqpS zn;>esSIeYwx)I;(-F=u9BiP=L)gmk}0j6ZpQ-Kf$@@@wk8VgRmfPNzC_C7KDaibcL zMxU8Vidr(le7WuOGzo9ds+}^eXE;TSwv+z-*kOk&uT#Zg0veYDO9of5sL>FaflC!Y#$oAG(S7(d~6vAH7@jh>J6iHy-Ku z2s3R4DON&$XwYw=X2Y@&+eRT{ihRpD{?(`?;RIZjMg--YulE;d2Hn@|&WISybG z-x)6sCOsi35vL7Z6t*VPC7yX7)4*rSeyht_xyjif{;8$Yb!KCb8EKENqIsGsTyIEu z&m>t;H&@F$c_5Fg%*iPv208 z<#ttURvD*l50@{fR)6M62Wr~FM%sN$#mYy42;>WrAtI^co4-FoIetV{6A%y!jP8^l zY&fk-R~4la5*K-sv!R3vM+JJthA(UtFmX*d9~sK?Rw>lGpiH=Gd{0`{_k~A^oTGmU z56F=8Gavs?nYXscTDpj#(C4}UE;6WjGs;^2xxs^pRjwZN?OkIl9b#LJNTV&OrDw6p zH~IB!MH}iXuVj-0L+G0i^Bd_5TJ#7--*7GlgAl^n_j-w0st&QY>DWM~Y~~Lxt62XN zcd%{#;ll8k2VvnJuGB>!_Ex$~ZcFnaStJYy=IrpmD|XG=!6LlCGb$$};&h^xO%%D? zQgx=3*K|Wv2oz_QV3=h?&hyR~60iYdK}yeA1G5(y{#t92v^4m7ver@8!28~vlu9*f@lX6FB5(Hg4(c>nxL_C!44et9hb<$-xn$`J(L}2KNN#)4B*VR@O zfXZ#o@=9&p6m8{JrUe9xwEMpE?uW6$`tNp%wYxAKG^G(JU_$PPT;gFHyw)|cpl8zT z2?-L@mv{GR`$5)3csteTg&myoQ$e*E!*0tYTtkVjsq3ry*a)>BXHl8XnEu7xU3Hv6nbs#FXj;TEZcN!K=1Y@>?5xJ zzuD z8v^-NA`!5xG2kUWu{!o9)(w80S=z+=E9yDi=;^y)ZV~Ij3*y-D?4>$0v#wz~`H5A< z8i4inux{%EF|HKs)oBl=%bN?dRdqcE%k*f;V&6K7Vi}FR^7OAe6D4X_H(szULD{6m z3#}cjgF0ILtb(Y*zZ|kH_1Mn{mDv|Dq9tiDJV5+UzqypV)mc~8b^;~4Y9crm=YqcF z*2&wubR$xZ{X3?%%-443Qestd!1&xEZB$B&3p0v~WYA~9M|v~s8SYob-odgzaHHft zsKP+GDOZ9@GULkA`{p&)9Wf+Dc~?{v2HsWsgEA*|CHjBeXQwjK-W}OeH`6*<@5nkD z{*XW67ht`Sofbj~gX{_5bjY-FBTccU>wfF(&xO# zkj*y!z0`7m^l)m29e*qZaHeAbk%4dmZImHOXEh8l%Df&w|bi7Jvx6=c*q7whupwd0)>2ysUN&ldcd@efi z%lod@L{-UOI8&|QD#6d@C2m)B)=E8Ifx~tj^?c%El@hh?zD8(ke#AU^qO+&78+SKe zy$$}3Oil9F_8Q+$Ly>1MYVtht>9E!ahcC!4fmC%q@~{AUaBJ(m)w0Jai_t3Y_?Z&c ztv*MIIG7_b#NfNH-}B_HmOg&E7+t`-@XTuFgGjp-5(5F(hpm0j$h*&o?4YwT{ciJv zyKGZYhy)xAcl~Ksscf;DG)5&VWWmzbuZ^9=R#8HZIg#I0R;b>$YzXNk<21HiRN@Kj zLUU{05UU^4C8u_2&4=`3tdaPnE>hF#$U|}g9H?BM1+7YWH4^YOJ~V;XyBuQR8g+!Z z2rWNoV%-jaC>PLE}F@2&(3kW4&+$j!BiG{>e^-5nR{zl^vn)(#?!%#5^rcs~l5Wgp3_GwXGs@b?@b}P(i&EMpRZ4D- zA+;Obj^Le5oo+nOS!9~+zdifWK^VDVlwz3*Uw-nEJB5Y!MX2UnK>j>u{LAt%nn%U= z={-0~OW$$@z!ytzA6r}G8`(=)mP%E2>xidz^|xP}`083vv}#3c{EnNnJg(8#hl7~S z#>?7E>19Nqfg<=SO)fG!-6A0VjK|v_)T*{0b{*W7t>H#hH8N~Z&1#7|m>h2!wCU+` z+sCtFyQTVw_QkUEqk{9g2hkt*G_6{dEX2#F{F%+T-llVA>JE$X9X^n%59YBkU=_8? zntS8HaVuk-scA7RcsR$NrG8}I(rM#KI5UQr&@{Jryx3)uxGToR!=f`!6V-ib3K$_7 zsg=8f(#P8kQJ{6igA!;0F5KycSbRcyD}W-5N;vlKD_rxGcL1oTy1Ak@dM`6f#sYcN tfy8$r)L4klzg@zh5b*zZI#8QAYdvnals<_G`u$s4OI=^BTGcl4e*o+kk5K>s literal 0 HcmV?d00001 diff --git a/res/EyeOfQwifot/EyeOfQwifot2.png b/res/EyeOfQwifot/EyeOfQwifot2.png new file mode 100644 index 0000000000000000000000000000000000000000..808bb5a583e6126ac33027fd6b1e49f7dbb5c6f1 GIT binary patch literal 8664 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 literal 0 HcmV?d00001 diff --git a/res/EyeOfQwifot/EyeOfQwifotDead1.png b/res/EyeOfQwifot/EyeOfQwifotDead1.png new file mode 100644 index 0000000000000000000000000000000000000000..f17d972d768fddcc806f3e254bbc246eab50eb4a GIT binary patch literal 8846 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 literal 0 HcmV?d00001 diff --git a/res/EyeOfQwifot/EyeOfQwifotDead2.png b/res/EyeOfQwifot/EyeOfQwifotDead2.png new file mode 100644 index 0000000000000000000000000000000000000000..7dcec319fb2ba06116cef121b8696e63eea2ba90 GIT binary patch literal 8483 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 literal 0 HcmV?d00001 diff --git a/res/ShadowPot/ShadowPotLeft1.png b/res/ShadowPot/ShadowPotLeft1.png new file mode 100644 index 0000000000000000000000000000000000000000..32eb693684615d2a7c260e908569632efff589be GIT binary patch literal 1891 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{yffy2bbzGx zHztjj(n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#@TEq0ruq6ZXaU(AKnwzxf+qt>&H|6fVg?2gUl3-T za;jIKfq}U$GbExU!q>+tIX_n~F(p4KRj(qq0IbWV!V1XDO)W`OsL0L9E4HezRRXK9 z0GK4GQ<#=IWDQi$wiq3C7Jno z3LtY6lk!VTY?YKi7Qq3;ohiw1dkRX6a=^BvBKW=|(^rz2hHznC zF*G=U0izF+0ctbAs?D>YB-sQQQmz$1_dxvzbZ9cz-r|xJeIy0?Mg|5Jx&}tNMwa?; z{{fwElag#zl39|I3Jy59f50K=m{Wo(3Q`XWf}BiH$Xewj=B3*zRp_RqrX`lEMl}T@ifXuxJ{EV_fP8Ni8I)R_pHm77e>+2CBO7p-pok)3 z0-_@Vs}5vQbR7X1`6cMU^3c4@5<8dyXu?Rk zkYdRS8gL=t7{LrqoJyg_L4p=3#X_+1Fdke+Mv}xcl8? z?LtS!7Y8)|rbf6TFmtbG;9b;a$J6j8>)g3(32`O| z7&4seIor4!j3u^)c3LxVJNK{ubx(Z3llEHf1?6Uk_Aqd)W$=uMZVqjba1M36@~%5g zqhYszQg3%yW&wlHm#JPFiE&$Y-C^9BR(Gv?n$p>&OhR*S*msLxd=$jk$*?NIjUhD0 z*->y!L(_-V9&hVD^Bqpe|E=@*vBj>eCxRz#_0{kA@mBl5*P542FMr#;)|;_R(?$Bv vf95Tjck^$D@vnZl|F57zLsr(t2@}+(yEphuk2-J_RM>jD`njxgN@xNAL$A(2 literal 0 HcmV?d00001 diff --git a/res/ShadowPot/ShadowPotLeft2.png b/res/ShadowPot/ShadowPotLeft2.png new file mode 100644 index 0000000000000000000000000000000000000000..a09d9c0e0b6a1f61b87360545d8094926344a31f GIT binary patch literal 1887 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{yffy2bbzGx zHztjj(n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#@TEq0ruq6ZXaU(AKnwzxf+qt>&H|6fVg?2gUl3-T za;jIKfq}U$GbExU!q>+tIX_n~F(p4KRj(qq0IbWV!V1XDO)W`OsL0L9E4HezRRXK9 z0GK4GQ<#=IWDQi$wiq3C7Jno z3LtY6lk!VTY?YKi7Qq3;ohiw1dkRX6a=^BvBKW=|(^rz2hHznC zF*G=U0izF+0ctbAs?D>YB-sQQQmz$1_dxvzbZ9cz-r|xJeIy0?Mg|5Jx&}tNMwa?; z{{fwElag#zl39|I3Jy59f50K=m{Wo(3Q`XWf}BiH$Xewj=B3*zRp_RqrX`lEMl}T@ifXuxJ{EV_fP8Ni8I)R_pHm77e>+2CBO7p-pok)3 z0-_@Vs}5vQbR7X1`6cMU^3c4@5<8dyXu?Rk zkYdRS8gL=t7{LrqoJyg_L4p=3#X_!b++WXK-TBFNi@*lq;J77bY)y~9KNZy4s&T=A zfdwae;KZ^|XKPq!>GMCIZQjr7E`GCj{`2~)_4{`%sGZk(KoV^TX0%j~Y3)8hH# z$B9$LeM|4Xau+z8x{p(j^HK3-lfsBArGI;Z*|Pc%NQTdMNH29*7do9UxVXWmYFUJA z!<`L>BIK$Ym+&R{&M@a#wf>;##~RzT!&}&<-C^W8=)In;A+@a3kDeE9ym7T?>kQk-svGrHTX03+B0zq8M zqgJkDUa+Kk&ID(ht67`ak97T%_1~J3sm6C>#gm`=AKw3=vvr0=f--~nVTJ=ojZ$=& z_)c)#KYHbvb^i6zhk5da743nmpIs9fXdI2hEJzf1=);T3K0RZHTy)6I$ literal 0 HcmV?d00001 diff --git a/res/ShadowPot/ShadowPotLeftAtk.png b/res/ShadowPot/ShadowPotLeftAtk.png new file mode 100644 index 0000000000000000000000000000000000000000..df40e72d415c8586c6d27fc33356611761e9793e GIT binary patch literal 1915 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{yffy2bbzGx zHztjj(n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#@TEq0ruq6ZXaU(AKnwzxf+qt>&H|6fVg?2gUl3-T za;jIKfq}U$GbExU!q>+tIX_n~F(p4KRj(qq0IbWV!V1XDO)W`OsL0L9E4HezRRXK9 z0GK4GQ<#=IWDQi$wiq3C7Jno z3LtY6lk!VTY?YKi7Qq3;ohiw1dkRX6a=^BvBKW=|(^rz2hHznC zF*G=U0izF+0ctbAs?D>YB-sQQQmz$1_dxvzbZ9cz-r|xJeIy0?Mg|5Jx&}tNMwa?; z{{fwElag#zl39|I3Jy59f50K=m{Wo(3Q`XWf}BiH$Xewj=B3*zRp_RqrX`lEMl}T@ifXuxJ{EV_fP8Ni8I)R_pHm77e>+2CBO7p-pok)3 z0-_@Vs}5vQbR7X1`6cMU^3c4@5<8dyXu?Rk zkYdRS8gL=t7{LrqoJyg_L4p=3#X_$xH3dbf7bl@=_2fB*7vofDNAziKKbeRxn}VWSFL{q?OI9u?1CEU{y;;6AzS9p8R8on7eduK4SQ?7jcH zoU{*c^>akOUj9sZ=c0`U4B2XnnpF0+7GAxYDtzVO^|-BfYOQzuQMG4bDEfAFOKZaV zt+HRa7!!`BoSAgCe_tC@$E^K#^Cr(b-*a2iDhEeoIe@;r*-c; UI>R1VOfxWey85}Sb4q9e07aS4{r~^~ literal 0 HcmV?d00001 diff --git a/res/ShadowPot/ShadowPotRight1.png b/res/ShadowPot/ShadowPotRight1.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5fc81344aa2a89ffd9f03dcbf82935804bede1 GIT binary patch literal 1880 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 KelF{r5}E)>pw_Vf literal 0 HcmV?d00001 diff --git a/res/ShadowPot/ball.png b/res/ShadowPot/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..c0561fb519d1a0d63ae301992c9298278ce1964c GIT binary patch literal 1476 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U@Xmab`HpPc6ZLt$u9~nNK8(3 z$t*6&NvsSoW?;~mSUO>^_u&AMqyDRdE?9N&$;udYI$ycORaTgxE#hhr!n!(mRvl+< zjf!Sap>Vk75BZ3Lkp&w%LJA5C1YFn!@6NH(+>udnZ+gfrrF+Mp{yffy2bbzGx zHztjj(n}Cz)4NjFZf(ACZ~oQr=|^Q=1)fP1R+H!o2yA3weOUkJa-V&lZc%tb zfL=e7&M6m9LE%kDK3`avC}dQ~;rMF8j^fvK{A+)o%*}l-IwQB>oc^s_PRtf_7f!x< z`&I>ugcL*GD<9Jk_g4$QJu5o!o6}$hQ`>uu&56$rDVA5)^Sr2j_$Qg?gDg|o)X(dc z&%Kpuo!_Yamt9;lYfmtn<7r?#@TEq0ruq6ZXhCBKNHJUro(v>83p^r=85l%-L6~vM zsa|~s2IjiVkcg59UmvUF{9L`nl>DSry^7odkR}G33M(KpH?<^Dp&~aYuh^=>Rtc=a z3djZt>nkaMm6T-LDnNc-DA*LGq*(>IxIwi8dA3R!B_#z` z`ugSN<$C4Ddih1^`i7R4mih)p`bI{&Koz>hm3bwJ6}oxF$`C_f=D4I5Cl_TFlw{`T zDS*sPOv*1Uu~kw6Sp)|Vccvu6?I|cN$^qMwlB}PalbV~FS5mBRsAs5;O(4om-dy7j_^pOVY z{RecuO-iy=NoGk-DmdWa{sD)eV@?UGC`dgh2y!w(A#0VBn3ry=RH2)anwD6aQ=()S zng=#2MZvMCq&&YU+eROv8r2ktD5~K$`dHjy1MM)~6j>9ydm7`C4o+7Q?)DL7bYApgi*1WEC^LJy`njxgN@xNArF#ER literal 0 HcmV?d00001 diff --git a/res/health_power_bar.png b/res/health_power_bar.png index 62c77cf4ee509092ed120fa2d7c265e04db7c64a..8b8e9ed80080670b8bfdfe0452e7938e7d71eb8d 100644 GIT binary patch delta 1466 zcmV;r1x5O(3(E_TBYyw^b5ch_0Itp)=>Px)g-Jv~RCr$PT{}_(F$_(Pz(B>Pf-}$o zcc7qv7HT*O&_YcKXMmF72+#o)3`YoK!(+0_3Tbz}|F=yhvHa1qo+aCBXF72{+uPeS zr)U&=e0-c1k*6#XXafPak&*yybPwyS8v&I7(%|>^_jB8_ynnnLfB*da%%tDm-e$hj zBh=lMEWZo_BtRL|m}f8uED!)Azc%7~HHT+_{MFSJ=LTNzDAyPQjS=Ab`g$^(%{V!3 ztZP}32Z28VSR=oT>7|F5PoGYwljGy#-1_MWJl#T>rVyxw0HN_GCnqF8Q@zM~N+Vzr z03-Y1;o&5V?0?}2q0G(AO{UV2KK~$H5&<5dbc>mh2vk5ou12~D5DY)hzylHR9334k z5Fn(J02O+RS(78MKmaZF&l~w=Yl4BpD=aN7Ws<+XzA~Odn=|b0?q>3>tgIwgx=#hl z)idm`$lo=cq`cgpsT&KqFXU~vS0Big)f09NB223gV1K^RWeKpev-3xyP#y{Jv$3dk zv}M3$4Z|wen@$4!BBgl%0K~a~*Q6+y5&=Xa@C1!}01_Z&ce1Ra2-HS^yoSuL7X7zx z5b|zrZWh&r@&COI1t*xzC)bsOmrU~+Qe19+74OaPO%dIP4YW?eKCvesJQP%5~ z^R^fJO_&^;9)JY+K_GQUcstB1M*{eeG6|rCLcZd4DQ)D}c7U<$y1KerwQA-cAp-C3 z?@{adSN6kqjQk64gG!959*URckpLsK!WLBy1dzs`O8~Udy7;OnA*#muEn>&22aJGu zB7aQNodg)LRg6eAl>pKcAU0oHTZ>895%yw*)u6Yxx0pq4NqftoTt5-$%T0jly+9;D zKMk)dt?n%Wv^jy?v9*BKJcboYS@#d2-oEY>7d`Xa^btqvNTYQ|8R_!utz|E5rMvG2 zB>~cO5ebk6$5f@%c0D>8XpQ(%5$#UVRDTMyoMsS^FP(KYB64+99H{C0P%+!8UZdZFEcxKBtS}Y zY`!cK;P=18Wb6+D92^{EdgbZqDSkgaJ&m6h0h;ep)>sAsdH}@(lqCS?0%gpwy?;ET zBY^e)0+t6jJ3EV^khN-r^=0eaL3>@#ngarT`HwjFDv;H!B!Gp`xY9>Y0J)=hcXt;p z;QahN*Ag%XkcrlHDv+=1KuFOOOsUM=I{B8W9$Ai8U+aL7Jb2RkeEa4GFe1oh zPn3%ghy?gSfCR8CE=_u4AyD4=fPb*QZFz(|4}j4nFRJb!>i04#%g zF4H9e+BBJA)m<9_v`{E-L=V4t3?F$(fMFS7o7#{7ZKBV*TSp)n0ia3M`-QB@E=T{? zZDvpnAOQx|om8eM0?7#=JwegyRWKL8)pmW^P$>#L<-37EX9*xL)MDt<4TBk4D{3Qv zHYc#ISCRJ#(eQ_6a^2F01T*MXf3P(TBTzd5q(0Uv5l8%nEnwu;kpLq%fU&Fp4RPB3 U^g<5t3IG5A07*qoM6N<$g59Q{{Qv*} delta 1431 zcmV;I1!(%q3#bc_BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTT4Y+6zrhl zkfAzR5EXIMDionYs1;guFuC*#nlvOSE{=k0!NHHks)LKOt`4q(Aou~|=;Wm6A|?JW zDYS_3;J6>}?mh0_0scmXsb<$WplX(pP9}tGZdC}qB8WajFn@zViJAJGD5l^!zV6}U z>s_2@d7t}pM3lVA0G~iS%XGsc-XNadv~UHlM`-IH~|D-Z2Myb z2<-yRx@~_S+jjE=2s{HxvH$=88FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1As|HK~#9! z?VUYq6n{|^K<`QrF%nQPira_~w6Ibu(ZYZh)jXizNze!i!HC$zB70-zX70Rs?Ay(o%sEY%4<<9SJNMl8ac4VHldD&5Zc79oKfUV+ zK;|6b7C@Vss2lMg-M(15-_(V!h=^={Su3nx6o1*q2!H_qGN$82elOzJMa`f*eD)R- z00sca(g2~zzxZZVs@ep0dv9U3^f;IRFaSU%OoVpO$o}%oiNg9h6Y=+LA4Gc31hL}^ z04cDU2L^z4w*kD|-;4Ynlh>yU%Uka^c1-Z?S7n=F{`~2}`stZdt^Po4@0pIT*!3QE ze}6kZGp_TGJ@2~LGwgNh_fAcK0f08Z!9=*7CvmC&y|{y2ZXK(U>m||tqdNc9tnQ0u zB05t60{{j{f#&>mb2`i2W5@Y4AUUu8{I1-N0if0J000jF0Brz+_Rr4^dS#v*Jtra} zmrib09&qL7l!%Bt{<~f{&ak-}00sa^On)a-`L*%+hlu>|uU8Xz*vM~3cI~WDZzNd% zZ`((PAuaa%hXH^#KouH+=QYCj*DLq;BELs)B-kwLc!6y**!9DXD};`p8>z24a3$1hjK6bM0#}3PVy;1G;3eCDh$bw00t<-wh8La=}|mmgxV6J_YWye9Vw2j z`5kwSZ>XlX?)loDl zT>bvj4~6C4Lf0(M7ED0xaNabnw|@@<00tN*GxvIh<>gz?MMUJrofn5P!T<&UIQ#}k z^~*9|Kez2wh^;$-@zRvJU>E=}z$maIirU+wIe*>A;TdIjqyS$_SXbiMWpmHn>3-Y7`LSRU94EL(Yn0RY<227k~iZ4;TO-R|8lR#J*q1d!G=IA20wwQw-p>2}17|vW6h?0|o$S lssTbqun_S90|1PPe~vzrb`Uho%9#KF002ovPDHLkV1gLNlqUcH 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 970976d..d3221da 100644 --- a/src/logic/entity/Chicknight.java +++ b/src/logic/entity/Chicknight.java @@ -7,20 +7,10 @@ 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"; - // Status - protected int maxHp; - protected int currentHealth; - protected int dmg; - - // AttackBlock - private Rectangle attackBlock; - private int attackOffset; - public Chicknight(int x, int y, GameLogic gameLogic) { super(x,y,gameLogic); this.maxHp = 10; @@ -76,14 +66,7 @@ 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() { @@ -123,63 +106,26 @@ public void update() { currentState = "attack"; attack(gameLogic.getPlayer()); } - + solidArea.setX(screenX); + solidArea.setY(screenY); updateAttackBlock(); } public void initSolidArea() { solidArea = new Rectangle(0, 0, 32, 64); + solidScreen = new Rectangle(screenX+solidArea.getX(),screenY+solidArea.getY(),8,8); } 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()); + attackBlock = new Rectangle(screenX+solidArea.getWidth(), screenY, 10 * 2, 7 * 2); } - 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 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 new file mode 100644 index 0000000..9dcce23 --- /dev/null +++ b/src/logic/entity/Enemy.java @@ -0,0 +1,75 @@ +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 = solidArea.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(), solidArea.getWidth(), solidArea.getHeight()); + } + + 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 abstract void update(); + public abstract void initSolidArea(); + public abstract void initAttackBlock(); +} diff --git a/src/logic/entity/Entity.java b/src/logic/entity/Entity.java index 2dab434..6c78979 100644 --- a/src/logic/entity/Entity.java +++ b/src/logic/entity/Entity.java @@ -1,21 +1,31 @@ package logic.entity; +import javafx.scene.image.Image; import javafx.scene.shape.Rectangle; 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; - - public Entity(int x, int y,GameLogic gameLogic){ + + // Status + protected int maxHp; + protected int currentHealth; + protected int dmg; + + // AttackBlock + protected Rectangle attackBlock; + + public Entity(int x, int y, GameLogic gameLogic) { visible = true; destroyed = false; worldX = x; @@ -23,14 +33,15 @@ 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 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 @@ -55,8 +66,8 @@ public double getWorldX() { public double getWorldY() { return worldY; - } - + } + public String getDirection() { return direction; } @@ -84,7 +95,7 @@ public Rectangle getSolidArea() { public boolean isCollisionOn() { return collisionOn; } - + public void setCollisionOn(boolean collisionOn) { this.collisionOn = collisionOn; } @@ -92,5 +103,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 new file mode 100644 index 0000000..7fd9b6a --- /dev/null +++ b/src/logic/entity/EyeOfQwifot.java @@ -0,0 +1,88 @@ +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; + 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 + drawHitbox(gc); + + } + + @Override + public void attack(Entity t) { + // TODO Auto-generated method stub + + } + + @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; + } + + @Override + public void initSolidArea() { + // TODO Auto-generated method stub + solidArea = new Rectangle(0,0,256,256); + solidScreen = new Rectangle(screenX,screenY,8,8); + + } + + @Override + public void initAttackBlock() { + // TODO Auto-generated method stub + 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 93972af..e66643c 100644 --- a/src/logic/entity/GriszlyEye.java +++ b/src/logic/entity/GriszlyEye.java @@ -2,72 +2,82 @@ 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); + + 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; - solidArea = new Rectangle(20,0,24,32); + this.speed = 3; + this.dmg = 3; + this.image = RenderableHolder.GERight; + initSolidArea(); + initAttackBlock(); } + - private Image image = RenderableHolder.GERight; + @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; + screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; + screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; 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"; @@ -76,24 +86,41 @@ 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()); } + solidArea.setX(screenX); + solidArea.setY(screenY); + 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/MiniBoss.java b/src/logic/entity/MiniBoss.java new file mode 100644 index 0000000..1ea26d3 --- /dev/null +++ b/src/logic/entity/MiniBoss.java @@ -0,0 +1,16 @@ +package logic.entity; + +import javafx.scene.canvas.GraphicsContext; +import logic.game.GameLogic; +import sharedObject.RenderableHolder; + +public abstract class MiniBoss extends Enemy{ + public MiniBoss(int x, int y, GameLogic gameLogic) { + super(x, y, gameLogic); + // TODO Auto-generated constructor stub + } + + + + +} \ No newline at end of file diff --git a/src/logic/entity/Player.java b/src/logic/entity/Player.java index 2fe5b9c..9916142 100644 --- a/src/logic/entity/Player.java +++ b/src/logic/entity/Player.java @@ -87,10 +87,11 @@ 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); } @@ -141,8 +142,8 @@ 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); diff --git a/src/logic/entity/ShadowPot.java b/src/logic/entity/ShadowPot.java index 69461e6..8e7feda 100644 --- a/src/logic/entity/ShadowPot.java +++ b/src/logic/entity/ShadowPot.java @@ -1,5 +1,87 @@ package logic.entity; -public class ShadowPot { +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(); + } + + @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 + 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 + screenX = worldX - gameLogic.getPlayer().worldX + gameLogic.getPlayer().screenX; + screenY = worldY - gameLogic.getPlayer().worldY + gameLogic.getPlayer().screenY; + 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 initSolidArea() { + // TODO Auto-generated method stub + solidArea = new Rectangle(16,24,32,40); + solidScreen = new Rectangle(screenX,screenY,8,8); + } + + @Override + public void initAttackBlock() { + // TODO Auto-generated method stub + 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 4593009..0cfd6dd 100644 --- a/src/logic/game/GameLogic.java +++ b/src/logic/game/GameLogic.java @@ -3,21 +3,25 @@ import java.util.ArrayList; import java.util.List; +import Object.Projectile; import drawing.GameScreen; import input.InputUtility; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyCode; import logic.entity.Chicknight; import logic.entity.Entity; +import logic.entity.EyeOfQwifot; import logic.entity.GriszlyEye; import logic.entity.MagicalTortoise; import logic.entity.Player; +import logic.entity.ShadowPot; import logic.field.Map1; import logic.field.WhiteMap; import sharedObject.RenderableHolder; public class GameLogic { private ArrayList gameObjectContainer; + private ArrayList projectilesContainer; private static int counter = 0; private GameScreen gameScreen; @@ -25,6 +29,8 @@ public class GameLogic { private Chicknight ck1; private GriszlyEye GE1; private MagicalTortoise MG; + private EyeOfQwifot EQ; + private ShadowPot SP; private Map1 map; //GameState @@ -34,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,10 +50,14 @@ public GameLogic(GameScreen gameScreen){ ck1 = new Chicknight(200,0,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); } public GameScreen getGameScreen() { @@ -57,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()); @@ -138,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/logic/weapon/BaseWeapon.java b/src/logic/weapon/BaseWeapon.java deleted file mode 100644 index 8a065d8..0000000 --- a/src/logic/weapon/BaseWeapon.java +++ /dev/null @@ -1,5 +0,0 @@ -package logic.weapon; - -public class BaseWeapon { - -} diff --git a/src/sharedObject/RenderableHolder.java b/src/sharedObject/RenderableHolder.java index bb0515b..008ebe0 100644 --- a/src/sharedObject/RenderableHolder.java +++ b/src/sharedObject/RenderableHolder.java @@ -7,6 +7,7 @@ import javafx.scene.image.Image; import javafx.scene.media.AudioClip; +import logic.entity.Entity; import logic.entity.Player; public class RenderableHolder { @@ -27,6 +28,8 @@ 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,ball; + public static Image EQ1,EQ2,EQDead1,EQDead2; public static Image moonSprite; public static Image healthBar; @@ -35,13 +38,20 @@ public class RenderableHolder { } public RenderableHolder() { - entities = new ArrayList(); - comparator = (IRenderable o1, IRenderable o2) -> { - if (o1.getZ() > o2.getZ()) - return 1; - return -1; - }; - } + entities = new ArrayList(); + comparator = (IRenderable o1, IRenderable o2) -> { + if (o1.getZ() > o2.getZ()) + return 1; + else if (o1.getZ() == o2.getZ()) { + if(o1 instanceof Entity && o2 instanceof Entity){ + if (((Entity) o1).getWorldY()>((Entity) o2).getWorldY()) { + return 1; + } + } + } + return -1; + }; + } public static RenderableHolder getInstance() { return instance; @@ -51,7 +61,6 @@ public static void loadResource() { playerLeft = new Image(ClassLoader.getSystemResource("player/RabbiLeft.png").toString()); playerRight = new Image(ClassLoader.getSystemResource("player/Rabbi.png").toString()); playerRightAtk = new Image(ClassLoader.getSystemResource("player/RabbiRightAtk.png").toString()); - johnSprite = new Image(ClassLoader.getSystemResource("John.png").toString()); whiteTile = new Image(ClassLoader.getSystemResource("Tiles/WhiteTile.png").toString()); grayTile = new Image(ClassLoader.getSystemResource("Tiles/GrayTile.png").toString()); pathTile = new Image(ClassLoader.getSystemResource("Tiles/pathTile.png").toString()); @@ -79,7 +88,19 @@ public static void loadResource() { MTLeft2 = new Image(ClassLoader.getSystemResource("MagicalTortoise/MagicalTortoiseLeft2.png").toString()); MTRight1 = new Image(ClassLoader.getSystemResource("MagicalTortoise/MagicalTortoiseRight1.png").toString()); MTRight2 = new Image(ClassLoader.getSystemResource("MagicalTortoise/MagicalTortoiseRight2.png").toString()); - + // ShadowPot + SPLeft1 = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotLeft1.png").toString()); + SPLeft2 = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotLeft2.png").toString()); + SPLeftAtk = new Image(ClassLoader.getSystemResource("ShadowPot/ShadowPotLeftAtk.png").toString()); + 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()); + EQDead1 = new Image(ClassLoader.getSystemResource("EyeOfQwifot/EyeOfQwifotDead1.png").toString()); + EQDead2 = new Image(ClassLoader.getSystemResource("EyeOfQwifot/EyeOfQwifotDead2.png").toString()); // Pause pauseOverlay = new Image(ClassLoader.getSystemResource("pause/PauseOverlay.png").toString()); // pauseMenu = new Image(ClassLoader.getSystemResource("pause/.png").toString()); @@ -104,11 +125,12 @@ public void add(IRenderable entity) { } public void update() { - for (int i = entities.size() - 1; i >= 0; i--) { - if (entities.get(i).isDestroyed()) - entities.remove(i); - } - } + for (int i = entities.size() - 1; i >= 0; i--) { + if (entities.get(i).isDestroyed()) + entities.remove(i); + } + Collections.sort(entities, comparator); + } public List getEntities() { return entities;