From ca2747ef036428d27a76e4401f9dd815abc5aae0 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 18 May 2020 14:01:40 +0200 Subject: [PATCH 1/4] made drawing of tiles possible --- core/assets/map/scifitiles-sheet.png | Bin 0 -> 13416 bytes core/src/netwerkprog/game/MainGame.java | 56 ++++++++---------- core/src/netwerkprog/game/client/map/Map.java | 14 ++++- .../game/client/map/MapRenderer.java | 48 ++++++++++++++- 4 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 core/assets/map/scifitiles-sheet.png diff --git a/core/assets/map/scifitiles-sheet.png b/core/assets/map/scifitiles-sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..e202b1a73274b9cd2f65112b0d251591a70b89ed GIT binary patch literal 13416 zcmZ{~c|25a_&0v+TOn(*Crc8E?2IK#%915ShQd&?hAhokl6_0|Wwh8s5wZ@l7n78o zVUX;`I?VPQpYQkiy`F!5FE3|?nRD*zzVGW?@8vpi=B9>cnJ+K{0C4t}(M<~gpy~kM zcQDd}$8?LjKJbOf$H>kf09ZIrf2n}n{PO_7Z04b-XKwE9{mk3n-P=dxmY$x7kDs@j zho>t5JfAACgjrdx@@O8-?d#r-4S#dn+k%@>#6mYAoGVR2T9k?1I9BxSB=_CUbNc$U z{QX6-G|9=~iQIQ(&criMFf56_OOARU8$U=`2z~!#to7*c5V?L_Yvto!K^>Z*gYitJ zk;2^@;b+Qqh0e`K^>z0yEXis|FkkWk*ct0wMEyx(Q~(~Xp>gG62SYnR^?a0t5$G_< z>$oNmLt$If&2gX#e@WHxEKTJ$V>lO}9g?hD0%#jhg%@N?SOP_~fYbL!4;KORtALXv z;_oOBUVzUDr2_2Vh;maEr2!(GuCX@(cXi++`d+*~V0#VVa=YEF3QSxDuHCY6GXg#} z0v*HbEVTgR8Q|L8*yzguZ7AT>FDCXJc$oum8SL6<;I34&uSkO{l~b$HbV*e|!k+P} zFN2MZtdP|3E#50!O3u{Ix!ST_!8v@_BNW-@_kI9CQ5rWm+db0rVb<#5VWs2-R_N6= z6g}nQ!-tFHWpt&FHUKO6o zPS-~NZEDlxc7sUmOks;7% zVQv7Q9&1sBrd=(2@QCK{wj{glvkvSL0PMDScm9@QqzQMAT0jR;wjm_LB5@$x?bd5w z0C2o{N!Dtx4${X605^*wq(ABK?{}V;>7W=G{E=XCjF zq^{Jfp-+O+PIAAs1rIVU_K&{>rN9!*=4#SlB7m8o@-X)6dB1EIJiS^)TL6 zESZrvCmJu>X++DBa7kn!mh0}t+i5q9g=&*XDcc#86V`hB^enW*%3lKwCE6fe5oaMCBilQ+ zrV~bGA_A8b&rLBYGts=f+a-B1z3lcEiRN?1-RB=(myfYEk`Wu@Na2)Y4~^C9R=&g$ zr*~blDV6%x=MPrDIDQ%Y^0E+Hl_}3tG`b*`J}~9-q?SSTjf}{Z{^+HGrEg0LOZ-cs zyY|cl54C+i;4QII7K4wC`Igz26_@EFm-UZkKj_TaSKLv3u`nsV zyz>m_VSGX7YqIZ@@Qo($^;un0mS4|a$zjX!wzidSkPhQc8)VKf&XCC9mzJ|CuPCXQ zt6;I-v;J33$Obwz>sx+T9QtX#b;rUF*xZ3X!NwT+kLz9 z%}npZ-J;LX#nxUCmPdSb&t*iPoUMEn5OJeh;`7jCSfF%EHc7B0L9?R#t*V}av4TyV z#oik?2*YBwFFya7DbtEnY1SS*evWJVGWIfmiQ=6mc~^%g6`5I?wv|SecPkCo+mxy| zOAAWc^jqu*5v)3W#*z+_hOm@jx`GwUNz2(%=29LLO|^q+*@`E{{BK)s2BEx4x3UY{ z9m5Onc$dxvx2>EAypSVVk)EEE9vGgnrLQ}4iGKRb@Oh1%8@}Eef^vP+xVw4}zG>?f zJ7+j&Exb%?8qs+F#~{goEzzUbVe!)9)841O?-!Jt z45|vM#K&5yT1wBAHkqcIRu+!IzJ0*_cVzO2PYraQ`oUTx$2!=5mMgw;(Ti_A^)IV76#>^n}7<1Lyb4-5v#& zd839fURaZV)Lv{t-0jHkvRPWPdHlVz{cTIe&klSaEQI_zD9EeJ>)I@vuGv!B^4N-* zLH9zu-bLJ6Ua0HxvLR4|&j2%QLfY63na zOca$2QJZ!>texD{Ni1s8;nqostcqOjtP*wa-$<8~e%N{MR|* z8~lu9bWF6(D@d|WtnGyn`K%j3BQtvbn42dzGjGo2!Q{6LY}`|-!N!1k8sZ2?tT>1rh}&vp!Pb1w#4fMr<><;|Asf8Z1RcDQRlx|F9}mP1A@ zQ~OS=smhxj9d_w5o<#9o&LHt*=HM>DF4#r65v7sX2|WjCA=6zWX_JuG8)>aKf-m(b z6w53(y_76ZZM}2$&TO7qAy00g$kXeZYHjjSuhUX}bt^oFu)l7B-#@xW*OGg@ z5*p=%G8hJ))TMr;v%AXNpj-0K>b}&tG(#=S)y54q6gQ}vSy^~xX!A$i;B=~T{x*`b z$fgDmh4!qO6A>)iI>hRO)xOnMq8`_?0p){z#VS6N@bp2I=~Lg$KAK-NBnC0ohViD~e*}MNT3MuwU0F9|?GtV% z7iDkeAWTs1v2N~eu0ft{xe%h^v@lz~qJ~|t@t)Oy$JA=%XgX{comh}j@B%J-JmWO|t|4^g(Jh$#P$s0aYsZloPO)3j@9$2jTgS2R))DNDRWxW z&YlcSCcQL^6GigQjJTd*tO@Oz{Cn=M24hu9QD6C-kME`Pt#ofjr$wsJb&*R*3QL!fQN?+JYgQheLo zG{&3k;>jE}qH?d-^pVS~?3ov(yg=$##T0)GVqCdUx0)%uCSWLwvh0oQ8;f@~w3{}Z zO@1`u2+xFA*E0h$d9*{4SwTlteFw+t9%L9ZN|tQ4K=6|9v?8FC8gwd8Dw8Rq?0R0r zxoUY}r`|HwfAR_&khbakdKiW(IZT$YfHUK0!ZD_Z<;Mu?0#xIZL`A&$-a3}@n^-ap zZ9F}Hi8{Lq7paBv6c~MLOk}Q4!7P{T)luq50o5pG!mDQiT7NnVdr}${%KnB1u4w`t zGbL39J9U(Gad`6tRGCuae#P>_c2|y;Id8>&#?DsPnFJ(@>>+U(tJr~gP8kNjF4YoD zS0Bfp9q-wYyr=UNOTU&5rM`L+hpDsNrpn7qHVi`1I+Z{2)F7CSEWc|T^m5eM_+#0Q zgi6A3Ig_G15IJ1wZ=zftDPWH>`Bt?UhtMy%bl#d;h4^jqOG0SHW9~yCc&80HqOkIx zw`%6taSHie!Ny4=sli=J*NXZlp!$-W`N*Sl zB`3~IRhn=nZR0~8g)oa|iDQz$LnR0aE{X;0Hy>J+;DyJ6FPQcyV)(wu*_X=RR0+tX z_p3*j%&SERHoJ&c%$xO=>;!V*2lg{x?^3j}dQ2x!B?4tg86z*jGI3QXy53K#%OmBE zK?tSFl8(s)T!TYW4>H}gX;l`UAV%6pXU(=!TU9Z)&Q|0-iEz(XV!3+`H9t5`N#aCt z9H2Z8l{+bQJuN;D%C0{Rsg<>gJ29`{{t(%x+NM@njHl{wQgqyrdLmuR2PWI0EDhC% zVb(>M#hG-kcD|GDmef2v9n&%K*fhPI1Lc4(HHtd0JQJVO`_W`Z3g2Qi32o|5F_bu& z0dl3_5?_)A4zt#UO1MxhEDFgiMYarn&w?VT@dw`b5fmM4;N6RXuuyVP(V>jAsN1pA zQ1M)ARK!|9_!(CCjFLm2$Rffv13!>zSXd$(U1kPna#*`cYyo^$Uu|!`edscw>KCgn z;R{IZ)2Bv9Y(kmEC_9-u7g`xh@ojbwq6taUL{|Y+BF%sY(7}-XxlrEplGps^ZUUb8 zakCC%dq*3`k3<$Q0IftHhR32e#V9f=!Bcz4i)Zzdr~`cIGq8O@#U~SaJvCXI-tHv5 zTKtRf9PNSSJ=6pEh%a&Xn_$E)!540~QP#ap$+S6{<9ilLb0#VZxpw#5G$#KfMykh* z2l@vqnc%JU2@<6seqPFspM zjWteuS3mFHboGUl+l4PD3yQCot!3cgLdw8B5zz;1$EsIt`}?nqe{ugQhK{7&S;yQV zETkbJ*uKu3DB)s!MhM{(UUgmg9T&td%sK(uKHBb|*Wl*hpH(Fzr9u9*Ikh{l9JQIS zqpp#7!hEj1$;6(DZMtH{drohIx$n84NP=*J@HD3XB*wq381k<-C{*))s(0}~gS>ai zU8tyK9=2-NaXzRkjrUB+9Ba*@T1RO`$NaqEMR@TRLI!SkNb_ML#rud-e$_TVo*N>k zYoGV^F21t2!VhKACkvNuq@SF2NC5Bu57@qf^oG4Xc(~g!a`h11EG%-6c~d6=c}5O9 zJ~v|Z+b=Q9An-SVeyvtmB&v6=Vr0rZI^y^C!t`iwoNxdsnpBPtC`V-9C(gW-W0Ze` zUX6a=+!ScHvC=5elVS+}8wY*z?Ux`r`rp;{qv7O$WOO-eYz5IQ>tuSf<~6hroS^GU z##Di%o;QwViZU^$NRs2r>k{=C6toTF(UjV}H#ax(!PDSo24&R(F-fk#2UH*+wDYTCG=>UKss*-`6==A|$hzla@);@|cG> zv3U$~lRNDB)OSzZVljKjWL`W*hzNY38?X@Mvm8erw`3WFtHmSNKAdNLB?D$v2tMyJ zwvV_^d^=HD>cFzeCX*1YVxw=L6QwbIq6QhKc2mzn9>{z!DXWFhQNZ$?77Nw4=L58( zDXx`}dXn`HY#m`me79{mjg%&re?%w|@*F8U8$a{86O{^IFbG%UsaWT)z4A6A1fILN z2n%!{77Y=GAJS|L?l3Dtc)MZzCe5y*<>Bt>;ATyP;^~$nYZrjG8?h{gm`t`rtIcmk`V zcs|X33C%jG!4pgn_mQY`E70 zsrBN8Yx+|IJ8gp`_ojeCVy;y$B;x=^en#F&DS=TLT~s7qSw}aU7eAt{7jNywVb_XD zw7j49y+-z(H&Nx&PfVf${s)~WI2<2oG9Fw{x|jELp&429zr5cAK3qtFsPO&guOz{Tlr#`wAioPQK-!4;iC#zSf~KmMTj zJ>ZO{RDMK}9JokeDxY3aHBCmg7T=G3~kw@Xf5{dT8)S!kdL%d8;ZJv!q`KP&B2INbB zh>l&@x}>txLs1W=2F*OhbjIEO@Sc<&x#zKoC{Gg9g(2%5W!(Z%ak@6jWbU&EdBV#I zyWc8G1!B^ApMEG%m4{Crr_{jn0xo6O!Q*wV_J4!qo2(0%Syy$N z{w`d@>*&toa9wFxCA0C$V10U+Xp8PnzxGgpBudDPRDh}=%`X*Lm(}@L6Hu%Nr5oT9 zpu2_N`6;c*XuP_QOYg)QvaET)W=~L$DetQx0hCd37WMA8;hoq%Y#-UXnq&gj!SI>m z40=OH=1wfEma;AjFF9sl5doKYo5&{vH#mgwXw%2-`LB#VS^7rCJo!R0*#yry!vo=g z93sG@HhmEM^yJg);dA~9|Myw@9_$mIZ<1mQ@Ld{47ns$gu@NA0(bvxX|DK6c)23%I z+zJa@L2rJ;_EGoG52J(TBof0WD8V3ZI8nKL!hgnprqtm-1J}Rq?O8CMj_==-GEQ|} zMa6GrQ61qW42IJ&|8vTG89#Kb^8br@^8(UXl-%TNegs*=%RL_re2K2tJ82hC?+C5> z`F~4ppWy|QHA#cC4S-E7UJ;G$_^|G9K%Nm z+o*s+UjdJqzbZogdtqQ{rGJl$yz=@yYJ=F;o zvqz+SoL-((0Xa%zG8F!m=3qdsYLWMDoU$G9%h}{s)?0Ffh8Mq+-nTS8SUOzwR{c8w zNw_ShNG_K-vj3;wGWb;cE~0bun9u2fQSSYhmJV~WsO<5cIAh-X$63N#J_4v%W1-`# z@6)Ifkd9))hlqNtg(uP86q_|fDO;0!uE|t{!PEGTj4-~1T;Vc#QmEG$^uwP$R4L8efY?%9Ff$iOI;2Wm{Dy{yPfq#F6TQy2Yd(Fzug{ZfO!nMF$ewr&j6?Vl?YO?0UEM{f z{4#J&x!#2W){ATQw?`?L*S5#VS1zn6Lw41uTU)M0U0t}5JTl(<=Nl_k?x_MnX!>{g zR&QHx1qq=02<%>KwOW!{EiX_?zTeceQu9su(;ShgZxxvglfE3xET6{)EzqEIeWqfZ#}oh1&@^X5C!qbb1AgW|u3N(*Rt^9NH!@@ICE z?YI1Jc8;J0Na)`SC#G^7S$}a; z6Z9J@#N6wI79357ug0^m_U3h#l_SE~iKEvxC6F8?#rB1iviLUOMcnN@qO{_ujwl@X zIejBj0*<8s)NIUHB3CE$2CCqj7qb8GS}>^`ygX)DeCiY=X2@PdE-Y-DavhPn>CFon zp$7}ZGIk{c`F5iWhe7@Diuv>^K0ZocUj#1=T?18$ z;3-TP&YgMX%g!XffI~y1@g_g1BS-)R78A z9&Dde84mkSzgD`=EL9 z;k7#)5Jv|0Px!dqu~*WsPX=3e59nV!z!HBS*mQ39iV{0to+$h{L@3*?1C!ifS^!_! z+oB5u*WZjE>+athOT+AJu4=2t%$I@|20YaMJ9)kr5*DiFBRYJKQiQkLcb|sx5~k~P z?0~c2?9M0l%AZe4|AW~KQ8#3DE?SYM=i0Fx2k(RpHZS6)ph^4o?}9{=1#`5u*#TQ5 z=9zgTO7<`-OZOA-m^MBj9J~?bL4xilzqMtL!W+g@4Gv{3wAB zk%vLj@MPs#5A6F|lD;nU4G2pSNEdqgmP4{E3F>-J3E#!Utg-KD!2d5`c|#Al1`d8a zof;&*Bw{aI#}RVEFAZCd-22-^&Zj#gzDenhyJh3cI7r44lhTxpj(cu^8<(W*TMAKE zjEQf!4s`U^Z3B6kg9e~0Q}jdau&#CEFZW-YA8dfXrF|9ZyO(39XB7*jyR_Y{G(Hgp z*7qwrZdE8W(ThFjm6ctG^l@7QW$=AlSsc*e?sUl8rCg{&U6h|F3}91&YJps7_*3D4 z#qx?C3`#5X;b%)LN8hl&!mqZ}lS#5DEd)aq;z0x^zd&>m+&yFXu>$DTygzG7&a_|g zMFpFQOqL5%Hl>LpQIyobF%|e(CkviW_5?}77_J;1#>i_d@B0FvMPa zPfPoR$GXn*)G)u`AWVn@5_O6r2D>!cAZH(bL3!|6oMB*s3zTHF;$TWxQ8*6~Pd%fe zC?bPklqofVY17SM^-bUhE<+$Riatv)hG@{HiJKsJ4A<1|9R((((F;F@1F@cL=~a!K zt^fIPf44U;?9Iv^Ht-NZ4{!X?W(ZAPcCPG*#!4K{Cur@w0wd2HUOQVd4f*H!BW%4U z5=r;d9GCvRTs`k`d#*ylWDNH0^YXow=1FIq!ZcYr^J1(^mghku!hjAU+4%|YAql?$ zGcB&|g4DfK`mS(gZMrsB5aw|{?J4h!0pGIT|XzAkVH4O8@q+{mR5 zseZVL)0+qZ*i8p zbcpLp(T(pr6h33pW{%}}-&9b7>k+96G=GNblaE3xwh%e^W4@xd*sS#cql!}f9vt@f z&7H}JQwwg5*yI&xOEey*v`#<|zI>G>rO>7JnDOHtU6blbS@#yQ1wabM0TIfP`bt<< zQktS{1SqyqK7;qLBSU{gPEX48tBPca6N6jKP67T^kG$-(+;F3a%d}$n`94duTLN;H zTyltd{ezk$2T@}M#yA*`vq6G|cKNiEqq)1#$J%htsobqo|3agy=9oCk>SXzmQMXwu zx6YAr$2HJXvHECAyt9{b?a#yCp!OZxF2cL|)(Kb6A6cAomyepwkuwNW*`UzHNY-_L z4`kQM3^MRR+Mhy+<@3sv*-+uq;dQuxB0{UoWCoC()kbXUhv6oFQPfKVoz7+&`0Kne zys+9WH`&PJ4hHVJ^bOlM=1$0)qNuP~(d>^qJ`)Hs-88>Hybi8|?dcByR_<2T)E=}G z?#jX8+c}O~$~!IE;$apP#hp8@ue$g&6mXXT5l}ki-am+J&RzM%;pyr z`Nq8I=pOV8xlc@+4{b#~RKEpLa&8UXexz|Y3ai6BPz-QhfEM2TT7IR}wt@%Jl%J)W zt-0%b>QqSRww#+U{e~J`-!p4$$JUSwNYD;Dr@rw5{>Kl94=yeS2@zK7o`W{?QxZ>h z%F)|1330MP{~PyzvHR=raLNDTz;bx4b%EY4Bk4$(CcM6Mmi+gHzJJ2ypJu;|+n2Mc z>!B&c>Ez?*!sdGd2}na+dYv9PYw4bv-y}KAh9{3U^%6%W`0?0;f%P~$&X+MemwMl5vdb<7;YYm#&IssYg#O|cZ0Bhe{$)gzpozn2{G=X3MJ$}!&>OOrSuU@=bs-6c9yAT|Ek`W5$W_uYNF#;aQi z`dXGnDX0U6O!nz$Q=z7@KN?v9T>ZC2ZHaf-Q6TuOZ?lZpk8Ok4CV;dQWVb#>${v(* zKxz(bs5)zw8LvT|2_ML-JtKK0`OL!9AxP?icu#|Z7)w)qB^o|jaBr9Q#AGarCE#GO zVr^>m^|*GyY<(NVw86QN%0bGra#ShV*a4C8^E!)FVs@{?#;;J+A@7%Hd)OkPUgW!Vh z8r0!MRww=({6J8y3_RY@rF(QZ63Pk(hxn=LSGHu>`}?5OGJKO&In5TudMCD0 zU4ol>A-F*vf_9@2YJ%2n5Oi2c{I@vV_jXg!5U|@&dob++m&U1^2cHM76{^(!I|FQ? z=FSq}kyla<-}N3!{YLwJ7G3}ivwGES5G0L0Zqt6sW`dzF?D4ANAR6(eXudk_2txp$RmmAIiFom=~zsghvEz=t?PHo zO>nW|4A`c;u#cQl-8PZ}u}9cbD~z(GyiN6fe`+d;0xn$TpHrNa;0JMXX`G7-5X&%Mdzd%jx6u^AGrINSkUXM@#R$ys3BC$gKa&g z>cdPZi^_6UMV=JRb;{B?R|4wLNiUZaF>krhb7M02_2zqcy-M>SS~@V_k=~T6zHIcLvh)twsaGT@lhF280xu^h$vN}xcd95(obB2QJC!Q* zK)V`BC2JNBuulpdw*H&*w&MH{ygoseK6SM+1g&;qPY}}N{=-k#Dc=K3xX3lNeJ}EJ>>5 zW%drxFRZy4#OwCuOgnEV`TElf7kOWfI_lA)#he9KqMpP$iMs)<-B`otE8a+6k07KO&{eZQZPhYp}VH-JyXGmUc&pl`u81EJ#FeoG}_)Lu-ikFfO1Fz(v7<8 zmr8YKW6e$*Ez*@y7fG4Ybxr|0 z2*EWpLFchdc(Z2eN*YyXfil&d7xYGjKEE7TZY~9oL(iTgR`#3iYK=d{-tNZ94u$PtI8ch!{{Na; zf4+f*zadc7s{FG-xnS=9CcdFFkNd9yWmS$BcA}RuO1zkW(Wf0(o^IG9;N{d zB<-J43KoXZ>i`v~W=>tTQTEq8+fm_kI$9LaVn}{es&dQ*K~tWd9mCPdU)8+~pHWrC zXVilI)Ek`I#<=tzn|k~J_Iu~ZkAU!!R+cxM$v=1)8W3t-|J#)Tnf>%}uwc=D=8hw? z^9R7oK{Ih=;9iW#0T?4$tq=|rl&^#b;`jW`u_`$2aoZ+>`Q zf-J1GfK20Cm_z3ZaVuCze`xjH=wcr2VVej0bUcvsa~7IcrI3*S8cSx6&0~du#2U=; zzZS&Fuo$Skc)q@H{sQimIMs*$?JRvBZAUI2b8I@yRCK3Q`0s%Im2HN8Y>^FVg4_TL zuRz9?^PoU8j8BM1#tp8iZhaO0=K)mZP!L4J|2W1>TFqx_yavbR#c4-o1!@ZP*M+3T zfm!EDT+fw$GAWGuzn0R6#l-_~s9&h2PtV|li^NiUsHjq>`~{rY2C{4jn6ZxP18CFEAAl5mypED%DPGG+h>`zIA|1RG-Z59Q;xz#3@12)OF zp9Kqw)X=!#{O8V}1?|QC-Y42rDFq3eNFCsE6f$pzPW08Tsx?b>Al6VytCjT{og+ip zX1_Q7@L5q#bAqyC0xBr*qoq%J-(e7Uhr?vV%<&Hn$e&YcPwpk56DVMl+WNY_Ca4OJ z0Z+ucb43-szHD%&2I@3?`IbPdu*f#UR{<|puopx(Ck#48_6T9KtDWz@^8Fo7P!;Irpdiw?8A|;@L;=j3eytC;+oXj*xq-aGrt00-^gNZ@oeN_#2 zGwA+}k$K;3(+?x7NY=k0{HP7ejkIF)45E!+J11ZRcKjU6817e01kC;22FRdzZK+MwXpHDnV9n-jL2R3u(%D*6FtXCbYKqdAGHcoE zt!6b9qWX5_yAaS(F+kr(LEV2b?Yj|lJbX+m`%-LdCGu|;#GidxMKjPVdPJ;4*aS_T zdea?mGlm4SwvX}g?dM60J%1iTbRvp_5}N52YZg?5-huM(+5g)dI^_6KBl_AI(kZS} zpCaI|dE0Z_{bCNiNpH!=eb^uj07L%Jh>&I(MzlX8EJloy8SYkh%f9>1g@gLs(6oJw z0F1zvkSg}1Cb7V@jzapYIk5_n?O;ZZUt2 zGodbFgX9|K-^A~_z%1>XR!VS(g7QrzD2O{q_T80-;M5%22q zWV`otPmzMszpo{6(fc1QgpOThF_>04%Hh#_4OhhYOMb9~Fyg*1A*7F1ta>nWBQJ;l zy)DLP?;@;={zC7GX{&F%hXDV)z0hkij>2m^xpY~HCaN`t(&+m1*5QXnxHG0PGPVz* z{L2%NtYY5M6w4v#tV2SZl8`b*&Xw#c7A}1@(mg*+xZOdgxnZTobF^yC_w2blg5;pW zb;EjL5f7fCDwni(m}|4M!gBAzXb1rHhwJ(GK+HMjPb7Dt}E-gRWxF z$jDhW0Xa$Tb@~Kc*XYzDtp@%$H3&hA@Dq@EY3VZhVTrbX+c|M5oF%FEY|ZI23gBSo zbZ~lGkzP*2pXYDtN2Fcv2D zd@84N-j!WH>4bP96b<^9VB@57{+x)|N?8s2IRP^P+?N%e1SCP08$?g~D7w`14|82i1SHb|?D-xOkM`1>{0nHZ;JiJ5g~mB(>|8B;d&73+IC5D&F~9dNzyFpy zMMnyCG7vCb>GbW+U@`k~0}9H1h*sR?Z`a(M%!*(5zecARM44PfJK%-(Jb>xEtUZKL z{ot(EL@cXpc?TMsw+C@YjeK26dNli!kN=qfs>!F+sq;N>pw{tl8fEKppF!oPzx9Bi zbO6bE@B3)s|9YQq3jbg4)8#ROr$gWqi_rt43lE%oMYZ{D*gza#*yy|(z14m&h5;?j zdjIAZl)bvWG2B0wD_R}D4%%V|UB%(orN*eL6AOkbNhImUX{hYBw`$27WHXtI_%2L5 z|8N_88mrTN<|roxJl0mu&`aY@4F4V?2L1)&TF-Qu5H}{ihN#pGOXj!#9EPZ^p7|>S zkIt~9gLd+}_<(9NQynFhb-XOXx8IM9$KcP2O6CXip4Od--LM|Bb~q2p*#fuV*Y@3- z0Xl5piW|KLL~%eqH*A4;7?A*N7;#FCz^gf?Le=#Tusj-ttkp%U5t-@y=Qjb#hubTE z$nebVeCU1#ChXCxL screenHeight - img.getHeight() || yPos < 0) { - yUpdate = -yUpdate; - } - - if (xPos > screenWidth - img.getWidth() || xPos < 0) { - xUpdate = -xUpdate; - } } @Override @@ -92,6 +87,8 @@ public class MainGame extends ApplicationAdapter { super.resize(width, height); screenHeight = height; screenWidth = width; + frameRate.resize(width,height); + mapRenderer.resize(width,height); } @Override @@ -102,6 +99,5 @@ public class MainGame extends ApplicationAdapter { @Override public void dispose() { batch.dispose(); - img.dispose(); } } diff --git a/core/src/netwerkprog/game/client/map/Map.java b/core/src/netwerkprog/game/client/map/Map.java index c9da100..831cc48 100644 --- a/core/src/netwerkprog/game/client/map/Map.java +++ b/core/src/netwerkprog/game/client/map/Map.java @@ -1,5 +1,7 @@ package netwerkprog.game.client.map; +import java.util.Arrays; + /** * Map class to hold a 2d array of tiles which will specify the map */ @@ -67,5 +69,15 @@ public class Map { return this.map == null || this.map.length == 0 ? -1 : this.map[0].length; } - + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (int row = 0; row < getHeight(); row++) { + for (int col = 0; col < getWidth(); col++) { + sb.append(this.map[row][col]); + } + sb.append("\n"); + } + return sb.toString(); + } } diff --git a/core/src/netwerkprog/game/client/map/MapRenderer.java b/core/src/netwerkprog/game/client/map/MapRenderer.java index 38667aa..dfaa8b1 100644 --- a/core/src/netwerkprog/game/client/map/MapRenderer.java +++ b/core/src/netwerkprog/game/client/map/MapRenderer.java @@ -1,16 +1,35 @@ package netwerkprog.game.client.map; -import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import netwerkprog.game.util.Renderable; public class MapRenderer implements Renderable { private int tileWidth; private Map map; + private SpriteBatch batch; + private static String tilePath = "core/assets/map/scifitiles-sheet.png"; + public static TextureRegion FLOOR_TILE; + public static TextureRegion WALL_TILE; + private OrthographicCamera cam; + private static int x = 0; + private static int y = 0; - public MapRenderer(Map map, int tileWidth) { + public MapRenderer(Map map, int tileWidth, SpriteBatch batch) { this.map = map; this.tileWidth = tileWidth; + this.batch = batch; + cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + Texture texture = new Texture(Gdx.files.internal(tilePath)); + TextureRegion[][] tiles = TextureRegion.split(texture, 32, 32); + FLOOR_TILE = tiles[1][6]; + WALL_TILE = tiles[0][4]; + System.out.println(map); + System.out.println(map.getHeight()); + System.out.println(map.getWidth()); } public int getTileWidth() { @@ -31,12 +50,35 @@ public class MapRenderer implements Renderable { @Override public void render() { - Batch batch = new SpriteBatch(); + batch.begin(); + for (int row = 0; row < map.getHeight(); row++) { + y += 32; + x = 0; + for (int col = 0; col < map.getWidth(); col++) { + if (map.get(row, col) == ' ') { + batch.draw(FLOOR_TILE, x, y); + } else if (map.get(row, col) == '#') { + batch.draw(WALL_TILE, x, y); + } + x += 32; + } + } +// batch.draw(FLOOR_TILE,100,100); + batch.end(); + x = 0; + y = 0; } @Override public void update(double deltaTime) { } + + public void resize(int screenWidth, int screenHeight) { + cam = new OrthographicCamera(screenWidth, screenHeight); + cam.translate(screenWidth / 2, screenHeight / 2); + cam.update(); + batch.setProjectionMatrix(cam.combined); + } } -- 2.47.2 From 2eb3aa7ecf7b27525d3c34eb32060c159874160f Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 18 May 2020 14:16:32 +0200 Subject: [PATCH 2/4] added test path --- core/src/netwerkprog/game/MainGame.java | 18 +++++++++++---- .../game/client/map/MapRenderer.java | 22 +++++++++++++------ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/core/src/netwerkprog/game/MainGame.java b/core/src/netwerkprog/game/MainGame.java index 49e7c92..632520c 100644 --- a/core/src/netwerkprog/game/MainGame.java +++ b/core/src/netwerkprog/game/MainGame.java @@ -32,9 +32,19 @@ public class MainGame extends ApplicationAdapter { String[] strings = new String[]{ - "####", - "# #", - "####" + "#########################", + "#xxxx #", + "# x #", + "# xxxx #", + "# xx #", + "# x #", + "# x #", + "# x #", + "# x #", + "# xxxxxx #", + "# x #", + "# x xxxx x x #", + "#########################" }; map = new Map(strings); mapRenderer = new MapRenderer(map,32,batch); @@ -69,7 +79,7 @@ public class MainGame extends ApplicationAdapter { public void render() { update(); // clear screen - Gdx.gl.glClearColor(1, 1, 1, 0); + Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); mapRenderer.render(); frameRate.render(); diff --git a/core/src/netwerkprog/game/client/map/MapRenderer.java b/core/src/netwerkprog/game/client/map/MapRenderer.java index dfaa8b1..c12e7fb 100644 --- a/core/src/netwerkprog/game/client/map/MapRenderer.java +++ b/core/src/netwerkprog/game/client/map/MapRenderer.java @@ -12,24 +12,31 @@ public class MapRenderer implements Renderable { private Map map; private SpriteBatch batch; private static String tilePath = "core/assets/map/scifitiles-sheet.png"; - public static TextureRegion FLOOR_TILE; - public static TextureRegion WALL_TILE; private OrthographicCamera cam; private static int x = 0; private static int y = 0; + + public static TextureRegion FLOOR_TILE; + public static TextureRegion WALL_TILE; + public static TextureRegion PATH_TILE; + + public MapRenderer(Map map, int tileWidth, SpriteBatch batch) { this.map = map; this.tileWidth = tileWidth; this.batch = batch; cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + makeTiles(); + } + + private void makeTiles() { Texture texture = new Texture(Gdx.files.internal(tilePath)); TextureRegion[][] tiles = TextureRegion.split(texture, 32, 32); FLOOR_TILE = tiles[1][6]; WALL_TILE = tiles[0][4]; - System.out.println(map); - System.out.println(map.getHeight()); - System.out.println(map.getWidth()); + PATH_TILE = tiles[4][6]; + } public int getTileWidth() { @@ -51,8 +58,7 @@ public class MapRenderer implements Renderable { @Override public void render() { batch.begin(); - - for (int row = 0; row < map.getHeight(); row++) { + for (int row = map.getHeight(); row >= 0; row--) { y += 32; x = 0; for (int col = 0; col < map.getWidth(); col++) { @@ -60,6 +66,8 @@ public class MapRenderer implements Renderable { batch.draw(FLOOR_TILE, x, y); } else if (map.get(row, col) == '#') { batch.draw(WALL_TILE, x, y); + } else if (map.get(row,col) == 'x') { + batch.draw(PATH_TILE,x,y); } x += 32; } -- 2.47.2 From d70e39e172a35e64820a69100780c7abcf50ab07 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 18 May 2020 15:28:33 +0200 Subject: [PATCH 3/4] added moving of camera --- core/src/netwerkprog/game/MainGame.java | 31 +++- .../game/client/map/GameInputProcessor.java | 150 ++++++++++++++++++ .../game/client/map/MapRenderer.java | 5 +- 3 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 core/src/netwerkprog/game/client/map/GameInputProcessor.java diff --git a/core/src/netwerkprog/game/MainGame.java b/core/src/netwerkprog/game/MainGame.java index 632520c..ebbbc2f 100644 --- a/core/src/netwerkprog/game/MainGame.java +++ b/core/src/netwerkprog/game/MainGame.java @@ -3,11 +3,16 @@ package netwerkprog.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Files; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.graphics.Camera; import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.math.Vector3; import netwerkprog.game.client.Client; +import netwerkprog.game.client.map.GameInputProcessor; import netwerkprog.game.client.map.Map; import netwerkprog.game.client.map.MapRenderer; import netwerkprog.game.server.Server; @@ -19,16 +24,23 @@ public class MainGame extends ApplicationAdapter { float screenHeight; private FrameRate frameRate; private Client client; + private OrthographicCamera camera; + private GameInputProcessor gameInputProcessor; private Map map; private MapRenderer mapRenderer; + + @Override public void create() { batch = new SpriteBatch(); screenWidth = Gdx.graphics.getWidth(); screenHeight = Gdx.graphics.getHeight(); frameRate = new FrameRate(); + camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + camera.translate(0, 0); + camera.update(); String[] strings = new String[]{ @@ -47,7 +59,11 @@ public class MainGame extends ApplicationAdapter { "#########################" }; map = new Map(strings); - mapRenderer = new MapRenderer(map,32,batch); + gameInputProcessor = new GameInputProcessor(camera, this); + Gdx.input.setInputProcessor(gameInputProcessor); + mapRenderer = new MapRenderer(map, 32, batch, camera); + camera.translate(screenWidth/2,screenHeight/2); + // playSong(); @@ -55,6 +71,7 @@ public class MainGame extends ApplicationAdapter { // connectToServer(); } + private void playSong() { // play music Music music = Gdx.audio.newMusic(Gdx.files.getFileHandle("core/assets/music.mp3", Files.FileType.Internal)); @@ -90,6 +107,8 @@ public class MainGame extends ApplicationAdapter { */ public void update() { frameRate.update(); + camera.update(); + this.gameInputProcessor.update(); } @Override @@ -97,8 +116,8 @@ public class MainGame extends ApplicationAdapter { super.resize(width, height); screenHeight = height; screenWidth = width; - frameRate.resize(width,height); - mapRenderer.resize(width,height); + frameRate.resize(width, height); + mapRenderer.resize(width, height); } @Override @@ -110,4 +129,8 @@ public class MainGame extends ApplicationAdapter { public void dispose() { batch.dispose(); } + + private void keyDown() { + + } } diff --git a/core/src/netwerkprog/game/client/map/GameInputProcessor.java b/core/src/netwerkprog/game/client/map/GameInputProcessor.java new file mode 100644 index 0000000..41cde72 --- /dev/null +++ b/core/src/netwerkprog/game/client/map/GameInputProcessor.java @@ -0,0 +1,150 @@ +package netwerkprog.game.client.map; + +import com.badlogic.gdx.Input; +import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.utils.TimeUtils; +import netwerkprog.game.MainGame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +public class GameInputProcessor implements InputProcessor { + private final OrthographicCamera camera; + private MainGame game; + private ArrayList keysList; + private boolean isWPressed = false; + private boolean isAPressed = false; + private boolean isSPressed = false; + private boolean isDPressed = false; + + long lastTimeCounted; + + private final float CAMERA_MOVE_SPEED = .3f; + + + public GameInputProcessor(OrthographicCamera camera, MainGame game) { + this.camera = camera; + this.game = game; + keysList = new ArrayList<>(); + lastTimeCounted = TimeUtils.millis(); + + keysList.add(Input.Keys.W); + keysList.add(Input.Keys.A); + keysList.add(Input.Keys.S); + keysList.add(Input.Keys.D); + + } + + public boolean isWPressed() { + return isWPressed; + } + + public boolean isAPressed() { + return isAPressed; + } + + public boolean isSPressed() { + return isSPressed; + } + + public boolean isDPressed() { + return isDPressed; + } + + @Override + public boolean keyDown(int keycode) { + if (keysList.contains(keycode)) { + if (keycode == keysList.get(0)) { + this.isWPressed = true; + return true; + } + if (keycode == keysList.get(1)) { + this.isAPressed = true; + return true; + } + if (keycode == keysList.get(2)) { + this.isSPressed = true; + return true; + } + if (keycode == keysList.get(3)) { + this.isDPressed = true; + return true; + } + return true; + } + return false; + } + + @Override + public boolean keyUp(int keycode) { + if (keysList.contains(keycode)) { + if (keycode == keysList.get(0)) { + this.isWPressed = false; + return true; + } + if (keycode == keysList.get(1)) { + this.isAPressed = false; + return true; + } + if (keycode == keysList.get(2)) { + this.isSPressed = false; + return true; + } + if (keycode == keysList.get(3)) { + this.isDPressed = false; + return true; + } + return true; + } + return false; + } + + @Override + public boolean keyTyped(char character) { + return false; + } + + @Override + public boolean touchDown(int screenX, int screenY, int pointer, int button) { + return false; + } + + @Override + public boolean touchUp(int screenX, int screenY, int pointer, int button) { + return false; + } + + @Override + public boolean touchDragged(int screenX, int screenY, int pointer) { + return false; + } + + @Override + public boolean mouseMoved(int screenX, int screenY) { + return false; + } + + @Override + public boolean scrolled(int amount) { + return false; + } + + public void update() { + long delta = TimeUtils.timeSinceMillis(lastTimeCounted); + lastTimeCounted = TimeUtils.millis(); + if (isWPressed()) { + camera.position.add(0, -CAMERA_MOVE_SPEED * delta, 0); + } + if (isSPressed()) { + camera.position.add(0, CAMERA_MOVE_SPEED * delta, 0); + } + if (isAPressed()) { + camera.position.add(CAMERA_MOVE_SPEED * delta, 0, 0); + } + if (isDPressed()) { + camera.position.add(-CAMERA_MOVE_SPEED * delta, 0, 0); + } + } +} diff --git a/core/src/netwerkprog/game/client/map/MapRenderer.java b/core/src/netwerkprog/game/client/map/MapRenderer.java index c12e7fb..6b71882 100644 --- a/core/src/netwerkprog/game/client/map/MapRenderer.java +++ b/core/src/netwerkprog/game/client/map/MapRenderer.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import netwerkprog.game.util.Renderable; public class MapRenderer implements Renderable { + private final OrthographicCamera camera; private int tileWidth; private Map map; private SpriteBatch batch; @@ -22,11 +23,12 @@ public class MapRenderer implements Renderable { public static TextureRegion PATH_TILE; - public MapRenderer(Map map, int tileWidth, SpriteBatch batch) { + public MapRenderer(Map map, int tileWidth, SpriteBatch batch, OrthographicCamera camera) { this.map = map; this.tileWidth = tileWidth; this.batch = batch; cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + this.camera = camera; makeTiles(); } @@ -58,6 +60,7 @@ public class MapRenderer implements Renderable { @Override public void render() { batch.begin(); + batch.setProjectionMatrix(camera.combined); for (int row = map.getHeight(); row >= 0; row--) { y += 32; x = 0; -- 2.47.2 From 3e6bf5223f70f4db8c87140403ae2b4782842131 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 18 May 2020 16:04:17 +0200 Subject: [PATCH 4/4] made camera take into account map size --- core/src/netwerkprog/game/MainGame.java | 21 +++++++-- .../game/client/map/GameInputProcessor.java | 46 ++++++++++++++----- 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/core/src/netwerkprog/game/MainGame.java b/core/src/netwerkprog/game/MainGame.java index ebbbc2f..bb7fbc8 100644 --- a/core/src/netwerkprog/game/MainGame.java +++ b/core/src/netwerkprog/game/MainGame.java @@ -39,8 +39,6 @@ public class MainGame extends ApplicationAdapter { screenHeight = Gdx.graphics.getHeight(); frameRate = new FrameRate(); camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - camera.translate(0, 0); - camera.update(); String[] strings = new String[]{ @@ -62,7 +60,10 @@ public class MainGame extends ApplicationAdapter { gameInputProcessor = new GameInputProcessor(camera, this); Gdx.input.setInputProcessor(gameInputProcessor); mapRenderer = new MapRenderer(map, 32, batch, camera); - camera.translate(screenWidth/2,screenHeight/2); + camera.position.set(screenWidth/2,screenHeight/2,0); + camera.viewportWidth = screenWidth / 2; + camera.viewportHeight = screenHeight / 2; + camera.update(); // playSong(); @@ -130,7 +131,19 @@ public class MainGame extends ApplicationAdapter { batch.dispose(); } - private void keyDown() { + public float getScreenWidth() { + return screenWidth; + } + public float getScreenHeight() { + return screenHeight; + } + + public int getVerticalTileAmount() { + return map.getHeight(); + } + + public int getHorizontalTileAmount() { + return map.getWidth(); } } diff --git a/core/src/netwerkprog/game/client/map/GameInputProcessor.java b/core/src/netwerkprog/game/client/map/GameInputProcessor.java index 41cde72..6494842 100644 --- a/core/src/netwerkprog/game/client/map/GameInputProcessor.java +++ b/core/src/netwerkprog/game/client/map/GameInputProcessor.java @@ -3,6 +3,7 @@ package netwerkprog.game.client.map; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.utils.TimeUtils; import netwerkprog.game.MainGame; @@ -35,6 +36,14 @@ public class GameInputProcessor implements InputProcessor { keysList.add(Input.Keys.S); keysList.add(Input.Keys.D); + camera.zoom = MathUtils.clamp(camera.zoom, 1.5f, 1.8f); +// +// float effectiveViewportWidth = camera.viewportWidth * camera.zoom; +// float effectiveViewportHeight = camera.viewportHeight * camera.zoom; +// +// camera.position.x = MathUtils.clamp(camera.position.x, effectiveViewportWidth / 2f, game.getScreenWidth() - effectiveViewportWidth / 2f); +// camera.position.y = MathUtils.clamp(camera.position.y, effectiveViewportHeight / 2f, game.getScreenHeight() - effectiveViewportHeight / 2f); + } public boolean isWPressed() { @@ -79,6 +88,7 @@ public class GameInputProcessor implements InputProcessor { @Override public boolean keyUp(int keycode) { + System.out.println(camera.position.x + " , " + camera.position.y); if (keysList.contains(keycode)) { if (keycode == keysList.get(0)) { this.isWPressed = false; @@ -96,6 +106,7 @@ public class GameInputProcessor implements InputProcessor { this.isDPressed = false; return true; } + return true; } return false; @@ -128,23 +139,34 @@ public class GameInputProcessor implements InputProcessor { @Override public boolean scrolled(int amount) { + float nextZoom = camera.zoom + amount / 5f; + if (nextZoom >= 0.5 && nextZoom <= 2.5) { + camera.zoom += amount / 2f; + return true; + } return false; } public void update() { long delta = TimeUtils.timeSinceMillis(lastTimeCounted); lastTimeCounted = TimeUtils.millis(); - if (isWPressed()) { - camera.position.add(0, -CAMERA_MOVE_SPEED * delta, 0); - } - if (isSPressed()) { - camera.position.add(0, CAMERA_MOVE_SPEED * delta, 0); - } - if (isAPressed()) { - camera.position.add(CAMERA_MOVE_SPEED * delta, 0, 0); - } - if (isDPressed()) { - camera.position.add(-CAMERA_MOVE_SPEED * delta, 0, 0); - } + if (camera.position.x > 5 * game.getHorizontalTileAmount()) + if (isAPressed()) { + camera.position.add(-CAMERA_MOVE_SPEED * delta, 0, 0); + } + if (camera.position.y < 30 * game.getVerticalTileAmount()) + if (isWPressed()) { + camera.position.add(0, CAMERA_MOVE_SPEED * delta, 0); + } + + if (camera.position.y > 5 * game.getVerticalTileAmount()) + if (isSPressed()) { + camera.position.add(0, -CAMERA_MOVE_SPEED * delta, 0); + } + + if (camera.position.x < game.getScreenWidth() / 2 + 5 * game.getHorizontalTileAmount()) + if (isDPressed()) { + camera.position.add(CAMERA_MOVE_SPEED * delta, 0, 0); + } } } -- 2.47.2