From 675bb53d3145bdd61cf13b555c8fe67361062b5f Mon Sep 17 00:00:00 2001 From: Ritchie Cunningham Date: Mon, 7 Mar 2022 15:01:12 +0000 Subject: [PATCH] [Fix] Timestep [Add] FPS counter. --- bin/tfg/Game.class | Bin 4929 -> 6856 bytes bin/tfg/Player.class | Bin 5348 -> 5432 bytes res/kpixel.ttf | Bin 0 -> 18068 bytes res/{tiles.png => terrain.png} | Bin src/tfg/Game.java | 81 +++++++++++++++++++++++++-------- src/tfg/Player.java | 23 ++++++---- 6 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 res/kpixel.ttf rename res/{tiles.png => terrain.png} (100%) diff --git a/bin/tfg/Game.class b/bin/tfg/Game.class index c4a30879f4c0c49d5c14936faa914ae055a690a2..65bf4a607e9d776d93767d587dac730e5915416d 100644 GIT binary patch literal 6856 zcma)B3t*I0cK&W&e`az+LP7#TK!gBEKq4X!NfbgdfxzTpW=IIA?9a@f@ z6?JtL1YfJ}im;2~D&5^aG?D?ub+_7XxAwK$cI{)^u5ImO+q!*kt8JJ4&i~J3CXjYZ z$bbKH?z!ild(L;xz4y<1KY8KzTg(y5K!HN}KJ$Rt7%`(mjoo|q zS)rtYj$6^N74NsB;n+ci>-@3!P~*PD;7Fu#C~l4p+o42bZ;nWl!pz(uK|2|-6e|2# z)q!N(jt)_h!suPlvlVW$A-k=MA8~* z?4zx*_>DG|7L7*C!&aP@`( zIA>lsolLW%uG1WCx>Za+=s2W378*-fVFk5Ip>WhbWJMHea_pP*QF|;Z)8r3|5vqeL zjo2f0vb`su&{!Mj?+CVT-4krt?Dy5u!?liwYu!m|tpipxS?hD2!Na4pFmJbLXbwf} zsGYo(YU}FzxWv|2*z$l;(wK`Xg)+Y#wYtVe_FD0vxz~+DEM!Ld%(yLdnpxEBsPQ5n zOEqe-z(AeCwLc@$UM#~>nQgg7A&TVfdJO}`1{&#v?C2|EicBq zO&S`d2G%N6I#8J!AurarlijRQj+ru|Nn;kO3_=;Rvy)A6xEIats7)Hxm`x8Qhi&@b z>%>xE<^scx5^i<7uf}M7pO-T&mB$v1tyn-;$HypLV8(~2sB)Sy4DS%pH)JJyO(x9< zA)`=IS3ij#FS>D?fgXY}yVBNJBtj4i!Zmt9R2YfjvB5zJT4h}hARWAlU2CvIqYwQw ziE~j|T}OS+3fu&4GB7|@k_nC-vxaF?#OfeyY%^ltZOV+rxLsjJ+)6a=cObknnH)55 z=ahQjCao8r!d?SrCP+~`);MTKti~QQIZVU*5Mp4`<~nsGo$S;2DQ)Z&6-^Q`OJfk? z!br>vx5r~6?VN!@POF_dKs;e%zkz)jn`lx;x9?EM8kMzaL?miuqpUf}K++8D55~<9 z%N>I_Hwzm#(;EBiuodfcvS=knHSR(U!+FR<$Z~Z_hdS)V2v!OD4{993VV0aw+%l6i zaaCPT>R+j{DJM8-uZZ!>aF52PaWCs;!b-Ns3CcK?`K3A#XAEkef%}NrY&G-Zhzsk_ zXv{#F2M^(41D{P-^B}#Y@d%D`bfBfHEdzJq)4x0Ms3hNU`h>~nfYRx4A@!KX<9LFQ zGQ+HDRk@K&1FC+P%=eVW=VXS${+6JxS2)jTJnL|_^tJ>7k}+S<@S{_VJ*n|LPO->_ z2)`lAL87jkObDr6dDfxH;yg8iQf-~UahOxEME46CyRe|3<=%cgvs>atueg;#^7vaufg{9AnU%)RJ z_(hsJ?O2Uh@ft^&iB3Bbu@hD(77epbus&}SvtQRZFK{f$q~YjTQgo&?E=&###bfD# zGUN@7H*<#gV?%aG_-|=^UHGN0s~+ws+Q}F(5AASxT$S2Jc~`>mw!)mN zUF!5OhF(W;TFx7_4kcYZjESp)3e(exr>WV>_4_h>Pvd?30fk0cDxJ-cBdQt2?8%}d z$=u<-)>MK&!uJjQF%KSB_iFqJ{*=jLi!_f7Ia-`e$I(JQwfq2oZs3EAmMOg&e}TVb zipfe8W=*kUviAO!!n`a{(iOqk&KsQ-NFe`4;~M;}qfbWZ)mU_5WYfIl>zMjDMlmWAU&ZHF;iP;5!5n|EBTpf~dk!gaDMq z|A)qZ3Py}!GttF$dhiMU+rWP*%)e@y?bhMFF*6>n<%`Du;3vcf_oi#Fwmw&~$xE?3 zL#ZhzhV(Ksf?DM(o=&x$Ag6~J>>RlkO;c<$BgBX%Rw`AbiVbBjOQd?X*>QJ^)yktd zabZ_?Z*Z#|lcx02n@5z^s#MKj5JqAL2*wJxT1{$bl2gkks$8p?&PoF^Ri#$59KC_= z9l@>AU#-<_r@uw|YqXjx{RRELKv25pX*J*JZjkw39853v(c*u;6Ov=YY>y=k;2x6ct5o5*q4;>5o%E zhTl*;vdzvWl)H;<9n^8x#vekvYox z!`)`y)C0^E?Zn9{b&FQFs*SSE#oW#-^DeF5s~S~{%)goE%G@n1-Jj!?$>XAP6>$#f zav)W0s@+gN7PKtRb3`MtxK>*fp;I*A^ZUDr^SRS2r6f&nRNJ)LuKYBeapF-=iq8C8 z{7zL)bjhGDt-9r4AcF$Q!x2lEw`tX@0xXYY_QVoA$2k$NYj1Z>6KaQ6ed#Q=%($Rr zr&a^#q^;b`xQ8;;)o!hBS9cJJVb*zGc&0T)_5i1vx{CK`^(j$ogzbdfv1k`BGp(_) zsO+ZGEnhIx#9c>)rNqr+ky3-2hvQ+|azL(pEZ|F7^>W7kZw1c7vHP^zFLkk~)!!ZP zwFzrPtEjN_mX?k#U)!Gc?$#Xv=@`}OF6o%Pt$QF4>}cJ-XY-C=u)AwdPp>bK9-PoB zDKc}elPnS$;N2edjULY0$3t=(N+zE)q*?LVy5-O^t*+27U?a7EG*pVsPLk(e}MXkOhJRS7y4DLzKY^WEQRM}e76$^}ohTCl` z686R8vABVGbVDFE77tnO{lFvlxs@`4syd=kE8ZG0xm6Hk`P>c&cG)U%9k<+kegW|! zPp++etB^}8xgNgfkzXMLWdnILf?{waIr*v8#sn~ku(hZbv6Ra=aEk z+>9PH@s8Y#yKxJi#73OLrW{9~PWxjPqkI})`R{QKJlvR6f_nPZG*FAIU@&^>T^pH|DMUJYs*O$&N)s(4fxaQ&6 zrP1RPcqhMEI$su-QutS%zf3(b~DLEwpcQ{wt%Nhz;P6o45+)~2c zcU|=RZ{QCVI?rLviZ}3QikH6+{TK1q%g^J7DSWi@tCR%olG@__N{Z37|9TGj9Pwj? z=P!SotPLme@Hjrch|4EYPWpjyRhUwY>yB|%mdmYhxEse+RW5gq!>u1z*W_{+INZu{ zb)CcYrl%fPwGLe+^Q6==X=sw06`5%F(yu_670SYT#%&{pSvJCqb(C?9F?OTuxr;w> z+=B$ac_bN;F(Uo|Z~F)FI=%cRd*0>umG^KjzK8pBvgG}AWasi@XMI-TOHNKNl>r<+kZyU?!Tu__*%g0q~ zN_8wRNU6@{B_%1$UYjB|d2uspYLhl$0(xbSE z3DSfUOt{CGOph~ZoY$$zK7HHFT!SJs=ZL<#d5QCSCY4akfk?N>9`6Fdi$}-fLP%|^sA)zWV)ICC#XQ(4W z6=kRggqob;AySiFk4Tp%BlxIL-VF7aP&z|BDO72OdRnNG3`G=wR9>8+PLe9j5T{9` zdj?)tp;vjRC}$;@r_L}#m!h6+16{q2?RsL}$F^On7TX}Jh{<*@zi7tTjM4SizGmky}YT0A38o%uWYLMDc&-sbN~PV literal 4929 zcma)A33yyp75;CM<|UJxW|A~5O=-HNZI(iyteR3tlSw+wG*dFugtV3Ln!F~jOlIPn zNuekecLc;8p>8OZ3ZjTz#N;o4eJCi%cVl5+%IX-F+C0ly)R9Y1(^S4CpRLoMS3gt{kQjQ%Tp<;P^BA!f{ z@l>A~o3Khy#(1KgU5h0ig}M1=I_xnkp0ug2uplpn|-& zF!GS(w#lW)FB&t)xw*y*WFlq9TG|}P+#Rx$DT+%Y_DI}JO*r(t_|=dW}#T#mS`9#F|bTwes1@1rSV}YmW!Je z3bPu5!Nxw>+MuCPZlFn_+U?M>h4G=$b9R!3AC(FfAvuh4kjP;q0 zEp&!ilp3{JY@b^*X{Xl!JI=N?Y@LaP#y%f|sg=i>8fRf1E96X2yU27#XsG&C_9&ABR}6R{Y+5>yU?) zmOgvfN^B$&O4*`~8a)Uzw@djK6wdh?y)I|B4;!#t`oCGD5B-GGkYkxCMt*8T-b@^C zwly!>%U|3OT)qr?vAwebY%N4{8k^jFe>n~2_nMJ?UF0;YJ9Oq3}dXZIXo;i&Wkxy z;l?fEFQG9m9%l8oMFYLUaWs-Hr>nOu5)lYZXtZLD1bd0brP$5s9%4U6EVnhfVHzPG z?B1dg#5~z}xyByBURkz#;}a?2U!n2#JboxKVh;)bof_{Fez~XL;h3!bh?Mp{8t=uG z?2w%dk6Q#X2Yw3`BPny}Vus<)i6~yJaSh(jQjHUs?s-AD&n1d;=VdU(#&EV;%kTkw z$iN4AoX(VLd>9{LCv4H?VVGydooUw!`LyyeeB8iwSu4j#HLk}E>|flvlpvUMOdQil z|AfMcGf?cFcr9)QQkqX`%)zGxM~zzv(?p$S!{rCbWFyRc_aWm!?JSYXeRpX1&qgg|-MADMvzohYH>5VaJCVQA?DGp%L z!0iePXSnIMc5hFZ&Tu_nH15DbP9+C#(ah-cH5qvthYcJ$=0MKOWmZw+PTa)<%ubTC z$+412i^yO4DwCYuAwjgt7~G9}41ASvlF{t29q&NX_!{nIqCMf>C=a6w7v|Ga#Sh){4?4_q0e-FVn@rO!(-EV;)A&8s&@0by&Yvhfqwz=liGdGu zZu!;Eul)4gMrPU_KJUnUPUFvF*ci5xa?y})=wAftH3HVZY5X1kpp#v4q2VB}Ao^c3 zS`X-@-1~yYzhpj&+e6_ zcMq=H9F2y11~>HvBALxcwSwrJaJ)`$AjDR<9#nx=g`!kFt<)aw=?Sz4qMm$~R>dN( znU;41Bc4h|qeQDx(U?80u`%4|Z7$PFi>RzSFpw9SnypoZ@U`&sqp8%YN(4SuAUd6` znxj>Xu;*+HZ;k|JrmE&?b%H3=9HWqLxmK$MqEYT?1bX=G@Pb^ZRh{e8lY|1D#PB|~ zSgR$%F7w#aIW5zwUig(Bzkhuo5E`78uFz_wNDa0jxW#kOs8y5jbTn{5bTH%DP^)+o z$Q|N6iO9szXs2z(h69e1a17M243WfyGh}u0^T{um+@emF9W)h;$1SHlX7b1&$O?HZ z5XEw2VhQnB$oqXU3gmXkw<@_Cl3U960{BSt!sov83+}GG*il~PzE}G<2$=aU$mX4t z&l5?D3DbzJp`KGX#jHLsW1y@w6rw^fi3M17U9(8sCt-$J?eJm3^^#Q$oXmhm2B&k-&dCR6lh*bH~h>Fy|CXEYN zq;1UR!YK@rx9SMG2K+w1ZxZGqjHI!%Kg%sKCJ{f5=dbY3nZ%oO+`*R9cSXkcBNupZ4k6j#Avj+Zm9T>bY*tj2Othy5)Rk#;>Lx=In=7ac58aJJMD>Xs;aAVCjmciY! zABEg;o5J3s4^HAMhcR^n{IoeZi6d!zeLpr&;+y&02VL&DllV?P_Ys%dIElyexj%5Z z)sy(K%k_D&-ZF`wxpa;AN#hr?uwK~~d4=j>Nx+{ewK$h0YU6Vq|E)zg8x$q9F651W zC#e)dxB?q-6@MIDhcIr$CftVec_E4N6T6uo^*%g;3*5qb$bU3b*jhIHY5bBUkrJPS z(xdz#S7?wncoo7?B0?wwdoy(DG158_v6MA6H5Ijd;Wd~~IT4z(bq zMTSyJsLCu=Bve(FGKBJHDW6cqS*l#9tOw;MH7%+ZQE66ju28-#HD4&5rA`#8JWDMS zsw_(_6{;jlEhjZAOEi$kNCxh}^9Oha`!S#Y;n2*9S%F5bO*kEAaXp(53~=ov$Rb>$ zgrUiGJAa`ixQ^p8T+Ve5uEf<`uOX1G=XwKf!p&Uw<91%=nlZ)u=zU!8=WX#Zu8-ph zJjwMbJcDPsK8F|ZBG;Exp(^I;jf4jx?~5R3zQEST^7V!~=_sc~ag|3iy5$ji{m1{I k=c>35{-2l}`UR>*ox-(>SUrHWI`zEyymswXtIwPN3d{L~y8r+H diff --git a/bin/tfg/Player.class b/bin/tfg/Player.class index cfb5828f9a805491fa01619eca9e349d1034e0d8..d2cf8cf37f92e481f6c06ecabeb886a9e52bfd77 100644 GIT binary patch literal 5432 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 diff --git a/res/kpixel.ttf b/res/kpixel.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e3dc57ecc7dd98f161bec6930dc526775a07f929 GIT binary patch literal 18068 zcmeHPOKhCg6+ScmZRZ^)fh05u{DnXR4R#(iv{4p>P!mcdq68t-qLQ&Qi3dL!Pq0HP z`Y%|ZKq)Ikr3hs~+XXDBRH;?fMHZ++6>76Ulm()xV8H?^7PP9`B-8IZ_n!YX|BQ!_ zRh8embMHO(+;hJ3xQ`i+EhQ0ICXw_=_|TD|UBSzJe-l}89@L{_Q_}e z&gV~q@BG8+W^_3UB#6*of)&CUIwt@f{82NKD2O~=;^(wuR8}2i-xe4bnU=_pvqmXH z7U|?o*KD`U^*kyk#jkoIHy`qxo&w(VJd-e6)jnR=YXnMP*U<)zD8F zv9E!J?JSn8T>*HC>@qx7_ee7;;#-tv7=R;@m9!P$Y1t}E!QjZ+NWI)#dR4hdx*mll z@pTD$u3eUX+2Y$hvJTQ5J&*yp+qZjVx!mvDeVBXLxBF$UeBZYz@nzp$Dt+?0Z!eQu z<=4KwTsFvizP&|1$?c^%*9NF1r897MDWJ7?lwR}gk_?po z?Av8oRr=7kd*rs#r@kFXSYGSfy|TW%%eVVvpnSl$`(>g0sBbTkJId#Md#S7_|HrqN z$@hBte0#YJ_8ju<6>_xa8Q)$hhk6XdDtRmz^z?OdI5_Rvuw@|lVE@eQse0|icq4qU zIz3%I74F)xb0?aIY75oL!_^ZfCoA=lnd!!nM*ZZNGUl-Wiq^fYV^Q(qcOW@Xy`Z; z&#B_Uv6(3caI?wZ63$oV!qJnp$woL|Ym7U2%Dv3bpP!!}R2k4h358-)S^!{fXl{IF zerR~d?&0CP_SdUG^;9+7KQlFjv2b6bQLl}jB+~H6c%@zq_f6I&s$TAxXNM+o56;w2 z3{BR?s?&4TxuMZhcg|IYb`S0t8ll9|+KKSVla;ZF+VqL=>FVtGsrp>_#0+eiIt9ZP z!qMund*>$(j*TqTWWUVFteld%)Z~PWOG83=P^vPGpDO5~>_Q&z#E+vM0^b5gCb34U zm~j%V3TBT$&NOBpL8*f}mXegr$;$|HQXYZKy39cbrG?Ns2<`b<#ky*k7XnMD2r6<6 zvZfT<1ZXpI9Iqq5_kh-hc3kZbK_z->pT?YqM^J%vA$Eo-8I=R-od&$MM~3io+*>@S z`kcjsuzLpFDG!F5^Z3IpkU0-6#5)RK)u4rbpGT_!EyQW~5^pZc>7NJxJp7a3aJCo* z#NS^rw~bH0I9&1=j-6KLH&sE>pS=7_kM=N5OYY?u9=le?VddDMp3d%|Bjxk-QgC?4%}kVu?|3NFq!?VeMXIc|{vRgfEoMwnf4s!*@M4rl>t1>Ap`6lpJCm#mvalb)35Zr8P0?EW#^k z5xe?+i0ezU9c((5tPGA&Yix67RZxz~A`{zuB721fWGC&T7LT~IJWd6tKB&zL=(ATO zuU8_hd)ndlE9OoHqpe$&3n^BcY^#kPdneXux_xbQx&>|Q7lNG4>cjx$l7X{WJ3V;{ zqo^Yopndqs#e(}?@6C>=W)PE!rSJ z^{}Qc+bOtnXj`>1f7D1&S!dRr4yfNVJ~8yfW`1@p9r08g$Gs4kjT_!4n=i7p$!Zrr zwE&WJJVx%lqsX~e#ohuZvld>=VsNKK8w`jx=BP!22W{JBNzlVSgaglwX>B?XY zf2u^QugpH-13CH>)E(>w_Z8XKM_rjSh4;s{naI5HzRMuB%(MvQGcoo{l=YM4MLgb{ z!?T8;DaH#S)1V}#E$r69ok_ii+Hkhu@cOYQfs6O<1aUg2y-(VnDAZ#!sb6)Ar}2uR zyB|^TTqNh^2vpSI=5XTkHg_&s=J~a@^UC&LtKGSUJ;&BK*Oc=K1gLL(ozt7UcTpF0 z+Fp-l?tF9}!z(x`*A4sJ$w@QxdDM2R#i!L?3ORB9eN@ zFK=#{tb!1o-zwE&NsCi4Oy{Y)=XA_d%@wHN3TE59taM8DbX4d;mqwFq#@Ty59`ih! zA#-EmBn6Gy zJQ2^=xKS2YOeR+g^Ffu68-=sX60

