From 722f594633b3666e6e6343573b9e8a15840fc809 Mon Sep 17 00:00:00 2001 From: Gulum Date: Wed, 18 Oct 2017 01:38:21 +0200 Subject: [PATCH] Implemented moving Character --- .gradle/2.14.1/taskArtifacts/cache.properties | 2 +- .../taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .gradle/2.14.1/taskArtifacts/fileHashes.bin | Bin 21570 -> 23572 bytes .../2.14.1/taskArtifacts/fileSnapshots.bin | Bin 103946 -> 199895 bytes .../fileSnapshotsToTreeSnapshotsIndex.bin | Bin 19292 -> 19526 bytes .../2.14.1/taskArtifacts/taskArtifacts.bin | Bin 30837 -> 30837 bytes core/assets/desert-001.png | Bin 1256 -> 1299 bytes core/assets/logo.png | Bin 0 -> 196 bytes core/src/com/darkrp2d/DarkRP2D.java | 78 ++++++++++++++---- core/src/com/darkrp2d/entities/Character.java | 30 ++++++- .../components/ControllableComponent.java | 26 ++++++ .../darkrp2d/entities/components/Mappers.java | 20 +++++ .../entities/components/PhysicComponent.java | 33 ++++++++ ...onComponent.java => TextureComponent.java} | 17 +++- .../entityListeners/DisposeListener.java | 27 ++++++ .../entitySystems/MovementSystem.java | 61 ++++++++++++++ .../darkrp2d/entitySystems/RenderSystem.java | 47 +++++++++++ core/src/com/darkrp2d/input/InputHandler.java | 61 ++++++++++++-- .../commands/moveCommands/DownCommand.java | 38 +++++++++ .../commands/moveCommands/LeftCommand.java | 39 +++++++++ .../commands/moveCommands/RightCommand.java | 40 +++++++++ .../commands/moveCommands/UpCommand.java | 41 +++++++++ core/src/com/darkrp2d/physics/Box2DUtils.java | 25 ++++++ core/src/com/darkrp2d/scenes/game/Camera.java | 9 +- .../com/darkrp2d/scenes/menu/MenuScreen.java | 2 +- .../com/darkrp2d/desktop/DesktopLauncher.java | 9 +- 26 files changed, 569 insertions(+), 36 deletions(-) create mode 100644 core/assets/logo.png create mode 100644 core/src/com/darkrp2d/entities/components/ControllableComponent.java create mode 100644 core/src/com/darkrp2d/entities/components/Mappers.java create mode 100644 core/src/com/darkrp2d/entities/components/PhysicComponent.java rename core/src/com/darkrp2d/entities/components/{PositionComponent.java => TextureComponent.java} (52%) create mode 100644 core/src/com/darkrp2d/entities/entityListeners/DisposeListener.java create mode 100644 core/src/com/darkrp2d/entitySystems/MovementSystem.java create mode 100644 core/src/com/darkrp2d/entitySystems/RenderSystem.java create mode 100644 core/src/com/darkrp2d/input/commands/moveCommands/DownCommand.java create mode 100644 core/src/com/darkrp2d/input/commands/moveCommands/LeftCommand.java create mode 100644 core/src/com/darkrp2d/input/commands/moveCommands/RightCommand.java create mode 100644 core/src/com/darkrp2d/input/commands/moveCommands/UpCommand.java create mode 100644 core/src/com/darkrp2d/physics/Box2DUtils.java diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties b/.gradle/2.14.1/taskArtifacts/cache.properties index b1e623c..3419220 100644 --- a/.gradle/2.14.1/taskArtifacts/cache.properties +++ b/.gradle/2.14.1/taskArtifacts/cache.properties @@ -1 +1 @@ -#Fri Oct 13 19:03:57 CEST 2017 +#Tue Oct 17 00:48:27 CEST 2017 diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties.lock b/.gradle/2.14.1/taskArtifacts/cache.properties.lock index bb7ec30279421fc93794dbd55e282d7abbb962b1..b38f1b81c7d6d02194055b08d2e662e5a703497a 100644 GIT binary patch literal 17 UcmZQ>J(9DqtED1~0SpXu05?AbrT_o{ literal 17 VcmZQ>J(9DqtED1~0Ss8*0RT6v1w8-& diff --git a/.gradle/2.14.1/taskArtifacts/fileHashes.bin b/.gradle/2.14.1/taskArtifacts/fileHashes.bin index ca8eab79a4e2ff52dd538c49d78e8aa6398ee4da..41fd3a13f7eb8ec3b34c5198b70731d65f71f4a3 100644 GIT binary patch literal 23572 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 Sjh0v_K;aOL;R=s5&Hn*p-JQb# delta 1749 zcmYk6drVVT9LL)NRzPNP?WL`yEv3qof*@cCL_sqneR8=VDvzPV;sQQ8oZDpCU}j}T zO2qz{L*yZvDTApzh9M@-H#NG$pj)6P9=U(Ie=iGe1pYQK?PS3Bm zwwHUUm0Kf<;xG?^RxR_cdh0#2RLTYfbc9ZyCou}ZW9oy-< zK_DTdl!>)lV#kExb1diKsbVyj2|3Qf@jzO8>Ph3%v)@7WTn4z zvNz9+ljJ&9f8H{2d0^s31=cAWcu-8ginYgNK8gG1i^j2?70Bu@J^-vTLYn@FjYS?d zOysHU!`P-oa0J=rH%&F=A!k1w3I7t?=6-O=h!4}o*>ud!{6AcV7#UN%i`C;)my>fR zr>s~v*;qaCX2i3U6XW5GE@Jg0{b!V;ERLB5;~><8qU%1#+G}jr4+b^}8ga~c96ZQQ z?_h2HpQ(q=Tz;`1+ZltPloLF1Kag^Cg^yW^w3Qtyl0V=wMRu@yX8qxh#rIMr%$~-f z1En*gz%3`Fq=Kb3-LYQ}z2jMdDcvm)C=k^ERs|t7YFTP$MdZe2NMLqC&VUQq>2Ic} zyuC5hqKovyMGUVUN`mJ{|EoGLl)MXM+T3onX*U36rQ%V{X0vVy7J1}iButknzWpq9*Od{R(LF+9`> zeUWH~8C|^Bt;P`!K$uw!#RfW3gGC!SCe z$q_~l?m@{*{*wb-#3n#Tw9T9F<#n6q+w&j?Q@bmKB!mM3BUf8v;O5S=VJEyU9 zeLi`^^bg(elzTOXeXn_8rSs%V%fO^W$(Pgvh3D_1tMUG@cIJEQTTMfK?cK-rtu8l|Rw-ZXf~g{=T@$V}tBi*3 zeE(ZjX+rxalG&ofsp6b52HJ-qo|7K8Ri~|rfh8?P)1f`Q9cvtIG-T>oh#{`pI}tEV uB`S}0<@wM3s@XNfZTftDzVQW9t)2lF(DQW0C={Z}L&x_%zVG3cv*dsIGLlUI diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin index 555047c60fabb7756322241c32b4ba470f828b37..664bc8c900c4f2f07eff5ddc0954f9a0521d8451 100644 GIT binary patch literal 199895 zcmeHQ349Yp-%bhwqLhSEK15JKL=aoDM|KlHq@^4MidZhiRot@&ZBvpIXhFFz6%Ygk zK~b*0fFQ_ygPcVWC{Pf1k^2QKiYS*{-(-(8Nz*oMvu(iPXH6KoyR-kDnVos&`9IIz zD2=AJ?xFlgBmJo%eGK{(d_E(6zj0Zk(I1z-PsrA2LOv6}Yv1hb{I2QH6?~r}l|P%4 z_kHIM@O`ROe!MsM{<-vh*7UsZ%bPjB2WiKE?_Ws2bM>0@dr;_e8cod#VtLSnJK%dC z>HD0w^1e5zpZ7iE%e?QaS8Ft(9mL<)XnuE=Yc&7leb-i!{~dn72*3!y2*3!y2*3!y z2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2t3vi*xLi#URCK9YZF1rz3TQ3&}a-# zgTFQ$YD%<@s@CbD^iM~6C_4!YmuQv;&z)UcDnInQQogG7mP*8Xug{f#zooPM^0I67 z+AnP*l@D5=l&^atwEeoLTeg*`{4L< z>5@{uXH|s0(U(!Pbe`F~QXc%_F^)-?E$>jgb6zQLnDh02SMO}HOgazut5W__V*U6< zAH_vVe7W$$*D$eM6Tep}?-21`*zj{BpOnt?nllbvM_wGs3HTGzc?9Qkk6o|tMfH6U zCjEZPSmiuDy56jK|Cx^&>Gz$df7m0jV#CZA+inrdHRGLe6Fz#r^Vo*{Ka_s|wV}#+ z;s?Zk_`lqZN5yh&vqYu5U(>3WhMe9j{k~>vq*87R-WosU^hwaZ9e;idQOf&=eDe35 zw%w#I5OlV^Qa)(yYhB-}nJe9I(3_`}@(*_QIPvVjMy342=|9)0o{}TC!;H;J z`H-zBHnaA<{nB;6k5kH(PpQ0uvz>dCf290f`ILWuw(@u7Q!Za8eZv342*3!y2*3!y z2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y2*3!y z2*3!y2*3!y2*3!y2*3!y2*3!y2*3#Znua~9QcPMx5=XH~ zw9UrbsAM`JMSI8(C*=54K852`*z_=#X5)FSrlLPi>sn8WwIpj#`k}6#C#5(LBx@?l zY0s;9cI6Rh|0#>BP*KtY?@XtqfahTi7w@`)u2I#U>8txAaq+h{CbUVfEN2@8y@wL4 zfkAPTKoBf$W=M>sF(Vbn4Gd!}15qw4HHo$h7He`C5^fGB!cu5^LVw;CCO50_MA}+G zuQ_wM_4Yjz)@}Xp?82O>Q$t5T2x{ZeRKw$}G?&CvVj}_V&%&i8fzzOrkRX1BBaX)$ z&VXOC#3itCbTV%X2elAuB3OCeo}S7(D?^Eup>P((83P8YO`Az0L8E5ggwrI+u?#98 zB#)B}!}0>={Un9n(T{g0evx_YzcX(~EpM{8nIPvlxb( z5S%gbq=7(8JkFXifx}2vtiKe0n-e>H*STr>XqZy zx=D>w4kKs}qLt`vrqQxpoty&DGRMF@^`-KWb z`Zr65b>V9a-*fb&e=DlAUAeA=88MM8i?JpH0ote;0hv6Qk-;&7L>L2a6aL9j@PzaGb(8lB79MN${8j215mw zAbAwW2_7?=5rkn3G%Xky&he(7C}eps3=k~CBdk#X|0o{?DhZB~t2t)<*f%>( zMd}`}{>S2_jaSz_;Gb$LV;G$PT7U`E5p;6{0mdj3%^!dEq-lmD5t_sp18(NzBf+DVkCYy_wO!?E{WsMd5Se`0P?lPyN5WJzmT>5?#mAcTY)bp2FKf9QxDYi3usGX`n$%A1G+hMhY{tU`PN}Cd@Qp zFbE`ynG6_02n2%&2#7VoqAYkn$VY);0URZURj=7w`B1-GUv0nIzE@ID zmwis}j^44`j#cbEZB&VRoA=ncb~i^5NkK4SC{6HSYR3>XNst0UbB@-Fn+#@@GYB++ zlV+n5M3?>s4tMr9mnK`|ub}51^{ z%)o;ezKKS8p5(y1K;TFWvs9tk9NvQf8G5z8Xm82^XsabR*!ABUJ6#N-M9Ro%O$0=^a# zlk$^F(-;UT(J~iu+>fVfW z{eN#U?DdUdAw<;Hq4zf2JNH1nZkB501>Ooafq1H`^J^PRip@@g%_-;bbF*7SwV2lC z$>;HL``88}7Hv~6QqGRgT9Q*ODdHYk*Z6c>0t=!f6*#N)$sbP~V-_u)9Ji)>-#t@T zzgA97E6Oq;#r+ZLHTzfoSow4NfsEN9EqVPLxAZ&9He$|EGk?&Aw*IJc#fnv5Z_w3v zIU{(pLH&uRV@rr?5B}#q@r-$QL(dv66Ya7aEFF_z_Xnoyu=E^vcg2*Pk8+}-9tze= zDvp)%tY3^u8xR#Mt-N1{M9=#+`M2hoVPBu^KcGuk_gwWleyn5f*V--JX6K!+cl__Z z5qn}@UH0&anU%s9j<~UhI?bn{VZ=Xyp4XLXl}?^)#LC8s^C;B)aV`mpx>*}1n+kIR0!JZ z&&H)aP};NQrz6x+e`Ip3yj|Cj@{YUblK5_EZ>~W80_ALQtkUdlR1BS(3fi3WQ6D)U zmigVm*7a?ZPueTKlCvx@CjTn-LXX8zQS)wH(6WhB7PhbdYlG0p5fL|YbMC49ywas{ z6Fe!fA^>g3?lz9#)UJ}~r~`K58%mCfgV zKF0;fWLvM%VlFpg%a{c7{G}?DFO6 zkGzlKobZf#EhAN2;n=ir%B9S(9)T&>CH2~aLIPD*2Js2^U%k-kbm;hwqv;EMcGp$0 zgL=Gt-PcL^kw_I6O3t~Fb2Y1kgWvf=_m($u7CbqIK3^&5_fQpIu+l<6dEt9mHt99j z4EJY3uJ&Bfi{D5rrvKf5x{*}|D_xg`2LS%;R!dS6%_MnQhA*Oi z?>oKckGT)_Ru5VJ{?*YchRAn_L|XO+=j2iAec&tmwy6(E2_jz{k`gSb+JGP>c-f}c z@7Ev979k&pIe{nSQ>=6omtCi%1jYt71+BbDW&(tDtwwvWw3D5DC#|3(aw87($!axd z_-9PgtOMI5{{xLCt8ff!1-R1Jh zkN4CcmuFEhbmYPwff$wxt45l@%JbI3H?SdwRRD&i>(X}Bl;{t0*z7$^LeT$9sjuP; z+hf52AuN=mJYwR8fO_s1LkPJ{8vdeOf#f26cEzvIsb` zSLP2BF8#V9cvI7t1|O|+sQ#NOPUJm81(7m{lob&HZ>b3oDT7FvBd^BEI)MCohm;&u zIKLi}y+GQjiYsOjr1F~Z36U}>C)jNhC_mW?B4uK}unV2Z*R(+uTlJ&K^$KXD?68!t zstr6KxNOt)^qTCqpIOj(*Eh3vH0fHcMyHP_pDry$rzoz8R>kZ#7s{Vj#SZCm8LIH) zOBE^Bu9YY{FIN4aJJR3+PJm{^#!WtBpCZtZ5BPK;NNLMmfaYTdR`>LYM-cgpC7%AZ zXXV$4hc!-a`6os*#}CLSgyhtM|j$Xk5jpyurLsfd(}D;?1BN=nf01L`xo96wNjM$vwS**h?MM|6DhePL3#0*&s2<+_dZn&kOgRtKmi)N)0PJ&@08T*H{Tw1ASLgtU8nO@#+CMh^@l{v z=TVfPiQYSV=9$^^hf~I-;m_`Bd`sEfE*!)H5;Xcnj-Mb+T{VPpJd=$|Usho z5(NB(Wk0rC0|zu&yr9F#mY>J3-TP|rcJXw`vrTRKe!{i<&+4R}xUm0;^)pu99{cjs~J=OW!+a>Wl zE4ccSg{@K%`6f7$ArJx>Inuxx(G2{YIRsiedo`4P7R{*s0r=-(sej^(~X5ZUo3$CAi866vad}#UXtzwprhKP+k+pJrgvp zmZ&)tuMz-jkljkPfot_yu0D3UnlDE!dud7drPj~4J>2dO)ARtP@CT{|lZr{P&aGGv z&aqZSee{B^8Td|{zp6K!h&feS6=^;0Nn2{>{JLMMNJIOwW2pMTv%8`46Lt_G^7Cf` z#}H80y>^4IDj}DbPQQ6*;Kh+Ge-9W(D_w2d^){0ij?HZO`pf$hR~hT7I6`@}U^n>{ zZ^Cqad)Hq-wbrJJGsf7+?XShY6Ce(kx{$Rk|7o~B`=$3gzkf`#_41Xn>uSD`!2`q0 zR>haA)QqB2Qq$}m=oBsqEKsF2m0okG)=AE=jca7u*Zjf#Co1hYrQWzBN<5rb@BFD& zUVy?ZNwm#YAzv07)Mep|TsyiZYC>HWSLG7*b!Z%8gAX}q66B*ls6TX=in919vyhL_ z=H)?4cwIeu=j`w8y9ZaFMwwQ&Fb-2evBlGLSh{f2tUr!jZ?gX|yRz-HdCl}KN`_O3 za6v(LD~`S@+>qy!6K_bbxtt_a{f(G@@rTOQduJZ&^py1ELL>>A;|@3uLUO4^4N2OP zy)6|S)knNlTe8_$F|R@u3)Ky(FBvQ-7b)Js@6k|$#>c_2s5aunNb(sVdqSK6ybLN? z1NRAi^;n_#vfK!aiGJX&rvr7-3KeL4wEZckrj=iTCLf3txcegNPq95`p7O40%)1+U z))+qPnX98Yn=++o(eF@;o+!0)JyhTIM|c>*>OiclLtBo$nk! z>Ll;zHFwb5RsAP*8B<|g#(z4myk>^kJKR7qZO9|>g@D;RAaTlTB9dNn=5p)pdnT;g z`r+AyIa8;Gj($)QeqqrW5P3P9QW_Y}qBvu~a5F=jNh3j{X5NI;B+0Q1Dj+0}lMKW1 zf|OCEq)|9eQb=l*UIVjtVD=8xF-;V8_95+{=(ejQ0h$pL36d09lYszj)QoTfju{yo zBS?fX@J2yk838kTG}*kQMO~j8yPiGWsZvU{Id9Lk@5|kH%0FFAO!iAkh>HirP1o;8 zI8I?4NzxpsBtqZ}ut9uYX&gy0N^;U*RVf(1affHe_j9OF=y!&rhQtJr(ms4JzbodiV7QE;wuBnxAhy#up%3dqTT**lihd|Q)+X78*k zK!7Iukrkk+bQ!6&e}A*|&GNHEUJnwCrBd=!7vDwX#Yww<)TUP=LmVwReF*3{#L( z2w_#J_2BZ)+iNdBbV~j}!bz}DpurNwV8U1fjiUyXq`^0g0fj6NkZgiw zc!V_y;2-6qz(N5WB`*}ltRMSkr>RKYFjS%fX1t=2!ybT3t>Gj0yMYyr2qT5)}Iwt*v3uO96OOE z16KhiKr>pSskYwn^9b0D)mEQ}>X|Sk^H4oeRTUKo6bUP566}$t%{C6|b}-Y@V#kK3 z8@;$autZ8!d?X&(3vDD#0B2k_Zn}OUEv8b|hwt17oez9Y9{WV;g0o#-so8GTU~AUM z7N1ebrSt|10w~+%!`Rzg>$VGT-VWbu|6$I=$z{jj4%}>)z%^X1*!x_9dE$bZJ6>vw z=Z-itGElNzVn5is1tGjsU%34o-5!oGPyF7B)F0TyvbndZv6*t$obS!r6m0OgG ziDs!{aBNg0*oukj;UGphUmB~nolmGazvd@+qiwTR+{n5Cb8hHlz8h=h`4l-uI+%0A zQ-v!ml!47)u6jx&UebE>n(ViqSqv)GaKjh>JiQBsg?!F zUQ>JbERms39*?dtrWyv3vi^V;X|WBIHqy}t^X`wm^XylLj3d6>Q|YgR+eXFBYKDYi1An<;EL*<{e)W`Qnp_%#mD($>}wLi^&C#$j#_k#j12MTr4U^Mr_OJZ0^5^yg8M8xL^7=P!=^-2j;V`Qt zZs$dZQr-+55qY6&H)qQEel-IWIi!W(MkH(xnH@{dn`@of{(WpUk1peU~j$KaS)xa#664qJ$2W-z%2Vq-;JE zG75;9c6Izz2-;sFkU+V5{#t7N;UvWIslaTTPhr!;SQ;2qX*Cu7aawV-a#3)C21P}! zr=6~8#cF0j?|~ra6X5iuBtVa$uExt5!J7?%Mc;uQLn%OgraM2-o@V6%!$|U|a=yMs zrJd^;8JyL9()Vo#t$1P385K9J3)+5y9z!uSExARl|`tkjI6y?G3I0>5f|43z;jqJvA)K}O`;;|W5VzdJ%%78myqJ{_=J!ggyaD3VWYb6 z_DH_uzDQ2&1hgsHWjqg&%#Z2}ZT(T@iWRHA-T*>!Hma+SyVila&8FgH*V(MZFX_sz znhip75R$WX&9|B7)6&HQ&~Qgq^cv5k*0RG1AS4IOUM&3`n*fsaxEIGJ2+5%w<)Ja z#BO$rs20=OJo!96ZXerV#G2S0DSncbsNZ-+=j;#l2h09?(W%F zE`0j>ombx2fJd&GRdFMf42P28P%<34-ho~qTMLpL!kZbB*}!82&aLRm8d;M-GG>+m+R=!Kb`ipNsc7_{{XzvI{hOu3y6`oI?>TzXzZHd&;n4LC zy52$8JK)1=KoAUAUE-X{NYe~QA~cCH2Heb1iAi)iZxyYskTB3%Bq0lHyUNx2Z>l*U zGW$e!)33jMu&X2^lS73)k+sr-ol3M=nFJdJOt``kk}{b{ltWPl1sc01!N`%Ekq`tk z%J61_;0X>4^gP3{KwwuqEKE8~s#*Ifim&7>3yj=?07_8_S~hXY!uIulZ4eqcBI0Il&b<;1pgwIPNW7(P=|CPJ z*+#_xb^~ZbcIofVy|TF>TW-Xn_hQMP7L6J9_wvlZ+6GsV-X#$kyly}rX;^eD3FST!5qz0nWn3_?F=vvu>D29<6)%r?^A^E2GAvEvM|W{3IN`X6V(|f9Wzo ze{ja_41L(pDLQ7Uv@pm2eMWfhW z7h0VT9p7;@eWB0px+->14>DR&bV?Q9CeD_TPYUDJ;Bk91xs3O(oR7e_HJp4@#bLtz zh3{4A`}*NSIca6<15@ZK$3w9K9Uz8AIx2$G`R^iK}3#n(#I5ptRUzt zAP~8=|9V6YB(6S&kQ}fJgj#YiaTPcf6!pqhhAB@VUltK9K-c^|lwb`Eikk$2U~w}; zVl0h8mKlnoE=_n!A49lvu4CBU^s`ew3*{g ztPv4doJV+w$+1AT=+VOD*8ST_a_gN-sK^PdW_Z0uUEa3m4d0a*~>2 z3cRP(r*Lj2YmfQwT+SJQm^4vA7gX);lb*Bjay}wH4VFRpTm8QG!Rf}Kz=SM`z#H~tkI~-o!V96|GAd^)88sbA)n)lT#s>gkm}P0FN*uC z<=^AFj;%HFoEr6zSWVoy@ef;1t9ak8s(sp9 z>c!XfIv_b|K#E7eFJ_IL^V}qUSg+=%UTJXZ)b+BeiYxt4j{cdw9iM#bQ@Yi$^V9Z) z=(8L6b5!tn_HI#e(@d1>GG-NhanC#7jTm|Mt(#1%)uE*@!^!tnD6B3$Qr(`9?zxUP zjh(QEolcCuHS`aDe;pP3gR3T@9EH#Ct<|@T{M~kS-HMOW_I=XOpDzO`3i91{vs-yO zSs4T_%?;J8YP5z)kJEN*eR$G0{+w?~myLEcB9U))@lR`NHGf~LVA_hVnrJ1y1K$_u;|csK$orXt2C-k7c*o52rQF!*w(EzfN~{8<~rNk3M=jo>WD z@%w!<&K~`5CBZU$*WBuxFMV~;kJpo^p4uG0pOSKH())E{?}e2rJ&$_y&e`AFcMq;U zjWVrlVI1bqmyGL0UD9Qw3pdUBp-!na4UkCGmShChWxk8s|XehB$s8DhD;KAS%b;K)Os| zFjQa(l1Fiz;4z~aK^VqB(}IEFC{buEDIqT2ZUg!}IOt?nVEhPCIf%*?We<{XimU9) zDFgLh(`!H1Xxp~QowW=xe(0LX5S9Z9wE3du!~$6bBC|nQ4#IM@!+saSawSb|%h$~y zEazqH@c<>;lNIlbm~&y{P|f84tI zoV1nazS+KW0z~CX=@3~EDyJh4d>%1iQaH9^W@@X6#>mSMlyhahdEe)Npd1<{c|7DB zgZWVl?ap@FQIZ{VE(FOUlkg!s+GSgAZCOUaLmZy7(pV8fj0^Q%Ltee zbIZR25SKZe5J4_opBuZLJ>98NO0_v}&$aK%-FM1A{74r-%@te&q)wc|IFh6}P)Uf& zm7Ft4CxBR*9N82sW*|tCGtmq}n-~*K19q$tV~qmN;|$OuM+BpR5u`k3IsrU;aFq1y z>G+pt%&U-4ZGLRMdUZG5I|I3LdFm)7XK5=?mS4Bjl#}Lh$s~MH2f1>7Al5shn}hO$!(Q9|Yx80_F4?NR=znGdLgg1W`GN%2`u^?Y0Yg=GV!B%XxjL%8gg3ay6D{ zG&Pn4X&RM+njtBY*^^T#KpmoDBDzGkYul}RcuYI6fj#*^Oy6VQy!cj|hEJ_CWM7+9 ziu?!f!e^z)fAD_Byo9x~lWqp~4NaSE9MtV#rlrM>4No_EaeFDq&qdr8rL6e0DvGlz z*Kk?0%K~(-)NHqEur+IBi_a+JQhI|0S4&Rn_4P(w^WAoqu~=?AZKYW|Zv{K+Qp%mv z|6yqBk1AKJSoQS=U5%GBf;St=)jvd6^W~^zFD(hb)cX0hhui&On!c@UhZs`?|k09KfPRM)xZ@5eB8#ZQOMILRw6vtPkJ05juZxl_@GJ=X=z| zH9Jp!VRTq}j=Q^JO3p_)QBe;C>!niAKZ+R^SGG>z7_sPH8S?4eWAiF*u5syD?A$B2 zsDN=2&{gbxF2Ou;!OR^mwZ(HsoEfR&2<6dkTpyJ?Tp_oj4`Xk0t=lfVc{_Zs{f9Xd zCkKqP(3m;@ThSvb?Ar-v8y^Tew9a03ea$uVPwDyD6~3&MJbct-TjGEnN51O(uoP+W zzI8U4aVTd3$`7mA$2q~&KQngBjGm+I_WaF-D!yH%b`d)@T?1ZR{p4*M3ox{l2?a0eqaJCOkjlxtdJ^K8hJrTm5b!* z6kAuTC6RYij`hx=cTZr2vT{BJ&58BrF~~}TUFCa6dpUpJwn84RE|Ha>tehin6w1n# z%nz~Pw&wx9Ls_|EjH>QfonPnK?x%JF+2U9L^H)p1KJtjK8_b$7e^sx6vU2X=v)m2? zL{?6(IW+3|ozHY?G$PB?H2CK}%n3-AgJd};--XHpPob_Hn+7m>kOa_$w-;*#;R4$#g=BBiqqAc&M4K$STbvkr>$IU<&(ntYVf$dnOw&ESI$S^+Zs+jTE;1?S!J7=359_C`Jq=||E0?W{lOWx zGxTX=moG1;s=4}tDpmXE&FqzI()6P{H4sUjgs20=OJo!96ZXerV#3Go@%NHpo?**Qd z!l@e)J@4D(-jmD4t1e|J<{!SCKkxqX zAbjbO!Gu|uFzd$w!P%iCpx3EZ2@__Ek*4Aftw3hpqe~~ zpIufQL07m{dJQB;Z~pP!jx`SV>)(FtKTixGA2hbHe;m zD1PR9H@bH%H&~wPk*aK7$T4~Q- zf=^0qCUx1wcMpHGsb{}W()TpRBU(Y{+9DSu?z_NJ80n6h^{rNYP-RN{>eq&Ao7_3* z$MzuMQ(8zb1nUoP&Q`9Vsf+rc^kAB1{c-Gill_O;m2IcZYo>3ZLKHUiF!Z)n0~v+|%8L~Rlsnf-Z4{RXg^&XohISzZS7)t4V5&#nz3`4zUZpfA!vFN>6@~1^(hW))fQ$=Em+l{+V zE|u;ADTY31+Z6Tsa$ic9CbztJS8}SnDNhqp3?aqPTS~J#y5ov@DJ=(53?0^l?j6}Z zYI&HL5;I6KOa|R85DiNp#n9R}wyWYdTGUI$3xuaM@m1T-C)Au@^Ao($wplA~WZn3; z8kRtcA*2{83=at`EUHtvaR1bt5V~B(RmV^2zq$e_hPwjFgSTc+h%N&3xrhb@(M1)| zMSkZC-CN$sS@7f-`h2CJ-$Vbs`OA9EBI@_P(|i7y`(SVNkmc`R9SswhA-w2qn*+j& z?!po>${HB(qV9v`x{dUj=kZU8=T01W>Ze%{U4&-HJ}(44;17iZq$~y@x(Lxlh%Oe) zUM*q<579;6R?gBWBo96iT};zLJLIB8pNr~yd5#_dXon2Z#UkMk1+jv5#G+!c3+xwo z=%Q=o%ALK~BM)6%2e^ytAa~K*q8_4)5M3U@px{LbU33U9Mmv6>@S>S9nGHNf;5>_(1OzqlW`@BSGmW6M8D|j!&l87~L?Od# zMJ18%y)}Bs6X|c<3Tf3V$FHK0VT@%U$n22xD_Imb^8#)l3^Xp#9BnqD0!o^2qmeZU zBx7b78eTzXzZDg%Ja11=<>k5(X2e9Y zEXJA)1S%kAgcESg$lw@3B8-7I3IfXrm=P1}svPTD-99&VJ$t%SrIc!O-kxjUm%Hzj zf2u2nB`F~;9&F0Fen-M_3ge*gA{1UMQs)E;FXs7D8N;Rl5m{V)_2g3oEoO776r_(puo=rtF! zM$UO|5K7@2A~7lwg@JV5W+KaAaLs#mh6rXzZ&e`AFcMq;UjWVrlVH~Cc*-yM^dpeo# z#sYXGMb@PM*Jv+F!ix@gv4i6W!ix}IOyVh)X5$^?DGQgD#M{D9N=Oht!x0C`ES#aa zBuiWZ>*zbSaM{5pOo0d?yjZ2ygUdf}uf6<`e*jV17N5kYQ}PEAPKFyOnq+Z<31b1y zj2ci9pvne}0fj8j@&ds!Ji;0U@Q?CQ0Ja53i72yPGiLqRH#<#5>K?ED$Ks`pSJyq@ zpK2=YfKC7{zy#_D?3)Y(NpdEdL1+_WqG{mdWW+$la2{t6j6ejVff0-%z)UBAI)bAl zB%F?adB(g73DxGu)~i={)4elWORZ6>-BapQOQi!FC748n_#FT8j+HRy$o)3?;_+w0oRfyanv$_-xBh1{BvIKFw($5#do zxxD}0!?ERwE>4SiZQit6PoBO0%KU9j+jRY;+|b3*&!q2MvAjj46JNYBYkbWw_ds+J zqKgn+d~W;U&)OJH`f=6((Zwi9{UP5}zzg#dqKm~wuU$xyt~!unB=wrhNkY}%i0K!9 zs9e2w=CMvsNmkQ}uM4z|c6eJu+h}MT4cUv3y$IQh#o0A=^6Mab(YBwc6nuHkZ+@IL zI-~2N9RS&j4#259KhU0L<=ZIw6AGDg+#RI)w84ww{%ZO6xUOSsjXbBu)9^t4wEjdA zoR8e&BG5Lv7+ekrFUB|iVe4ss@-f^)>Sm2np6tc3-?d-)pL%uYhi*JSv;5#i z;!ehab>AGke|`DXUU%bHg!^+)C?xn)tRoc%jDwDJW|D@%<^LU<9vix6If@M3ww zi+au1V@$8c#$SE4eae7(8^e|?IivzS;@20r6Atmf7xkLSXGR;7>5q)P3G=D;-6DQC zrNXVaXm)DvsC)hb^i$<`?DDBo>sNa|Xv}Lnrqt~ zoC=}#_>*5P!JLYFQm((BXu5o6D#p^E2NPJk^mhd=p0d`wYEY+s{Gi$AhIIN^bHJYn zh1;FEyRS=O?R~aZ3UT^C{AuDyqxN-1UO3{%n~#oa8_`XMgX*>6>Moiyzj{yNJoZK8 z&`k&YcpVX$(*EM_Gdc!d2cTtx)X>M38mdb>(x_3xzcZ|R&94%petUSM{Gi+DzloFY ztUmC2rLgBhE5>baQ;yKB=D(@e_SSi>MgykPryVP<`LVp9TmAYE4bPYw8@u0%>e&AB z%u4(5= zXbqDdr|s7I@T70f`h8f7PDxF(cK`!h5^t49=ZwpXe?Iumy8nwtU&=}Ta8z!#A1^8= zi2HR${;y9uKj_B?B;k|V9KWBEawLEH^|?bRwY;Fz(AExvY!OFAz$XH6RG0-0v%nb~ zXo(68h6*e}@+giIJZ3Z_2*Vg?S}-u2t2!k}UdBbRU#}VaYvZqv)`_bHv%p~%xUH+z z;?2n--ws$5Z58d26x;yfs6K_wiQa0oAPa<1A&gq;M&w5NrSj=_>L85j;ezp#7ErB&oz&9UyGw;pRc>LkO_1)JzGPvv&3Gj;XDeLq1uDx{-Q zJ{w}^+g)*P6G&KJaV0e&jLH_7RUpZhI@z#Z~7r^(G_$*{BZb zY{*6}k+XNc*F0pS$}ExslrZy5;TGi;eKoeKVZS&%bm7J zIs%Z5s`#}_J1)?Zs2Dm)B~c9xZRNs8g*YnA>xX&$Fs~ox^%uDUSJCwRG0N+QI4ae{ zKeKHosFugQr98AlVOqb)NrrUP$1AO0S9i-N)*eHvg#NFo`N`Z7vEM;DYB9ZVMbr~! z^;61rWdRFzcW_wrU6AvNl_6!)#Cp%XReO2j>`7H2j@mKJFY=e*eI`mnKsu`E&g{_$ plY!2O+z4%uj_QDKVOGBn+k=pf3hAhAfMkG`mT_i?qm}`V`v2Kmzo7sC delta 6543 zcmd^D2~-qU7Oh__jopoQu_Ie25SEw-NQg#2L?_1uWQ!ZCU<*WAX*K~DXh6(>3L>Qz zA&MfRf+B<#8#M|jn}CW5M~8^A8J$rP91{aU!&LRB(4gID4&w-V0>@~f}lY#7Vkz7Ml_6*`D7de$P7eQr)z`2R!uF4 zudAo=jvq1|)vn)p590oRr}2A71}5+9A|6U`;B7+TLh6s)%qI<^xw(4qh8!@9xZee`v-YB{Uu#5v8`W6zzl8 zdo<8^jCk*}ew|H55HBCz$~b4m_Rw;+If5usU3ZV*#X1@&ngvfK@Kg^^of5u^xWG^Y zcbzY<%(NhhO+Jxngd!T^opxv(P{EKkf!yhptGu$CX9Q$6B|ctESf-*jI5)|Zu>TTW zr-~srh%4K|t&c@&E2+;I2=@HBn+ThX@`!eGl!g1_UU+)1x~U*yb>wP6$XvnNP(esQ zNaR%B8vlq0InJudQ)b>;Us$l^Z`%!$9#@>e6Oz`8XM3WZ0PiSCBia{$XPk3+Mm3AJ zWb!!Cj{p3v-)K_*C3OJ8+C}<)9lg77*bo<7ts3amNo8{6IDJ=o=^+#Kv&?`Ryc_dc%mzS z*wqK<1B~NSFh3)LZKi8e%)AhtUt~W#2F0}jA?rX7k>Cq_iJy2tgxHkhFT@nmd>&>h*R2G6pP8=m25=oxx6o<529RmJq4J!%{`spL~awH3^(z1%`@S zZ8vyO9aOtiPfkc5l;S?+ig1QydUN@LM6-p- z>Fed&S_=2;$-hoX$)3FE9eLdKR-dVZ2U|Rtlu>^x zYQq7uZO>jP|EX;6Yk=fKffo{Zc5^;>+Fx_1W}9W zMb-%4wpq$e{_BGnFp4Kclu2qp9uYE;gqnO(AgE+R)HCm4;>GPi;9D!E9P> zCnajj9YJPEQIw{(v7xgn=C;psuE1&E9+P>ky5bCv<0HvT3oi5}@#RzEV=`91X$GZ= zM$(wbPZhI!nE%P0LoH7?M?0GaSXW9FpWr3&txj2ZKYQv#eq!GFr(eV*+=t?0Wg!SF z3q`btGuyo{tD7yFS2fy{*+2JC<6-ZdR4vaId#T*cvf?s&ntz?Xaqn>2qzs6dG$3}A zPdZrQJz-MZ{-)a?J7&3$(-RyMq~O^H+N9=o)={FP4b9vGP=OQ`vuj1%B`xw}s$ykH z%`_yHY&hid$m|@)U#xDLlE~_}-RDzikuu?(FYz0BJgFvP#><$f1*3pUZrE%0sL#Q$HB$!^k=7qXM49ma*$m!ExTynuv2rHJQJ5l?$-}Gk zZjGf(<&L%86jy41T{8UU@EXW|T^k=C8)Vg(oI)^-a4jMo!Jo{FH6r~bH|0lR6ElD; zVXu6u86WmrTk6X$9#+gH&5o2;VLp{!B@_1{&pxkvgBKsvRFxwg(ui+slE+DR)skGrYW@GM GYX1QsvH!^c diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin index b03189cf1955630892c07c32701db79f2316f5d1..3cda9f85df75fedc06f6bf84c69f5027c31d7993 100644 GIT binary patch literal 19526 zcmeI(`%6<{9LMoPPP1Y2GJ~b0MYASlcnOJ>rIvWMqcGHw&@d9SwP2Km3gITPK+G^n zf~5Rmh?zn(0;_eKEQDm;V}*7RqOw?EWLHbuc%JVH|AXptVCV9F4i9Iqo%7Q+-xfho z#m(|XU`qtsh~2?$65oID$Nr_?`+}B@V+{caKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX?}-y+~M2Cr1ku2z*hk1jjT*B}U)F~LK1^Eyl2;f2yH8`4$KHwpdcgbRuur;2sa zLVYmb6O~)FsfTsFJlx;9CYKbS-^{y*x;t`Fu{&l%KI=Ly^&5{qRqQN}onT!mq<-te zw)wrH$+P(I0qWD<((UQdsfn!XCaDX@XQsVP+78~W)a9C^2O`eiZe(5G zMqOchQd7O#8O6F}qOSILKf5@b?&9zqKKGH1QD4)X zrL?P4_VRg_QeWR^Ep^H@Uf!M53twe*_1p4tSQj1C#e%AgLoXc*SeL$1H#lB9YHHU; zvaVNCFS`=I)wE|OgP*UUZZv$B{ak#cns-gOTV(1p%ZogGo{iLNTT@F~)b%#rr>L77 z%(gdyYmZsiMN!|kNwCGx>*DKqmz7>`8M?mVQe(-Xh zp)xVR-><%odeg9REV*&Clg*5?kaWKvK|qh ze@<_uW7_ib!=Klj?q=gyLjVF0fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00RHBfG_lm@X$X4Wc)=K2^bMzAiyB_K>Ty}!7o1L BH@*M> literal 19292 zcmeI((MwZd9LDj(v?V%1)ZEaP6`3Qk63L4(x~QO?9a>4521eFh8&s5N7ZO?$1vLzk zhJ_caEHMlwYLJ$cLbTzaU_wZk27@q(@1mS8I+1a=qh^>y5v!HMd&lnF17`00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_sU~MIc^n?le>F)=_D}wzK0+nzqemP75#1S1mqR=qgo9#wxr?xbmbgIA%{SsqPy^ z4{fQ+&wW^3sk&}OZ+}_SVhfgEP~F>xextr`Wl3Y*Dd_?9&f0L%sKdJ?_o&{#`iiT8$H22q7|E@bu=@Ilb&WhGp*50V}b?B~RWgUipQ$TgY^{Y>P8mw_POseiX zgTDEIy}rSbaaj6Q^wRY4`BbaXuDbUzx+jpcVs-DwHr4fE^gYl09W&t#c;5Z!O=lbP zjt^KC<^GfC=Z0>7Un*=~e$!+g`a$&be(UtrP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun m0u-PC1t>rP3Q*wR6Np!s&$Rr{fOPrb5p%er(Lnp341NODyS~=| diff --git a/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin b/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin index 3fa8d151c66909363052da166f65bb5028bcf77e..2a66cd20908420e6b4fe84d4ba0048b13802b217 100644 GIT binary patch delta 981 zcmezRf${4H#tEXl%nV@Q;{~MtPSlgZMryKe3l^CjAACMQOSPVV=SV!S??vCx?(Co`!yCMC5vyClD0@&{iZ zMIHy?lX~aFvKstNc$abC_!X7AEtW4@cJ8wo;obK|e)1DEz=P@8jrW(&OH2!U#4sy1 zbzykR=YR&qZ32Nu{+^UfP!c6%z+`)0HYTRan-v4(7$ETKG&3PWZ&5Le^&Z! zJ)z$myH%n?YgO2Ja;o>Wt!X#`Gw`_L>~`zQZ9zdMCscc^ia&dQUHNwMySYBjt%8xP zC1!sU9>G*@Q1rLvy*Oo`%7!`m#zt1m{!*GXuY`L&6x{f4i3o0K&zX-XBbT7w#|G2j*N;r!B-d<4{Oa@IY0c){#|qS zFW&F}q-W+H@o6hkU8i1o>$Mpe{<4z`Lf=o`SGsO9Z#V~&;-e$4Lv8$o`-`^u@-H}S z;^0w#|Bd7Ax z#1+l9X72kvcdqWorIr^Rs#d48$E?epVQv4Wwl+lZn94L?m<}XgYz%8H5o3RK`t9n* zQ}@5Iv)As3Y`ZD8Eh6#4g0BW`mz}X_dC4+MS3r1be=+F8lP0vyJiFc9=GZ z=dZ`jP~g6^j`e-5@CDU~)ST1piz5|v&M30>WuAA6TyX_e^`4}&*9upQzt~+<{i-D1 f?ScNC^_>|4f7!mg)VQweK}$5@nj~;Uh@2uH%X;S2u6`x?}YRRnD#Kt)=EXM$696 zy)*mFofap4+YB>*gQC8ZVc}=}U7|hOQWFf99$#>T=hw!^R%ibODP0twc`@@a zLglIQw|A%Q-@I%d|1@#;e8)Rgu}7qTU7Trij<0!MfbB14n96ON`2rjn6|Y{6P|{#w z=&2PGUN}j^U|WXsE?K67E6eO3+Z#Ok_<_&4GOp2hmY(zaW?{T zD(u)u=tx|CV*OoK^~%LPeEExX9e&*YDaGi=@*a(Fw-?8z?sw_Q=1 z*^8ufRl#hg8yRNGLZLt1D4J~`@_E5~WGUyGxf z$@_l4O3B&p-+nHclKZH#9qwVU>Q6f9P1|dpa-<)6*rHKuw|DA<-&5Qt)*V^9Xx7e! Qsk!G-R8QWJ!_K%B07U+YFaQ7m diff --git a/core/assets/desert-001.png b/core/assets/desert-001.png index 079a16e0033c4d9d03a193aa6d59a17d8c9e0b48..0b258540ea7d7fe7b509de08bb62b5878a5a5d3f 100644 GIT binary patch delta 1279 zcmVNfUtx??<)~Pv;X_k z)Bq1O;vDx&`B9b-0CYiEn&L(4>EtDt!oPI`i^t`eCLlo#T3dv?rp?WtUq6a9AO~C! zDJ?+MAdT3(tfATb{_YaM{(Yvl-P|6`b`4P>q{v%@H7#~60f2!dz#s@p7=QD>))+X> z@KOx`48rJluYbpO&rEw}IQ1TG4d6hssdh3UgOOdx`-FpAz zCTQKPSz>&Ra>FO036>^$@6*uldfyVTUO-dR)XRCv(0}n$_jyTEWFLdl11<6;S|B|y zcPa6A_?ElAz2pzumFNX_^Dex%MD``m*xkH?wp5Z9aSw3p$dX8n6&a(Az5qojd5V(v zK;XR*?MP~XHkh^EXM7tQ9}SkE3yfj6 zC~6Bs6n}tquGfkVA-F)if~h44F(?XPI~`-gt0gsra3TOY+Y#cDGosn%Ja|H{OGpVL zR|u%(&D-0tMIt#GP${+~dBh0-%=R;&B*Ai|u)j(HwJ?U#Agb?Y>B5i)ad4uH;?vs(tpsJv2xz;l)OeVQVv5wCsQJSb9;c+Tk2wg z6Xokx`%O_AcGu#J{QYSa$^L!jvjjcoHz%3e;cKXL>Y8VAj{=}CEfKDDewPp*BV2ck z2uUg|5lLx+bWh1SJ$8)pBst1wULqRFyyoN*5mNbPbV=inQ3^Y;AoL4^=;SiXXa1Dx9>Cj}DNfp+GoX^M_b+=?qmlY0z`mVOtM zb8dSP*_SL0maZ3lGBd?Yj~zUz`pHZU(qj^)KyA+oh)~pC(>dj^(a&vY@kdevt~FZ> zkXL;^{C)L%gSm(VKrfMBK;GZR7q*8heUl3nHWe-jKJZ z{@mlVo>N03q@)U+ly2Ugm&tjPj=VOKY+U~Qj3`am)#$dW=Nb^%}r pK!TP0kl;m{MAkVJ??SvzNKz8c3t>3X`IhrEOoc}m zLLx3jTM|8oqyRMiO7*_1Ej``7>6%fWgp-dp!T)PPm$N6t{pGi z2x>b=dt#nU&@$1wpLQLlTR^*jhzQn9;K$GHXC+OM6n|juuBiujElt<-=gi%fX`qj4G|9OT-~WL zHDl|@c>dg^OQQCW{|>}GrbyE@c31e4$wwS1#DCRXCz%t{EO9hIW&xxVp986>^60fC z1!!06{!`*a5l}M}KS-X75Y2#5R~RwukB~xRMoZXPrBS^-+#TE1+EwKd9iipw zf6jqw_k4f!4uEnZq~IlQ_4uri44pbM-rqdFibh5rFN0sFaHMmFPIz`WBHUQCbX5p- zet)JIv$^XW2ry-qHHXD=FWO;;k0+I2(>2+OklgIChJG~2D>-l(*U@DOxIWd|OJ3e? z+rp2V^k5W8SxWYDq`7f}%e^0vv#>1S&t)oxC8a%unU*M9GP<^wx@h20=Ok0h6qfRr z+;#E@Tk4ohjiBZE%}M53_!23t{bvc>Vt={+5`d?x7R4O2=l2xibJ%sgBP6A;L?o99 z(mqq_`sVg12a}^b^0@*730~rn+P;#gDQQcm!?H~@%}?n_Bi}j|aV`peNA7FHIZ~X1 zH_+AF!`+dJ;OTmPhZF|@F_4HFH=rAHlzMXnV1DAM;H7Ty8X*3P3`OL*ZH1>@(tk2o z`rq`%ND8Nj^ql5NyIR|Nf}ZZ^RGi8!!fX#2A{3?X=}0-O_jMau3Xsi!OPwtSh*h6| zen0gCrR-=h3XcJLj#($|f|Iw@BA&}Bc6)-kfsnQLs2zLGjNm=NVpC&MS-Uic zCoN0oDUlJ<^cf9G(>3EVInB?bkWJp(v*48V2&v8y{hh26EIlTWUXz`pHo@av04TRW yD(Xmc&d9Cf#f5Zw>}0000@rab1JM=NxNUOpOdB0l0WyEymLIO)pVe<7(8A5T-G@yGywpm!AF?@ literal 0 HcmV?d00001 diff --git a/core/src/com/darkrp2d/DarkRP2D.java b/core/src/com/darkrp2d/DarkRP2D.java index 3cbac34..c531302 100755 --- a/core/src/com/darkrp2d/DarkRP2D.java +++ b/core/src/com/darkrp2d/DarkRP2D.java @@ -1,44 +1,70 @@ package com.darkrp2d; +import com.darkrp2d.entitySystems.RenderSystem; import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Family; + import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.SpriteBatch; -import com.badlogic.gdx.utils.TimeUtils; + +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.math.Matrix4; +import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer; +import com.badlogic.gdx.physics.box2d.World; + +import com.darkrp2d.entities.components.TextureComponent; +import com.darkrp2d.entities.entityListeners.DisposeListener; +import com.darkrp2d.entitySystems.MovementSystem; import com.darkrp2d.input.CommandStream; import com.darkrp2d.input.InputHandler; import com.darkrp2d.input.commands.Command; +import com.darkrp2d.physics.Box2DUtils; public class DarkRP2D extends Game { public BitmapFont font; public SpriteBatch batch; - private Engine engine; + public Engine engine; + public World world; + private OrthographicCamera camera; + private Box2DDebugRenderer b2dbr; + private Matrix4 debugMatrix; + @Override public void create () { font = new BitmapFont(); batch = new SpriteBatch(); + world = new World(new Vector2(0.f,0.f),true); engine = new Engine(); + engine.addSystem(new RenderSystem()); + engine.addSystem(new MovementSystem()); + engine.addEntityListener(Family.all(TextureComponent.class).get(), 0, new DisposeListener()); + camera = new OrthographicCamera(); + camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + b2dbr = new Box2DDebugRenderer(); + + //must be before input registration or no character found + engine.addEntity(com.darkrp2d.entities.Character.create(this)); //Sets inputs Gdx.input.setInputProcessor(new InputHandler(this)); } + //GameLoop and debug private double lag = 0.; - private static final double MS_PER_UPDATE = 16.66; - - private int ups = 0; - private double timer = 0.; + private static final int UPDATES_PER_SECOND = 60; + private static final double MS_PER_UPDATE = 1e3/UPDATES_PER_SECOND; @Override // GameLoop public void render () { - lag += Gdx.graphics.getDeltaTime() * 1e3; //Seconds to milliseconds - timer += Gdx.graphics.getDeltaTime(); + lag += Gdx.graphics.getRawDeltaTime() * 1e3; //Seconds to milliseconds //Process Input Command currentCommand = CommandStream.pollCommand(); @@ -48,22 +74,16 @@ public class DarkRP2D extends Game { //Update Stuff while(lag >= MS_PER_UPDATE) { - update(); - ups++; + update(1.f/UPDATES_PER_SECOND); lag -= MS_PER_UPDATE; } - if(timer >= 1) { - System.out.println(ups); - ups = 0; - timer = 0.; - } - trueRender(); } - public void update() { - + public void update(float deltaTime) { + world.step(deltaTime, 6, 2); + engine.update(deltaTime); } public void trueRender() { @@ -73,14 +93,36 @@ public class DarkRP2D extends Game { //Render current Screen super.render(); + //Debug + camera.update(); + batch.setProjectionMatrix(camera.combined); + // Scale down the sprite batches projection matrix to box2D size + debugMatrix = batch.getProjectionMatrix().cpy().scale(Box2DUtils.PIXEL_PER_METER, + Box2DUtils.PIXEL_PER_METER, 0); + b2dbr.render(world, debugMatrix); + + //TODO: will be later moved to Gamescreen + engine.getSystem(RenderSystem.class).render(batch); + + //some testdrawing batch.begin(); GlyphLayout layout = new GlyphLayout(font, "Hello World"); font.draw(batch, layout, Gdx.graphics.getWidth()/2-layout.width/2, Gdx.graphics.getHeight()/2-layout.height/2); batch.end(); } + + @Override + public void resize (int width, int height) { + //camera.setToOrtho(false, width, height); + } @Override public void dispose () { + b2dbr.dispose(); + engine.removeAllEntities(); + font.dispose(); + batch.dispose(); + world.dispose(); } diff --git a/core/src/com/darkrp2d/entities/Character.java b/core/src/com/darkrp2d/entities/Character.java index 8694db5..bfa27b1 100644 --- a/core/src/com/darkrp2d/entities/Character.java +++ b/core/src/com/darkrp2d/entities/Character.java @@ -6,7 +6,16 @@ package com.darkrp2d.entities; import com.badlogic.ashley.core.Entity; -import com.darkrp2d.entities.components.PositionComponent; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.badlogic.gdx.physics.box2d.PolygonShape; +import com.darkrp2d.DarkRP2D; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.PhysicComponent; +import com.darkrp2d.entities.components.TextureComponent; +import com.darkrp2d.physics.Box2DUtils; /** * @@ -16,10 +25,25 @@ public class Character { //Singletone private static Entity character; - public static Entity create() { + public static Entity create(DarkRP2D game) { if(character == null) { + float movementSpeed = 10.f; character = new Entity(); - character.add(new PositionComponent()); + BodyDef bodyDef = new BodyDef(); + bodyDef.type = BodyDef.BodyType.DynamicBody; + bodyDef.position.set(0 , 0); + + PolygonShape shape = new PolygonShape(); + shape.setAsBox(Box2DUtils.screenToWorld(32.f), Box2DUtils.screenToWorld(32.f)); + + FixtureDef fixtureDef = new FixtureDef(); + fixtureDef.shape = shape; + fixtureDef.density = 1f; + + character.add(new PhysicComponent(game,bodyDef, fixtureDef)); + shape.dispose(); + character.add(new TextureComponent(new Texture(Gdx.files.internal("police_officer.png")))); + character.add(new ControllableComponent(movementSpeed)); } return character; } diff --git a/core/src/com/darkrp2d/entities/components/ControllableComponent.java b/core/src/com/darkrp2d/entities/components/ControllableComponent.java new file mode 100644 index 0000000..6a4ecaa --- /dev/null +++ b/core/src/com/darkrp2d/entities/components/ControllableComponent.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entities.components; + +import com.badlogic.ashley.core.Component; + +/** + * + * @author Julian + */ +public class ControllableComponent implements Component { + + public boolean up = false; + public boolean down = false; + public boolean right = false; + public boolean left = false; + + public float speed; + + public ControllableComponent(float speed) { + this.speed = speed; + } +} diff --git a/core/src/com/darkrp2d/entities/components/Mappers.java b/core/src/com/darkrp2d/entities/components/Mappers.java new file mode 100644 index 0000000..027cf46 --- /dev/null +++ b/core/src/com/darkrp2d/entities/components/Mappers.java @@ -0,0 +1,20 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entities.components; + +import com.badlogic.ashley.core.ComponentMapper; + +/** + * + * @author Julian + */ +public class Mappers { + + public static final ComponentMapper physicComponentMapper = ComponentMapper.getFor(PhysicComponent.class); + public static final ComponentMapper textureComponentMapper = ComponentMapper.getFor(TextureComponent.class); + public static final ComponentMapper controllableComponentMapper = ComponentMapper.getFor(ControllableComponent.class); + +} diff --git a/core/src/com/darkrp2d/entities/components/PhysicComponent.java b/core/src/com/darkrp2d/entities/components/PhysicComponent.java new file mode 100644 index 0000000..2b1ffb6 --- /dev/null +++ b/core/src/com/darkrp2d/entities/components/PhysicComponent.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entities.components; + +import com.badlogic.ashley.core.Component; +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.BodyDef; +import com.badlogic.gdx.physics.box2d.FixtureDef; +import com.darkrp2d.DarkRP2D; + +/** + * + * @author Julian + */ +public class PhysicComponent implements Component { + public BodyDef bodyDef; + public FixtureDef fixtureDef; + public Body body; + + public PhysicComponent(DarkRP2D game, BodyDef bodyDef, FixtureDef fixtureDef) { + this.bodyDef = bodyDef; + this.fixtureDef = fixtureDef; + body = game.world.createBody(bodyDef); + body.createFixture(fixtureDef); + + } + + public void dispose() { + } +} diff --git a/core/src/com/darkrp2d/entities/components/PositionComponent.java b/core/src/com/darkrp2d/entities/components/TextureComponent.java similarity index 52% rename from core/src/com/darkrp2d/entities/components/PositionComponent.java rename to core/src/com/darkrp2d/entities/components/TextureComponent.java index d08ad1a..6350a96 100644 --- a/core/src/com/darkrp2d/entities/components/PositionComponent.java +++ b/core/src/com/darkrp2d/entities/components/TextureComponent.java @@ -4,14 +4,23 @@ * and open the template in the editor. */ package com.darkrp2d.entities.components; - import com.badlogic.ashley.core.Component; +import com.badlogic.gdx.graphics.Texture; /** * * @author Julian */ -public class PositionComponent implements Component { - public float x = 0.f; - public float y = 0.f; +public class TextureComponent implements Component { + + public Texture tex; + + public TextureComponent(Texture tex) { + this.tex = tex; + } + + public void dispose() { + tex.dispose(); + } + } diff --git a/core/src/com/darkrp2d/entities/entityListeners/DisposeListener.java b/core/src/com/darkrp2d/entities/entityListeners/DisposeListener.java new file mode 100644 index 0000000..d65e731 --- /dev/null +++ b/core/src/com/darkrp2d/entities/entityListeners/DisposeListener.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entities.entityListeners; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntityListener; +import com.darkrp2d.entities.components.Mappers; + +/** + * + * @author Julian + */ +public class DisposeListener implements EntityListener { + + @Override + public void entityAdded(Entity entity) { + } + + @Override + public void entityRemoved(Entity entity) { + Mappers.textureComponentMapper.get(entity).dispose(); + } + +} diff --git a/core/src/com/darkrp2d/entitySystems/MovementSystem.java b/core/src/com/darkrp2d/entitySystems/MovementSystem.java new file mode 100644 index 0000000..a93ce23 --- /dev/null +++ b/core/src/com/darkrp2d/entitySystems/MovementSystem.java @@ -0,0 +1,61 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entitySystems; + +import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntitySystem; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.utils.ImmutableArray; +import com.badlogic.gdx.math.Vector2; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.entities.components.PhysicComponent; + +/** + * + * @author Julian + */ +public class MovementSystem extends EntitySystem { + + private ImmutableArray entities; + + public MovementSystem() { + + } + + @Override + public void addedToEngine(Engine engine) { + entities = engine.getEntitiesFor(Family.all(PhysicComponent.class, ControllableComponent.class).get()); + } + + @Override + public void update(float deltaTime) { + for (int i = 0; i < entities.size(); ++i) { + Entity entity = entities.get(i); + ControllableComponent controller = Mappers.controllableComponentMapper.get(entity); + PhysicComponent physic = Mappers.physicComponentMapper.get(entity); + Vector2 dir = new Vector2(0,0); + + if(controller.down) { + dir.y += -1; + } + if(controller.up) { + dir.y += 1; + } + if(controller.left) { + dir.x += -1; + } + if(controller.right) { + dir.x += 1; + } + + physic.body.setLinearVelocity(dir.nor().setLength(controller.speed)); + + } + } + +} diff --git a/core/src/com/darkrp2d/entitySystems/RenderSystem.java b/core/src/com/darkrp2d/entitySystems/RenderSystem.java new file mode 100644 index 0000000..bbedad3 --- /dev/null +++ b/core/src/com/darkrp2d/entitySystems/RenderSystem.java @@ -0,0 +1,47 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.entitySystems; + +import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntitySystem; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.utils.ImmutableArray; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; + +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.entities.components.PhysicComponent; +import com.darkrp2d.entities.components.TextureComponent; +import com.darkrp2d.physics.Box2DUtils; + +/** + * + * @author Julian + */ +public class RenderSystem extends EntitySystem { + + private ImmutableArray entities; + + + public RenderSystem() {} + + @Override + public void addedToEngine(Engine engine) { + entities = engine.getEntitiesFor(Family.all(TextureComponent.class, PhysicComponent.class).get()); + } + + public void render(SpriteBatch batch) { + batch.begin(); + for (int i = 0; i < entities.size(); ++i) { + Entity entity = entities.get(i); + PhysicComponent physics = Mappers.physicComponentMapper.get(entity); + TextureComponent texture = Mappers.textureComponentMapper.get(entity); + + batch.draw(texture.tex, Box2DUtils.worldToScreen(physics.body.getPosition().x) - texture.tex.getWidth() / 2, Box2DUtils.worldToScreen(physics.body.getPosition().y) - texture.tex.getHeight()/2); + } + batch.end(); + } +} diff --git a/core/src/com/darkrp2d/input/InputHandler.java b/core/src/com/darkrp2d/input/InputHandler.java index a15d125..46ea7ae 100644 --- a/core/src/com/darkrp2d/input/InputHandler.java +++ b/core/src/com/darkrp2d/input/InputHandler.java @@ -5,10 +5,15 @@ */ package com.darkrp2d.input; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; import com.darkrp2d.DarkRP2D; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.PhysicComponent; import com.darkrp2d.input.commands.*; +import com.darkrp2d.input.commands.moveCommands.*; import com.darkrp2d.scenes.menu.MenuScreen; /** @@ -20,24 +25,70 @@ public class InputHandler implements InputProcessor { Command testCommand; Command menuCommand; + //MovementCommands + Command upCommand; + Command downCommand; + Command leftCommand; + Command rightCommand; + public InputHandler(DarkRP2D game) { testCommand = new TestCommand(); this.menuCommand = new MenuCommand(game, new MenuScreen(game)); + + //Inputs auf erstes bedienbares entity + Entity character = game.engine.getEntitiesFor(Family.all(ControllableComponent.class, PhysicComponent.class).get()).first(); + this.upCommand = new UpCommand(character); + this.downCommand = new DownCommand(character); + this.leftCommand = new LeftCommand(character); + this.rightCommand = new RightCommand(character); } @Override public boolean keyDown(int keycode) { - if(keycode == Input.Keys.Q) { - CommandStream.registerCommand(testCommand); - } else if(keycode == Input.Keys.C) { - CommandStream.registerCommand(menuCommand); + switch (keycode) { + case Input.Keys.Q: + CommandStream.registerCommand(testCommand); + break; + case Input.Keys.C: + CommandStream.registerCommand(menuCommand); + break; + case Input.Keys.W: + CommandStream.registerCommand(upCommand); + break; + case Input.Keys.S: + CommandStream.registerCommand(downCommand); + break; + case Input.Keys.A: + CommandStream.registerCommand(leftCommand); + break; + case Input.Keys.D: + CommandStream.registerCommand(rightCommand); + break; + default: + break; } return true; } @Override public boolean keyUp(int keycode) { - return false; + switch (keycode) { + case Input.Keys.W: + CommandStream.registerCommand(upCommand); + break; + case Input.Keys.S: + CommandStream.registerCommand(downCommand); + break; + case Input.Keys.A: + CommandStream.registerCommand(leftCommand); + break; + case Input.Keys.D: + CommandStream.registerCommand(rightCommand); + break; + default: + break; + } + return true; } @Override diff --git a/core/src/com/darkrp2d/input/commands/moveCommands/DownCommand.java b/core/src/com/darkrp2d/input/commands/moveCommands/DownCommand.java new file mode 100644 index 0000000..5d2b7c7 --- /dev/null +++ b/core/src/com/darkrp2d/input/commands/moveCommands/DownCommand.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.input.commands.moveCommands; + +import com.badlogic.ashley.core.Entity; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.input.commands.Command; + +/** + * + * @author Julian + */ +public class DownCommand implements Command{ + + Entity ent; + private boolean toggle = false; + + public DownCommand(Entity ent) { + this.ent = ent; + } + + @Override + public void execute() { + ControllableComponent controller = Mappers.controllableComponentMapper.get(ent); + if(!toggle) { + controller.down = true; + toggle = true; + } else { + controller.down = false; + toggle = false; + } + } + +} diff --git a/core/src/com/darkrp2d/input/commands/moveCommands/LeftCommand.java b/core/src/com/darkrp2d/input/commands/moveCommands/LeftCommand.java new file mode 100644 index 0000000..2d5121a --- /dev/null +++ b/core/src/com/darkrp2d/input/commands/moveCommands/LeftCommand.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.input.commands.moveCommands; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.input.commands.Command; + +/** + * + * @author Julian + */ +public class LeftCommand implements Command { + + Entity ent; + private boolean toggle = false; + + public LeftCommand(Entity ent) { + this.ent = ent; + } + + @Override + public void execute() { + ControllableComponent controller = Mappers.controllableComponentMapper.get(ent); + if(!toggle) { + controller.left = true; + toggle = true; + } else { + controller.left = false; + toggle = false; + } + } +} diff --git a/core/src/com/darkrp2d/input/commands/moveCommands/RightCommand.java b/core/src/com/darkrp2d/input/commands/moveCommands/RightCommand.java new file mode 100644 index 0000000..82e35e9 --- /dev/null +++ b/core/src/com/darkrp2d/input/commands/moveCommands/RightCommand.java @@ -0,0 +1,40 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.input.commands.moveCommands; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.Body; +import com.darkrp2d.entities.components.ControllableComponent; +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.input.commands.Command; + +/** + * + * @author Julian + */ +public class RightCommand implements Command { + + Entity ent; + private boolean toggle = false; + + public RightCommand(Entity ent) { + this.ent = ent; + } + + @Override + public void execute() { + ControllableComponent controller = Mappers.controllableComponentMapper.get(ent); + if(!toggle) { + controller.right = true; + toggle = true; + } else { + controller.right = false; + toggle = false; + } + } + +} diff --git a/core/src/com/darkrp2d/input/commands/moveCommands/UpCommand.java b/core/src/com/darkrp2d/input/commands/moveCommands/UpCommand.java new file mode 100644 index 0000000..ddae17e --- /dev/null +++ b/core/src/com/darkrp2d/input/commands/moveCommands/UpCommand.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.input.commands.moveCommands; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.gdx.physics.box2d.Body; +import com.darkrp2d.entities.components.Mappers; +import com.darkrp2d.input.commands.Command; +import com.badlogic.gdx.math.Vector2; +import com.darkrp2d.entities.components.ControllableComponent; + +/** + * + * @author Julian + */ +public class UpCommand implements Command { + + Entity ent; + private boolean toggle = false; + + public UpCommand(Entity ent) { + this.ent = ent; + } + + @Override + public void execute() { + ControllableComponent controller = Mappers.controllableComponentMapper.get(ent); + if(!toggle) { + controller.up = true; + toggle = true; + } else { + controller.up = false; + toggle = false; + } + + } + +} diff --git a/core/src/com/darkrp2d/physics/Box2DUtils.java b/core/src/com/darkrp2d/physics/Box2DUtils.java new file mode 100644 index 0000000..725c0a0 --- /dev/null +++ b/core/src/com/darkrp2d/physics/Box2DUtils.java @@ -0,0 +1,25 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.darkrp2d.physics; + +/** + * + * @author Julian + */ +public class Box2DUtils { + + public static final float PIXEL_PER_METER = 32; + + public static float screenToWorld(float value) { + return value / PIXEL_PER_METER; + } + + public static float worldToScreen(float value) { + return value * PIXEL_PER_METER; + } + + +} diff --git a/core/src/com/darkrp2d/scenes/game/Camera.java b/core/src/com/darkrp2d/scenes/game/Camera.java index aae29dc..ad4a246 100644 --- a/core/src/com/darkrp2d/scenes/game/Camera.java +++ b/core/src/com/darkrp2d/scenes/game/Camera.java @@ -5,10 +5,15 @@ */ package com.darkrp2d.scenes.game; +import com.badlogic.gdx.graphics.OrthographicCamera; + /** * * @author Julian */ -public class Camera { - +public class Camera extends OrthographicCamera { + + public Camera(int viewportWidth, int viewportHeight) { + new OrthographicCamera(960,540); + } } diff --git a/core/src/com/darkrp2d/scenes/menu/MenuScreen.java b/core/src/com/darkrp2d/scenes/menu/MenuScreen.java index c7754ba..ce92cca 100644 --- a/core/src/com/darkrp2d/scenes/menu/MenuScreen.java +++ b/core/src/com/darkrp2d/scenes/menu/MenuScreen.java @@ -20,7 +20,7 @@ public class MenuScreen implements Screen{ public MenuScreen(DarkRP2D game) { this.game = game; - layout = new GlyphLayout(game.font, "Hello World"); + layout = new GlyphLayout(game.font, "Menu Opened"); } @Override diff --git a/desktop/src/com/darkrp2d/desktop/DesktopLauncher.java b/desktop/src/com/darkrp2d/desktop/DesktopLauncher.java index 8477155..d39e17b 100755 --- a/desktop/src/com/darkrp2d/desktop/DesktopLauncher.java +++ b/desktop/src/com/darkrp2d/desktop/DesktopLauncher.java @@ -1,6 +1,7 @@ package com.darkrp2d.desktop; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Files; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; @@ -17,8 +18,12 @@ public class DesktopLauncher { //Default conf config.title = "DarkRP2D"; config.useGL30 = false; - config.width = 800; - config.height = 600; + config.width = 960; + config.height = 540; + config.addIcon("logo.png", Files.FileType.Internal); + config.vSyncEnabled = false; // Setting to false disables vertical sync + config.foregroundFPS = 144; // Setting to 0 disables foreground fps throttling + config.backgroundFPS = 0; // Setting to 0 disables background fps throttling loadUserPrefs(new LwjglApplication(new DarkRP2D(), config)); }