From a99f12fceb2f4e5c3a7b8b2e9b1d111b00e02352 Mon Sep 17 00:00:00 2001 From: fgnm Date: Mon, 2 Nov 2020 21:22:14 +0100 Subject: [PATCH] Memory optimization is just like the hell... --- CHANGES | 6 +++ ...atch-0.0.2.jar => plugin-9patch-0.0.3.jar} | Bin 22238 -> 22238 bytes assets/plugins/plugin-performance-0.0.2.jar | Bin 4911 -> 0 bytes assets/plugins/plugin-performance-0.0.3.jar | Bin 0 -> 5733 bytes assets/plugins/plugin-skin-composer-0.0.2.jar | Bin 13566 -> 0 bytes assets/plugins/plugin-skin-composer-0.0.3.jar | Bin 0 -> 9943 bytes ...tiled-0.0.2.jar => plugin-tiled-0.0.3.jar} | Bin 53112 -> 53112 bytes .../plugin/performance/PerformancePanel.java | 48 +++++++++++++++-- .../rednblack/editor/view/ui/RulersUI.java | 51 ++++++++++++------ .../view/ui/widget/actors/GridView.java | 4 +- 10 files changed, 90 insertions(+), 19 deletions(-) rename assets/plugins/{plugin-9patch-0.0.2.jar => plugin-9patch-0.0.3.jar} (90%) delete mode 100644 assets/plugins/plugin-performance-0.0.2.jar create mode 100644 assets/plugins/plugin-performance-0.0.3.jar delete mode 100644 assets/plugins/plugin-skin-composer-0.0.2.jar create mode 100644 assets/plugins/plugin-skin-composer-0.0.3.jar rename assets/plugins/{plugin-tiled-0.0.2.jar => plugin-tiled-0.0.3.jar} (91%) diff --git a/CHANGES b/CHANGES index b0681cc3..96ef66a4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,9 @@ +[0.0.4] +- Smooth camera pan +- Update HyperLap2D project version to 0.1.1 +- Performance plugin now shows used memory +- Some memory optimizations + [0.0.3] - Fixed bright lights on some GPUs - Fixed undo\redo when creating new objects diff --git a/assets/plugins/plugin-9patch-0.0.2.jar b/assets/plugins/plugin-9patch-0.0.3.jar similarity index 90% rename from assets/plugins/plugin-9patch-0.0.2.jar rename to assets/plugins/plugin-9patch-0.0.3.jar index 9d1ff8e02f911a2ab520d0c946372979f41c18c1..aeb249ae200ce522aecd0f21e45a98eb1352b8e1 100644 GIT binary patch delta 310 zcmcb&mhs+NM&1B#W)?061`ZB}nVm@!dDWOfl$jT^S%3V*W@Rw7QWs3!GyzeQ1sJWF zTNlJn_G5Gf@i$Lnv|$7ZY`)5Lg%vEahJ%q8%-A6Mh#kzBD!ZHs%&=G34PpFM;$#Dh zaB8MO7)AQdd|;6swuMY!19cp{1VGN2Tp3^jrZ)uGgH%lZ6krIZ)dH=-bV{HTm|hv^ z33l4oz+f=nJE#K8KNge$<{Jj5faw{*NnrXfl%Em;5kDQ01{OC7h0t?DlfiuEuoSR4 HSz#pryxDCS delta 310 zcmcb&mhs+NM&1B#W)?061`ZAegGk?rylTuK%FK(IcZ1KwW@Rw7QWs3!GyzeQ1sJWt zv>&4@h~7Mn(S{MsxXN^e70g(}!N?0{Y!H3K4rWZ1UCsn%*emRYF#alWvVlc7HPaxB zB7J8*u*eSELWmk22QLATb0${?n1JaG0rnsjlRpI*f@!rth*MGmoxuE+fu3OcYhW;# z_7185)5n4`z_ej-3YeY|oCK!-Lis5n5b@I?X<%`aPzXIYG#Sii4ui;Ng_QsRWj$oT diff --git a/assets/plugins/plugin-performance-0.0.2.jar b/assets/plugins/plugin-performance-0.0.2.jar deleted file mode 100644 index 883aea66dc03215c3dd552038ac6728fc76a01b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4911 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 diff --git a/assets/plugins/plugin-performance-0.0.3.jar b/assets/plugins/plugin-performance-0.0.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..655c5963ac2799dd12f4b4f2e608507337b31e59 GIT binary patch literal 5733 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 ZhkO-z^nZMmI7m21%&166EJWA-{|7Savy%V- literal 0 HcmV?d00001 diff --git a/assets/plugins/plugin-skin-composer-0.0.2.jar b/assets/plugins/plugin-skin-composer-0.0.2.jar deleted file mode 100644 index 501cb0bee1bcf0fce7b08785caa8feb6fd85ba22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13566 zcmbt)1#lh7lC79!F*7qWGc&Vfv1Bo`WYM*lnVBrcD`sY9MvKW7+FH-fdpk4U|7K(2 zXGHhyxRIHss;i?a>(o(}1BZYE0fB)5Vb)Pl0r_cQzukTs?9WRO_`M;n-{Y++QY-jHB7sy||kpIWa+1$+D#Mao<=5PJ6{vZD4X4b9_&VL(5_@BcZ zZQU%b?f*8K?*EK-v9Y!{b+B`Ea54Yi4aw*T6(vFf0cjxx0g?D;snmYv75i6Sg`fR2 z{@GDRQ(I#fmnI!pPxWQDAF=Fvh=tJ7WSp?U(Db$6dRJCH3Ts=j^c7M_OJh=|gY_Z#IvTr6_y0!7S+a7mc zO~PEjSbg>L9ygd0cn~^%J>K9l^17N!1v!r|O(BDB#r5UAt(C707{TVaa2$)GeBK}G zkzR=!!l%Pf9GVxa6JH?=r+})QEi%t6cce1HWo4?uw{*IAU{@^eV4ZhHK;l;2h;OhKWNl!x?JX&T;DYhq=EJ94L{pe3W)rtmcJO^n)-KK$ z{)z!dTeYCfovxT(XbNtu64y^W1y9ls{3smr5(};iEgTZh zYkV1NuPfBRecBSv=7&a!wKKezcZ)=tB|sG^n9MH_{gR}(TEll0;= zJppmdamU=$^Hi1HI1(YB^jmtdu{rTf?^74`ePjBmkIR-+3WKP3!cUm9b`Mu#^w`g5 zoIanx*M!9MaOW+irH`hGPT)kFweq9iL?N+N`=TVsB9 zf~mXDT#=-+`qL=1E50OEv2wTKyc5u^J+uGYWV2^j}`S)~pR+(W)n|94)5dw9-Pu{lM0 z#bpJAA~hOOOnYAAcSYq$yN0RE!+bm(_U?$K@?;qos7dAqp82cU79Z$2-!DOtgqZ>~5p1cwA zPVNw)TOiB5V1ia8=*P!3%sS7#XD(Nc5YF5bP;O}(?0J?Lw4gp5v8)y97OXrurOry4 zObSVkdCgW&Wv3CbAiF!BnGMROYcgKKK~wn+xUr{(-TQO`n#lJ0bf6$P_1LYBoX>nX zC|h}RS;GA%H(znkF4pvVfGYl$ZQOMMD1S`ssi&-4m8@#x{1@b_YV<%=*ZW{ze;A?j zn{iM&Z)eVB3vA*3;p*x*U?h9SrI78ALO&-S;;?p%+G9uzk&5q$oU$^qAb%PATTu*= zRz7yELTPdYo>&R)Yhz6AKq+=UVDjD2QVC4)rDA{H{#2H6!$V++G1Uc;$HUswWol5+DC8D^q+ z)p{tcbZUN(U^_H4;>B2YR8+2$PPrW6UJ_~PlZL!TowD)N8HQklIjuI~gC?L#uVRly zZcP)5Jkc@l5Z`Pq8fe#+VU^pKH)bo}M>V`DXitQjTgU#vHqyE%z4UxTo2aW_3}4E0 zafEo7)LpR85t_Hn0(efsI^JKtKEw4F8$NqvwVa3(y`!3+sw5>vQ@JZTd_ukQeocwl z9@4^wKHwBPe6EUgF>2t8LV3~XJ(Ae5Zu+Ec{dChFw2n#5kCY>yQ63h*F{?eVv%R^n zys$F2=nt&P@2qM)toD5s{2|;=boxk!(aFUiLeo}kM_Dkxs-qEZG=D?&*k+kP#&AGo zo^bnAFh|IYhJL&SMDwt!+KUsKzd7~{-Ze+k+Yf54rgk6^vm^4d77`eLZO3zOi zsha5MG4X9m*cIRav(!!jknrfxRh0ODEKRhre8h_oB4dc*wTAxCkJY| zE|McK2Tu*F4cXzs{6tM&^w{V$l3_UW-FJgo-~DwMM#Yn4t4niJG& zy4VI{X2!GT$&8SFY(P$nfq4tQv!Nz)hWUq7oN;Fgr3hCYhEr|@EQMj%snEAzlXGv? z)mN4iRjUQWZsu6i;JSq}tSFR>G?c7@rlnDDg$Oqql$`b!1CcPUOhfH5Y7>BTFIVaq zmfWb!1LIcG;hW9cJx1M_ZG-F3y{^%B9Ae_k14#wZHro^i^6xhB1K_T6VT85#!?+mg ziQCmM_=E0V6fH?(nhMQdoEs`6$5VLY2SgI^NhW1m88JTCi!_gDRAX}ysD+9oGcI1% zrG=O3Nr15>g=l!wB8)K9izVv0wJH#FXiXO2!nq1@kyk>@tLkSrc!{R0yS0i@ylhl^ z6P6?CyJVSl@g;k>P;EK+X^^Kdug?{Jx1enpd_S-^wkb(lveoe74lq@({?P`mu8dy_ zub|Wsffkmx?@vaZJ8TJC#N+0@+1%Jbr>2=QBR@5V#@1!5ZaA19U7X~jY>bf%Dz-pF z&pQ3(lPT9g^z4r^72bz^tuOD|D&wnSA*HG#KVwq2V`vVi4|PzSR>!`>+MHx?jVNo6 zxB_N!aWT5Os#v=@>8wK&c^nq!sG^QaJMgHqJS2lk#ayahAqRO4{i=81Szr_IPy?BLbt zqgcg&m(#bm=G3h(46TnFgL$+cyJQnRKaLu!r)oY-syfIRybC(aBkhdKAgZ7YBDsO5 ztL(E@#71>9qmHYC6r6Nd+k>UJDPkmw>xaCJt2n|8W9y{oE$C4&E~y$VFX=xd4*koAzmj0!Jf}s)0xW3x7;?0WWHDq*oTii&`Z-RcY{)ighdal!|!E zWntO>p=-GFMQ87LoH6YDNDtcg98^=Q1I7zd_X?7}`y&QMG837n;$(tAN3}R(&6%fB zEGfDi!}gN*omtI!@Uz}UwG?S0?`m#*SLR&kgN9d)iJgOeZBfHAR!9C_q*_pF>n5H- zU>g@Zneu`ITMo8Y*f`zdc3D}+M+FRwW0b6(6d7Bzjwsr%hF?khQXTOgyFNRk7JXjI zYO8?Vc=9S%rC$@Rd|MTA{%Ldb|T<`LbS0@_f12;4}>{9A0PdNvUlu? zp0lE>W3MA(OitQ@?`}ge)U6s`h7HbZQ#E9tb&Y3@sR$ z?Frgq3ihz4f!}WfM5-x_EzX>D`JM)E4S5p)dUl{#emsAsO$Pm#RGODnzm7LY91YPn z`W5G`J;NT%R~z0sZ%i|pd9q1rT)&Z+P|R~H}r^a;G+17=1t|iv9U&dv9t^UQPV;!f%A5YiI3L3*8Dx6a@7iR zwU&5ebCLYF+&m8tQ9}+MN+exadmQjq{o<^J@66en==X zLBK0DpL&W6)3WaT{G}9~bkY+{Ns&bLlSao@EXZ?Rd{;f5N({C*698E%N}J&L5yCPG z`GLEIC8E@rX7L86NPoe;kRjJ(gnHqYde`4NUaXP5H?8kVXSz%OIMKO99NSYN$Fd`` z3RlsZ`%bWvGIr*}${B~1C!uK8w&d*k2+2wnEw@2!x5SS;-}ni}Qj?q5Q0g~pr4pV; ztPuXYETO<|U&wVIj1sJCF0305%iUOY)QlY=gMn^w!`@7@>;Q+VTZJ8=ilEY!J0W%x zJ&P&Esq~)pQiEVmi?o4uo<~;B3EQ#~Cra@gku%rghyg9~asD4Ps6w!1(qP$MH4$5x znLa9-^}VI`7>lXoF#1VN63+c0wpnqRQzi;aDXQ+P138z+`X-x^-`TCmw)*(g00Ocf zAl%~_J@zSi9T2}cZDix?92?@zeiZ82nZI~mc;4`CQDkE z8x?pYyfhXkaEmsSa_B}ATs{$%F^c0%l|tHgnPVha_)MhKUNUvqan7AF;R3t-nwcjc z3I4JrhE!11&AFMEgYB_rZL{F z>ZUr7-e+po3-igQyHq%O(w@?Ij%j^1Xd3i8O{$KnVHHb8?_-jxHw=^YKuDBewiIpd zCg(Fs%4QN-DA;4fb(AUk7>S7*XwS8MKO%71sTFhE6*5o_9No8Wd!vXvVbJ0hj>>h}l9@f+jNHqv5P z1_1)X^pgq^{bxIHaR(23TL)t^YkNy^Yhzmn%ip)(#hP|%cpB*bjIa=WxQ^>4basdg zO(c!B#fx1K)D+l}B^Y>ckX7CdKC8B?=Ovkl@BNdfr^@$?-Dq~%&n$QvRiwHco&`{6T3cXiNx{dz3{Q#iLb z+R1#JaCc7;!{-Wnh_TzTYW9|>u}1SW|E5!)q5k4Q;k9P^_76JVV;CoyPW)6^Xx#BM zg7NEfj>VRE#mtWUd|Y)I;;6x}R=8WjvhR<~ZOwV|iLjf(!c?f-Ei$v}POdzwnHa!y zU5n1v!A9HQuAbIAI)(WgX8VYit|@~bq#9CO_u&J;_+9k-VWVIWW+n^{SCZpWF(@_n zpDY<-)o`~gkPO?8w2dhO=fRG{Lh24bSrCs8HLG#q#?#KP_aZb;MaLT zn51LIvmhQj=4=(4!}5=y|Le->@INK)Vzv>PN^$A>SApwPguVu3N@4!j!*7C+Vv6LA@DB>g_LPzulmmiL>eC7B<7+mGlO^_56ZQsV3U z0{umDG9kaBw6vro0T^W+v!M|!yq_iwU+r z*dKntEoWMJkOIJ`3vd6xW_DHy;Nctq3!oBwgV*YZ+?cKX$iFD3pbPJh{j3ovr_Lnx zP8W;_&dgBGmgo9Hc<~ILRoVoF$cg+Cj+`}A)VQ$t*%UE1kD6JV?;2yI%g_iVIT=_O_3ZghfF z{&q%o>H|YCCFye;#(ckGk8*MYiTLnizer9TTHc(t?Xnb&+POB;`vM194-Key-7V2K zwR;PYM-gwwjAJVC>c#s_EJ!p%BXrAM-C?bb)(Qn}LUTr)JTy-S?KMdzt($Q5)Nxba z>#0LoVUick^T`fYZE-HOrGq|;>SnBQVHBVvXC`dJ$ZI%i_m0q^mZqT(_2fc>LJQ11 zG0!cFAKw-UinzCdly4TabX#wTeV^7bI44Po=3wcWRMuS18W zD&7`;Ls@ULiUsVb#`E#K;;B}!2^cu)s{`z4Un7ArSAaL3XbJN&HNr7d)KOjLz&ps`nwHZ zJjOxeWrhg8e7mkFPC4}B6Qhv}#zuAMi}sP1mjKYe&Vz$N`(ZwyKS^Tne>@LLS-V=f znW+ApEsR~v#f@E!|3yQpj>|%@AXfsZ49-;m^w98-^!Aw6Hf5D&2oX|g8;{HrB zYbyOduGy;N_VdE%0%+}Sgop@=r&H+?@5}Yk zZBZA0f+o`$FzEBZYOa+>aT9xWj;oWwFru{xEUK#N!*@`E6x|pqLyG+_7^Ax`xkTCV z7U23}KH19`=EMvbg3--nwC_iHTzLA5bASYra_9eYLjs~n2nw;+u|waFfTg0i?4C*uoIjdM4we3 z90naqv9^lGoW<83?f?YtuxqIi6DEB_na58y zZ&Qyq%nc02B)A8zdhev9VLwl#yg)_AJ~4v(a)+}lPion@ZPV`LDXVAc(EZ02WBEQK zMrPgMJWKb)j%y%irETkIlpU>Z(W*iu8*3ZSQ55tnB{D9@ZCkm*=}VvV`%gjHveyAYa(DeK z-jEPI>G6a6R=yJZlA6J0;Ce6Py-ABwTUNSSn;=!bl<#bic^(!w4Nl8j+^(hc0SzH3 zeKBhvz&4c;)u@KBPyCMNMDqqTd^^JY-fp$sjDEJ3RBYu;1%qc*GI@_;GahOZ`dQfw|>*@Cw86A!M@F5TXWB`z)U$HoU5 z@^%LD>_Xy>&_+%+b; zvh3>QZ5-ZgR5DLx5wWBBj#JbYou<;g!;qZn8#6o?C(yQfnTDsY@MXyohM1wmf)bwr zQ0*QYbnCgAPAa5?u9dP0OK$JnJcv$(1mXmp!k&^b%W9AV53dfS4Z?vIBIhk^*Ek>L zS%zE3vqSwhiWX1IhU6+i-m`|qVN$8+55$GzB`hAQ3ni|tk%bvqMY_geaX>lGL0`W%~Vp7p`)F907 zMqTNU&M;QgL3`$R+%li7G9Ufc*fYNvHwEu4D^QBbWl3*Spbq?c({5G(;ed0Ks9~@L z|6$Zgpr$}>{21EP;s!4JP?D|&v7D`oi807Cba|T90ombNAaePR zubvcwE&zFD(Pr?_YNKv1x%MIo>Ev6I{jgnU9M`>mho$4S6~7#{s*{MFHLIz|jUva*boE=1lgNCHT#B-V3acJCE zJ1r7JcL~8^)*W}wojZCBB@m+?tS7`>xkuJw?$)F24v$RWQ1zKIpqzN2y%6Cm2YazE zOKwe+bktyld%(hW6yEf1ZhTX@@C25Q(a=y5>F}jI@-hrR_#{L~|H8BSK)E;PF6yvJ0#jKjOxLAWUQxt^7P2PH( zoVn`mg_fhbJK?@w=Or)Tlc}4Q6KnBO^YU^d7dzK(^7{%F%ovW8n`=iOu}KQs$R#Pf zsm5ihg0EO)tqrp?5_h=wxC0B?rgn|_QQ_&WLcRW)kK|iZ#FvBFzSoEoa zGu#>d?^aeqrD`+VzU^fCn*2b%07m&RkLQxqxEvv#_v`u6c16G3yzBhRh2PUXL*vU$ zE_#BAc!EL~kNMe2+jc0p0I`!aT#)OMsUZD~W1nUZ?a2GBM+@lwk+U^C%b&A8z*unp1jAYC`70EB4G8Zt)tX`|25(NSQw|%i)_$vGJw? z84*OOVog<6UE&{el~R%!NzHw+1c3Z31m!->!W!r?9-J+-n;@9+NZRsU4QgBg?ndj| zqEnH+OvHpc6HN@cnJjr4%1h0D-?avR!mXVnnknt>VTcfk8fjb{PX0t;yEL#n!?9S@ zQ)svHN%PR zZ2WlCuRU3x>w`xO5v)DvSlRFNV~SS{&X@eY@RY0G;Q4?tfWt;bE-&jC|EZ0x-@83Ha+x}CPxwi$LJ@pu#Xz6;rW&VrEVcXG4o?4k%LkI+@z#${@{zWZ-uhdwMFE7+6a$7lf4V zlJ3{#5a4swK=t0xj)R=$ecCmpsN_L#Gs{boyNOn! z*4SECUK5+%wwp3uUFe`=qBk8$T$`03bevJpb5Zf0`+JXbzcX9h*2dB*=MVV=6 z!qsAzYOOgs4W**rYJ*cbjo}TYl4(=Q?SiC|z z6o+9?vm)+*Ju@1pB1;r3inSw=oRE8xCfrgm&n0-+giNYEzMUVwtf$D7c=z6lwY%am zvQo=oBtrMa?t|-VUgt;90mmFK9`6vUHpq=v`)8-BT~OcZY4L;maJ*FxN-k39#hB7- zT(^Xb9VDu;-+bZdk%Mg|bqb+_eUWA45d;^Y3=ssn^l> zCUQl@`x3po}dQ?f0 zH2h>h2ep#A{4R|cw6%@?go`?B^z{@LR|rZG#sq%+040;3aTme-qrPM(Ta3;GO`6sX zz7aD52Zk*GsN|tjZ8jW6p=o9?MOtHmB8PAhU+ycz(T+OI+NFM-9D(6G>3A%_3#&3# z7RPT`fVbH|l=R{K>N9cMS}GwT*81>#v@{MCH?+j_ zfgX=SXQ`~ymTSr;*hrJA&=%$1-m3F_7`um_=C-WK)95*sg6Ua0Sw`BEQ_~8Q{1+cX z5g{{aZIf`IG94rG*Rf)Fj-i$^%&&W#%MEgcP8Bh+4aqa+o(v}q_lE1M@5|^cc}%Kx z8R3{tdv&KcfCf7`6w9*~^x7?D18i@Fe7nbVlQVdp8#i_za9=Vb?E`sNce$K9PdKYJ zA23@O?q*P)>X5>6Pswj<1ssy`36+7^v{w;hvqUe@SD!1HbN!_&_Pkn7aZJV%y7YNv zy=6;~!QUX+|Y@5-(e3`191 z96ZD437d%P3+yy9 zOFtNuf}jIF3dv4Lsw@>%rbrYM)?X-mPH2OTAC%_}RX1GHw7 z22=7j4inZ*gZeJF%7SQnnTy#hL?=;kU~#uY>3221I5O5Jjn8a2;e1}z$0_M|v8U2; zorEX^WUI<~bdgXEF=zHeNPKBSZG1Mu1ZcXX6QVSdRbf_da;w18peqceV=B(6g(tE< z>(`5LMy7S;$6qU`%MXTq$XOTbzfo zHU}XFT^dy)FEACGwNaHd82i8beh;uy-$>atLIk~SIA?QOzStaW`z&e%Ui@7u4w^~Z zsqVZNc*i-q4;!QO89!GHqNhDGfg;`}h{r$sN# zP$Y$dL_)|Bh$pU3Iivbp`TGk$?qF(@8@s3zTEKzHzBc{@>bVY-tmvHGx*DNK} zG0+_obV0j0A9OQR9kdJF^))-D#4EbN0 z=dH!*y_f#@w-YCZMrFp7gu0 zIjsDiL~__rUd4MAY3}0DwrxcqH7AEg(BkU6>^7OFLsv>>r{`1o7E?2d2r6Hs**Hy zW>49pZ_tiQj|A~<)G|cLF1g-=cTNy&vSVKw5!^Hv9F%Zys8A=>hs#IEcRxm`dQY<3 ze!^3X*TOrtgeyPlmBbQ@B(<3=&rSFpZ<{@YSQ<-jW1I#}KjBtK< z>03K`(cluU&^cNpZE?loLIR)4SG>`F%Ke@^;Zm9si!JKTH)p`Ls96uJUYK$o&Q=&t zO4(GRnrnK`Sy`{WY=E@UWfgM{NHq5SY|QPgfbOP8Wl4e1@7f_w(vVXDa7@aOLD%=t zD1#AAmQ2=z6CzWeYx34u2-!7FAUHrgo@oq|*b!zc8;6JuHTPLv=3<&2M`BS}Tv2*6 zerAc`@1ks!D1+_{fhW)=>DUZBhPiUxAysh0^=OO*-eq@nx=JPHE;+#1kqPs?XT|&? zAYyb*0QI2Ad=J&%NU#~1y|aWD^>%c#b_ay8>Xh+DGz|gVK@43pWJ?QTb@X}M7aK07 zT*G&sq?KcbFxF&uq^C*96T|zEqCgmy6|)#(f-XOWig_F+ez6-SiQqqr70x zIPQu3Vwv;B|H`qXzpINflknWf1_xsr4T2Uf7adqoW_0{ zGRTFSe!v8hwR~7zm&c9hvAkEMF|AhTXlmF)ozl!RAlivSs$ROWE+zuRvySwA0tkNHEE|98>9$?|`<-=ZgeKK>g0FOmM=CHYOH|GWK`1pMbp{vVS3 zOS1oWxqg%E|B*}N|IGCl0spUwe--fmJ9T4V)IUr7=Vj`za{gZ-e^o5}0r?K)|9UTf z>C3;#^k4J~zvBIRGWZ7`CgwlF`%B&QN6GXn-mk}1f8gEx{FeTH-2c+QKfls{A71?m z_Un1XA7FmC{|M|qo=*IV`0IxL55#J+e}wqw?)`Op|10FL)$bpW_tgIg@_&us-`2vv qHsjYK?vG|P(*C1n{JH0UF6orzApd)QLjpkpafSo|acBAs;=cd|ogYI0 diff --git a/assets/plugins/plugin-skin-composer-0.0.3.jar b/assets/plugins/plugin-skin-composer-0.0.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..bed373d06a1680734d6b70c103847cef8299b5f4 GIT binary patch literal 9943 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 literal 0 HcmV?d00001 diff --git a/assets/plugins/plugin-tiled-0.0.2.jar b/assets/plugins/plugin-tiled-0.0.3.jar similarity index 91% rename from assets/plugins/plugin-tiled-0.0.2.jar rename to assets/plugins/plugin-tiled-0.0.3.jar index 9d36f42d41453eff2efa25e4bae01fff1c929c9d..5a15f97f078a2e2d50e5e9c762e068594565afc0 100644 GIT binary patch delta 714 zcmXYtUr19?9LLW*_ikhVOnuP;5rk=|$iOCQOqTS|3$B6IB4j$XaBgTJ2_r&~VnQJ6 zfQf-Fg34Y>F21|n=Dge0UW5?zVGq3s62AG;pPldN>GM6``#ay?_nz}LdcH=TcN8kw z2(enp>S842bW;v*KlLt!Qwxp2MjLS0!ND$=dgzOEm<^cxRb>Vn(!V}lmk2p7r}$WK zrHlQ|TGf&%AYpuK_zL@~$t-Sm@U!~Nd}e}}vDzyjp4&pgIkd|Z(IwX{PPMgi4u<-n zdRd0kTdP4Zx&AhcVEv{AcVzcX7ye?7cE==$x4x7EqFq_2{@?8e8vGfq zLs|7=>dMyBZa(mFP>PvV$1~e|`FHbudN=Nm>Z;Grzfs%_nRuWYnm$kDrRt zr?U@4X(iF^!s28yjTE(I={v>d->>_`OyA0KGki bz=R=oo)}X&hxVdiZck)+_Q!C3vtRlLtXv!g delta 714 zcmew{kNL+uX5IjAW)?061`ZB}$6I12@~SZ#MEXuN^I`_^nw7!SN?kB@(*#6K7GSgn z(|(MOfv_oM0hZC>F9!>3UM4h+6)a*eaTv^)%qr&z76_Ev z$PU)Ss^$(B@K?Le24XDM)a3;W=vd`|U9x$$-9(5J^u3#fz=vV+YWwUnwd5D_7lbj)HoM%ka0K4hV0TWOZOcp+959Ws+ zGz8O~2O+_J{Gbz<&vOVI0FxsQ`GfhZ4rPMrlP9Go8y>a(<_dJgK4JYxnR2Jcqo`YbsVDJ>;y#Jf)j~gah8+u zU^?w2#J-a!L%@86QxNq%ry%YDxsmTQ#Eo93lfY`$pN<66+-GvYbk!M%ov+ShgZU9> Uv%vJxvk 1000) { entitiesCount.setText(engine.getEntities().size() + ""); fpsLbl.setText(Gdx.graphics.getFramesPerSecond() + ""); + MemoryUsage memoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); + long usedMemory = memoryUsage.getUsed(); + long allocatedMemory = memoryUsage.getCommitted(); + memoryLabel.setText(getFileSizeString(usedMemory) + " of " + getFileSizeString(allocatedMemory)); } } + public static final long KB = 1024; + public static final long MB = 1024 * KB; + public static final long GB = 1024 * MB; + public static final long PB = 1024 * GB; + + DecimalFormat df = new DecimalFormat("#"); + + public String getFileSizeString(long size) { + int digits = getDigits(size); + df.applyPattern(digits == 0 ? "#" : "#." + getDigits(digits)); + if (size < KB) { + return df.format(size) + " " + "KB"; + } else if (size < MB) { + return df.format((float) size / KB) + " " + "KB"; + } else if (size < GB) { + return df.format((float) size / MB) + " " + "MB"; + } else { + return df.format((float) size / GB) + " " + "GB"; + } + } + + private int getDigits(long size) { + return size < GB ? 0 : 2; + } + public void setEngine(Engine engine) { this.engine = engine; } diff --git a/src/main/java/games/rednblack/editor/view/ui/RulersUI.java b/src/main/java/games/rednblack/editor/view/ui/RulersUI.java index 68300650..7c86a1c9 100644 --- a/src/main/java/games/rednblack/editor/view/ui/RulersUI.java +++ b/src/main/java/games/rednblack/editor/view/ui/RulersUI.java @@ -20,6 +20,8 @@ import games.rednblack.editor.HyperLap2DFacade; import games.rednblack.editor.utils.Guide; import games.rednblack.editor.view.stage.Sandbox; +import java.util.HashMap; + /** * Created by azakhary on 7/18/2015. */ @@ -68,6 +70,12 @@ public class RulersUI extends Actor { private Guide draggingGuide = null; private boolean lockLines; + private final Vector2 tmp1 = new Vector2(); + private final Vector2 tmp2 = new Vector2(); + private final Circle tmpCircle = new Circle(); + + private final HashMap labelTextCache = new HashMap<>(); + public RulersUI() { shapeRenderer = new ShapeRenderer(); @@ -84,12 +92,14 @@ public class RulersUI extends Actor { private boolean isTouchingDownRuler; private boolean isTouchDownRulerVertical; + private final Vector2 tmp = new Vector2(); + private final Circle tmpCircle = new Circle(); @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { super.touchDown(event, x, y, pointer, button); - Circle touchCircle = new Circle(); + Circle touchCircle = tmpCircle; touchCircle.radius = 5; touchCircle.setPosition(x - Gdx.graphics.getWidth() / 2f, y - Gdx.graphics.getHeight() / 2f); @@ -118,7 +128,7 @@ public class RulersUI extends Actor { if (lockLines) return; - Vector2 downPost = new Vector2(getTouchDownX(), getTouchDownY()); + Vector2 downPost = tmp.set(getTouchDownX(), getTouchDownY()); if (isTouchingDownRuler && draggingGuide == null && downPost.dst(x, y) > 3) { draggingGuide = new Guide(isTouchDownRulerVertical); guides.add(draggingGuide); @@ -126,7 +136,7 @@ public class RulersUI extends Actor { //Changes the dragging guide's position to the world position if (draggingGuide != null) { - Vector2 worldCoords = hereToWorld(new Vector2(x - Gdx.graphics.getWidth() / 2f, y - Gdx.graphics.getHeight() / 2f)); + Vector2 worldCoords = hereToWorld(tmp.set(x - Gdx.graphics.getWidth() / 2f, y - Gdx.graphics.getHeight() / 2f)); if (draggingGuide.isVertical) { draggingGuide.pos = worldCoords.x; if (!isShowingPixels) @@ -273,11 +283,11 @@ public class RulersUI extends Actor { shapeRenderer.line(verticalRect.x + verticalRect.width + 1, verticalRect.y, verticalRect.x + verticalRect.width + 1, verticalRect.y + verticalRect.height - rulerBoxSize); //Functional lines to show grid - Vector2 startPoint = new Vector2(horizontalRect.x + rulerBoxSize, verticalRect.y); + Vector2 startPoint = tmp1.set(horizontalRect.x + rulerBoxSize, verticalRect.y); Vector2 worldStartPoint = hereToWorld(startPoint); worldStartPoint.x -= worldStartPoint.x % gridMeasuringSizeInWorld; worldStartPoint.y -= worldStartPoint.y % gridMeasuringSizeInWorld; - Vector2 worldStartPointCpy = new Vector2(worldStartPoint); + Vector2 worldStartPointCpy = tmp2.set(worldStartPoint); Vector2 gridCurrPoint = worldToHere(worldStartPoint); labels.clear(); @@ -311,8 +321,14 @@ public class RulersUI extends Actor { VisLabel label = Pools.obtain(VisLabel.class); label.setColor(TEXT_COLOR); - String lblText = (int) Math.abs(worldStartPointCpy.y + iterator * gridMeasuringSize) + ""; - lblText = verticalize(lblText); + int textNumber = (int) Math.abs(worldStartPointCpy.y + iterator * gridMeasuringSize); + labelTextCache.putIfAbsent(textNumber, ""); + String lblText = labelTextCache.get(textNumber); + if (lblText.equals("")) { + lblText = verticalize(textNumber + ""); + labelTextCache.put(textNumber, lblText); + } + label.setText(lblText); label.setWrap(true); label.setPosition(Gdx.graphics.getWidth() / 2f + verticalRect.x + 3, Gdx.graphics.getHeight() / 2f + gridCurrPoint.y - label.getPrefHeight() / 2); @@ -338,12 +354,12 @@ public class RulersUI extends Actor { } if (guide.isVertical) { - Vector2 localCoords = worldToHere(new Vector2(guide.pos, 0)); + Vector2 localCoords = worldToHere(tmp1.set(guide.pos, 0)); if (localCoords.x > verticalRect.x + verticalRect.width) { shapeRenderer.line(localCoords.x, -Gdx.graphics.getHeight() / 2f, localCoords.x, horizontalRect.y); } } else { - Vector2 localCoords = worldToHere(new Vector2(0, guide.pos)); + Vector2 localCoords = worldToHere(tmp1.set(0, guide.pos)); if (localCoords.y < horizontalRect.y) { shapeRenderer.line(verticalRect.x + verticalRect.getWidth(), localCoords.y, Gdx.graphics.getWidth(), localCoords.y); } @@ -381,13 +397,18 @@ public class RulersUI extends Actor { } } + private final StringBuilder labelVerticalBuilder = new StringBuilder(); + private String verticalize(String text) { - String newText = ""; - for (int i = 0; i < text.length(); i++) { - newText += text.charAt(i) + "\n"; + if (labelVerticalBuilder.length() != text.length() * 2) { + labelVerticalBuilder.setLength(text.length() * 2); + } + for (int i = 0, j = 0; i < text.length(); i++, j+=2) { + labelVerticalBuilder.setCharAt(j, text.charAt(i)); + labelVerticalBuilder.setCharAt(j + 1, '\n'); } - return newText; + return labelVerticalBuilder.toString(); } @Override @@ -405,10 +426,10 @@ public class RulersUI extends Actor { } public Guide guideCollision(float x, float y) { - Vector2 point = new Vector2(x - Gdx.graphics.getWidth() / 2f, y - Gdx.graphics.getHeight() / 2f); + Vector2 point = tmp1.set(x - Gdx.graphics.getWidth() / 2f, y - Gdx.graphics.getHeight() / 2f); point = hereToWorld(point); - Circle touchCircle = new Circle(); + Circle touchCircle = tmpCircle; touchCircle.radius = 3f / Sandbox.getInstance().getPixelPerWU(); touchCircle.setPosition(point.x, point.y); diff --git a/src/main/java/games/rednblack/editor/view/ui/widget/actors/GridView.java b/src/main/java/games/rednblack/editor/view/ui/widget/actors/GridView.java index e4bbaac3..050d84c3 100644 --- a/src/main/java/games/rednblack/editor/view/ui/widget/actors/GridView.java +++ b/src/main/java/games/rednblack/editor/view/ui/widget/actors/GridView.java @@ -43,6 +43,8 @@ public class GridView extends Actor { private int gridSize; int gridLinesCount; + private final Color tmpColor = new Color(); + public GridView() { gridSize = 50; gridLinesCount = 40; @@ -123,7 +125,7 @@ public class GridView extends Actor { if(offsetTmp < 0) offset = (int) -Math.floor(-offsetTmp); i += offset; - Color color = new Color(Color.WHITE); + Color color = tmpColor.set(Color.WHITE); if((gridLinesCount/2 - i - 1) % 4 == 0) { color.a = 0.1f;