Fw>67f4XVL@@+U^yzBjy6o z>H3X7=V^22Sam*Wzg?!E%YdP z)i-4IZPtl&_UH$fk8xgtqI3<3*U@sLOUH|C%R<)f7ne?lO%cBPd6=-4!d%r4eV~9T1rpR|w9OZ+saNT-F7_-&^hq|G!L7RE_1($;kYxHZ#UGbG_%iEsm0#t-t$C-l6lvpeWOE~2Gz&DaEG9c^c*Fz)|12cot>uD zjV61o(=F-uJ@)xPhubFj)ka-KzHPL0O`91-AVZ;Uy;o`tTm`k#!0W=NpV6iA-3BPh z*=75Z+ZRCXB~NBQZL>z>U4auKAZt^5>;yzEqR!Q78)vhD7huX^_A?xV%2BUG{+9y4 z%uo9;Z?Vt&r~tDpnwC?fsSZ@EVH;k}ODW7okK%E~3^dfO`wB(4m?bvCTX5uyPK$mYMDtOy5OxO8_UcOi%di9?|Cgl3V{yzP2@66S;A==I^(~`xCfOXoK}OcTYLc{-NRLHYp^9FOe<|=;i|JX z^ezsL zQ~TdTq_omz?qeE%Y|9-3Ae*>-1Zp{_Qpget0n=Iai z*jDYJ^C1oWNVR6_7*S;3T#RqJ@trhaG#2^vjv9Espgh%vCLg1#TXht6!^Q+}^6oXx zfk0`U8iSxhTzeIz@H_jt|+$dZWBp?5HiZDLm% z^TMwMi$kZ+`Y@*mmCC@2MahtXgc)5##rT|fSQfZ*ro}^$81qt#`GXmm#Dh8DH7llO z6j-0|uRwk_-d)M>_!|L3$J&b7LS0JJSL&i==~4PQWs~k_vCrCk9tIKS1I-+h7q4Z= z%xYziTsdvA6#VTcM*W`BMyt9zmLbj}R2DDwE5_|z1kQf#x$LHVa-`}$bfGig`sIC- z?`Au%BuBL&Jgm((P=#K5To`rZF<;zo z#o67R3G$eg`Dk^QNyTV8?#YHcpX<)AEqkKf?x?8i zXWaMLyZ?qb1Q<%zhKOwz+xe_Ey7AfG06MvC7JJ40c65pPb?@|h*vhWHRV9gLO7Uw& z(ImSW=^Bd&G;nd<(h6eM+(nyo!=bqpkeFFVEwLtlQH(i1yK0MfF!>5P)H*^m)Xao} zT~e-6-rD-IsMCMij`h3U&~`iS%naZ(BUeRYd-F-nB8-c<`!mL`|Fy zNehB_U&aYyYo_hppYgM7qWt(&0-b%;gQlL?F#^s=-RC0LPrjvrQw${i972yZwG(p~ zJJ=d|kAVj^M2b^=gJIQ?`n_H^JUH+%!^y#Z8}ChC8uhUxQXO7iE3arC%~0gtzp+NM z(==vk#lW>lYNlqc5dWgNLfkq#SF@|Std6{n#cG!;UFmMo;dR-*X*D!QE>9P!RUlqo z$d$Ly$NvT?@&Ai7;F8TKpW@Bi0LoF6HvxJ($^yz6lyfK_<9~x-tPgYh0~E~be;+pU8bEZ;PzjhH@6=bCK11QP5uf zDgJC4|5IcDbJyT6mew3Z0gg4Fh^$3>Ep*^AD(fCa`2hcl@0w9+YD!nD@24C@-MEhD~U1dQN2X3KYoS{2Iz9B3mGL z%d;qG-}r5mGbpg@rUjIbMZ%*fub^Q3>&H+oh}`@b$~lo+4xzk*@;Uw`%OuKq6wJL9 za&CQ7XqzY7ZJ-yA?WE3zH^?MG4G6}j^u$~loi=ox%p zWawd(iy}MT5ZSp`WEbY_IwSgLlDmOvH*|h$76tY2MilT2L)P#sDChC-V?q@0-@WmF DL+9!| literal 0 HcmV?d00001 diff --git a/res/tiles.png b/res/terrain.png similarity index 100% rename from res/tiles.png rename to res/terrain.png diff --git a/src/tfg/Game.java b/src/tfg/Game.java index ab9a6dd..277f8c2 100644 --- a/src/tfg/Game.java +++ b/src/tfg/Game.java @@ -1,12 +1,18 @@ package tfg; +import org.jsfml.graphics.Color; +import org.jsfml.graphics.Font; import org.jsfml.graphics.RenderWindow; +import org.jsfml.graphics.Text; +import org.jsfml.system.Clock; import org.jsfml.system.Vector2i; import org.jsfml.window.Keyboard; import org.jsfml.window.Keyboard.Key; import org.jsfml.window.VideoMode; import org.jsfml.window.event.Event; +import java.io.IOException; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; @@ -20,6 +26,10 @@ public class Game { private final Vector2i renderWindowDimensions = new Vector2i(640, 480); private Player player; private ArrayList maps = new ArrayList(); + private boolean windowFocused = true; + private Font pixel = new Font(); + private int fps; + private static boolean limitFPS = false; public static void main(String[] args) { Game g = new Game(); /* Create temp object of self. */ @@ -32,10 +42,17 @@ public class Game { } public void handleInitialization() { + try { + pixel.loadFromFile(Paths.get("res/kpixel.ttf")); + } catch(IOException ex) { + ex.printStackTrace(); + } renderWindow.create(new VideoMode(renderWindowDimensions.x, renderWindowDimensions.y), renderWindowTitle); - renderWindow.setFramerateLimit(60); + if(limitFPS) { + renderWindow.setFramerateLimit(60); + } player = new Player(); @@ -51,10 +68,31 @@ public class Game { */ public void run() { handleInitialization(); + int framesDrawn = 0; + float updateRate = 20.0f; /* 20hz */ + long maxUpdates = 1; + Clock updateClock = new Clock(); + Clock frameClock = new Clock(); + updateClock.restart(); + long nextUpdate = updateClock.getElapsedTime().asMilliseconds(); + while(renderWindow.isOpen()) { + long updates = 0; handleInput(); - handleLogic(); + long updateTime = updateClock.getElapsedTime().asMicroseconds(); + while ((updateTime-nextUpdate) >= updateRate && updates++ < maxUpdates) { + handleLogic(); + nextUpdate += updateRate; + } handleDrawing(); + framesDrawn++; + + float elapsedTime = frameClock.getElapsedTime().asSeconds(); + if(elapsedTime >= 1.0f) { + fps = (int)(framesDrawn/elapsedTime); + framesDrawn = 0; + frameClock.restart(); + } } } @@ -69,32 +107,39 @@ public class Game { } } - if(Keyboard.isKeyPressed(Key.W)) { - player.move(Direction.NORTH); - } else if(Keyboard.isKeyPressed(Key.S)) { - player.move(Direction.SOUTH); - } else if(Keyboard.isKeyPressed(Key.A)) { - player.move(Direction.WEST); - } else if(Keyboard.isKeyPressed(Key.D)) { - player.move(Direction.EAST); - } else if(Keyboard.isKeyPressed(Key.ESCAPE)) { - renderWindow.close(); - } - - if(Keyboard.isKeyPressed(Key.N)) { - player.resetLocation(); - player.changeMap(getRandomMap()); + if(windowFocused) { + if(Keyboard.isKeyPressed(Key.W)) { + player.move(Direction.NORTH); + } else if(Keyboard.isKeyPressed(Key.S)) { + player.move(Direction.SOUTH); + } else if(Keyboard.isKeyPressed(Key.A)) { + player.move(Direction.WEST); + } else if(Keyboard.isKeyPressed(Key.D)) { + player.move(Direction.EAST); + } else if(Keyboard.isKeyPressed(Key.ESCAPE)) { + renderWindow.close(); + } + + if(Keyboard.isKeyPressed(Key.N)) { + player.resetLocation(); + player.changeMap(getRandomMap()); + } } } public void handleLogic() { - + player.update(); } public void handleDrawing() { + Text fpsCount = new Text("FPS: " + fps, pixel, 24); + fpsCount.setColor(Color.YELLOW); + fpsCount.setStyle(Text.BOLD); + fpsCount.setPosition(0,0); renderWindow.clear(); renderWindow.draw(player.getMap()); renderWindow.draw(player); + renderWindow.draw(fpsCount); renderWindow.display(); } diff --git a/src/tfg/Player.java b/src/tfg/Player.java index f31bc24..5bf3907 100644 --- a/src/tfg/Player.java +++ b/src/tfg/Player.java @@ -32,6 +32,7 @@ public class Player implements Drawable { private int animationFrame = 0; private SoundBuffer cannotMoveBuffer = new SoundBuffer(); private Sound cannotMove = new Sound(); + private Vector2f tempPosition = new Vector2f(0,0); /* Horrible Hack. */ public Player() { playerLoc = new Location(0, 0); @@ -60,7 +61,7 @@ public class Player implements Drawable { if(currentMap.isValidLocation(newLoc)) { currentAction = PlayerAction.MOVING; newPlayerLoc = newLoc; - } else if(cannotMove.getStatus() != SoundSource.Status.PLAYING) { + } else if(cannotMove.getStatus() == SoundSource.Status.STOPPED) { cannotMove.play(); } } @@ -94,8 +95,9 @@ public class Player implements Drawable { return textureCoordsRect; } - public void draw(RenderTarget target, RenderStates states) { - Vector2f spritePosition = new Vector2f(0,0); + public void update() { + /* Dirty dirty hack and should be fixed asap. */ + tempPosition = new Vector2f(0,0); Vector2i currentPlayerPosition = playerLoc.getPosition(); if(currentAction == PlayerAction.MOVING) { if(frameCounter >= animationSpeed) { @@ -104,7 +106,7 @@ public class Player implements Drawable { playerLoc = newPlayerLoc; newPlayerLoc = null; Vector2i newPlayerPosition = playerLoc.getPosition(); - spritePosition = new Vector2f(newPlayerPosition.x, newPlayerPosition.y); + tempPosition = new Vector2f(newPlayerPosition.x, newPlayerPosition.y); animationFrame = 0; } else { float additionX = 0.0f; @@ -132,17 +134,20 @@ public class Player implements Drawable { } else if(change >= .75f && change <= 1.0f) { animationFrame = 3; } - spritePosition = new Vector2f(currentPlayerPosition.x + additionX, + tempPosition = new Vector2f(currentPlayerPosition.x + additionX, currentPlayerPosition.y + additionY); } frameCounter++; } else { - spritePosition = new Vector2f(currentPlayerPosition.x, currentPlayerPosition.y); + tempPosition = new Vector2f(currentPlayerPosition.x, currentPlayerPosition.y); } + } + + public void draw(RenderTarget target, RenderStates states) { playerSprite.setPosition( - new Vector2f(spritePosition.x*playerSize.x, - (spritePosition.y*playerSize.x) - (playerSize.y - playerSize.x))); - + new Vector2f(tempPosition.x*playerSize.x, + (tempPosition.y*playerSize.x)-(playerSize.y-playerSize.x))); + playerSprite.setTextureRect(getTextureCoords()); RenderStates newStates = new RenderStates(playerSpritesheetTexture); playerSprite.draw(target, newStates);