From 96e6d1488deb68252f856d53a992742c4ecc2660 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 30 Apr 2017 02:07:58 -0400 Subject: [PATCH] Various additions --- core/assets/sprites/moment.atlas | 238 +++++++------ core/assets/sprites/moment.png | Bin 3877 -> 4043 bytes core/assets/ui/out/button-down.9.png | Bin 227 -> 212 bytes core/assets/ui/out/button-over.9.png | Bin 224 -> 212 bytes core/assets/ui/out/button-select.9.png | Bin 0 -> 175 bytes core/assets/ui/out/button.9.png | Bin 224 -> 206 bytes core/assets/ui/out/clear.png | Bin 0 -> 149 bytes core/assets/ui/out/icon-close-down.png | Bin 328 -> 321 bytes core/assets/ui/out/icon-close-over.png | Bin 328 -> 316 bytes core/assets/ui/out/icon-defense.png | Bin 0 -> 168 bytes core/assets/ui/out/icon-distribution.png | Bin 0 -> 161 bytes core/assets/ui/out/icon-production.png | Bin 0 -> 164 bytes core/assets/ui/out/slider-knob-down.png | Bin 163 -> 173 bytes core/assets/ui/out/slider-knob-over.png | Bin 163 -> 173 bytes core/assets/ui/out/slider-knob.png | Bin 163 -> 175 bytes core/assets/ui/out/slider.png | Bin 135 -> 117 bytes core/assets/ui/out/window.9.png | Bin 227 -> 243 bytes core/assets/ui/uiskin.atlas | 173 ++++++---- core/assets/ui/uiskin.json | 3 +- core/assets/ui/uiskin.png | Bin 27421 -> 23487 bytes core/src/io/anuke/moment/Control.java | 32 +- core/src/io/anuke/moment/Moment.java | 22 +- core/src/io/anuke/moment/UI.java | 324 +++++++++++++----- core/src/io/anuke/moment/resource/Recipe.java | 54 ++- .../src/io/anuke/moment/resource/Section.java | 5 + core/src/io/anuke/moment/world/TileType.java | 79 ++++- 26 files changed, 628 insertions(+), 302 deletions(-) create mode 100644 core/assets/ui/out/button-select.9.png create mode 100644 core/assets/ui/out/clear.png create mode 100644 core/assets/ui/out/icon-defense.png create mode 100644 core/assets/ui/out/icon-distribution.png create mode 100644 core/assets/ui/out/icon-production.png create mode 100644 core/src/io/anuke/moment/resource/Section.java diff --git a/core/assets/sprites/moment.atlas b/core/assets/sprites/moment.atlas index c2793a340a..a396bc9742 100644 --- a/core/assets/sprites/moment.atlas +++ b/core/assets/sprites/moment.atlas @@ -6,14 +6,14 @@ filter: Nearest,Nearest repeat: none block rotate: false - xy: 105, 23 + xy: 117, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bullet rotate: false - xy: 115, 23 + xy: 127, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -27,77 +27,77 @@ circle index: -1 coal1 rotate: false - xy: 125, 23 + xy: 137, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 135, 23 + xy: 147, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 145, 23 + xy: 157, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coaldrill rotate: false - xy: 155, 23 + xy: 167, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor rotate: false - xy: 165, 23 + xy: 177, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyormove rotate: false - xy: 175, 23 + xy: 187, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 core rotate: false - xy: 185, 23 + xy: 197, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 195, 23 + xy: 207, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 205, 23 + xy: 217, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 215, 23 + xy: 227, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirtblock rotate: false - xy: 225, 23 + xy: 237, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -111,7 +111,7 @@ doubleturret index: -1 drill rotate: false - xy: 235, 23 + xy: 247, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -125,21 +125,21 @@ flameturret index: -1 furnace rotate: false - xy: 245, 23 + xy: 25, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 245, 23 + xy: 25, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass rotate: false - xy: 25, 11 + xy: 25, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -153,70 +153,70 @@ healturret index: -1 icon-coal rotate: false - xy: 25, 1 + xy: 35, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-iron rotate: false - xy: 35, 11 + xy: 35, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-steel rotate: false - xy: 35, 1 + xy: 45, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-stone rotate: false - xy: 45, 11 + xy: 45, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron1 rotate: false - xy: 45, 1 + xy: 55, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron2 rotate: false - xy: 55, 11 + xy: 55, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron3 rotate: false - xy: 55, 1 + xy: 65, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill rotate: false - xy: 65, 11 + xy: 65, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ironwall rotate: false - xy: 65, 1 + xy: 75, 11 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laser rotate: false - xy: 135, 9 + xy: 115, 7 size: 1, 12 orig: 1, 12 offset: 0, 0 @@ -236,121 +236,135 @@ machineturret offset: 0, 0 index: -1 mech1 - rotate: false - xy: 75, 11 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -player rotate: false xy: 75, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -router - rotate: false - xy: 85, 11 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -shadow +megahealturret rotate: false xy: 57, 21 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 -shotgunturret +player rotate: false - xy: 69, 21 - size: 10, 10 - orig: 10, 10 + xy: 85, 11 + size: 8, 8 + orig: 8, 8 offset: 0, 0 index: -1 -sniperturret - rotate: false - xy: 81, 21 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -steelconveyor +router rotate: false xy: 85, 1 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -steelconveyormove +shadow rotate: false - xy: 95, 11 - size: 8, 8 - orig: 8, 8 + xy: 69, 21 + size: 10, 10 + orig: 10, 10 offset: 0, 0 index: -1 -stone +shotgunturret rotate: false - xy: 95, 1 - size: 8, 8 - orig: 8, 8 + xy: 81, 21 + size: 10, 10 + orig: 10, 10 offset: 0, 0 index: -1 -stone1 - rotate: false - xy: 105, 13 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stone2 - rotate: false - xy: 105, 3 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stone3 - rotate: false - xy: 115, 13 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stoneblock - rotate: false - xy: 115, 3 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stonedrill - rotate: false - xy: 125, 13 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stonedrillhead - rotate: false - xy: 125, 13 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -stonewall - rotate: false - xy: 125, 3 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -turret +sniperturret rotate: false xy: 93, 21 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 +steelconveyor + rotate: false + xy: 95, 11 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +steelconveyormove + rotate: false + xy: 95, 1 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +steelwall + rotate: false + xy: 105, 11 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stone + rotate: false + xy: 105, 1 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stone1 + rotate: false + xy: 118, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stone2 + rotate: false + xy: 128, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stone3 + rotate: false + xy: 138, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stoneblock + rotate: false + xy: 148, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stonedrill + rotate: false + xy: 158, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stonedrillhead + rotate: false + xy: 158, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +stonewall + rotate: false + xy: 168, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +turret + rotate: false + xy: 105, 21 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 diff --git a/core/assets/sprites/moment.png b/core/assets/sprites/moment.png index 3d553375e465bad81feff09b46cb6da2cd35c9db..66d2049e73d294c47763b124c001be0754976f95 100644 GIT binary patch literal 4043 zcmXX}c{J4h7yis*#@I$EvSdU_*+z>}%vi#dQnpr%(u+5Z$~x9>h&M^dR?^sI$&y`| zX)(6SmNg6^`!bAdgP+d%{d3R#z1WCpQW≺Qh?({ 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 ZF1ASefU!p%edX`3PC9$hAYYFh_&;S-bt3=( literal 3877 zcmXY!c|6p8_r^cpnXwNu;m&@W9&3x+kgbRj-N;h5$~s!?YnHM!W0Vw<-Pn!nSxd3@H`{%sQ`RDv~UFUkA=*wmXyxgMP003SiLwySXpu-kmIN1;D zURm)Z0DKEZ`np!ZKNhp+eTA$=Kj*bN;TL#nebt)E#bn&j1NFnaM`TVulecPEf9Czp zand&YttI{2H!(q5HwE%hw|s>wcGwa9G&Y$02bub;{!x8(^WUOIkCj&XTShv&H*e*( zpDuA_s54o6wvTg+S~5;!+B7+9 ze;OoCCK|YHEDWy=-Hh*T4q?tj%jHt!^6ptgSMT*-#rF>4!z%~sP8kGFcT4Q7e3mRL zER2kaiNWwR_F4E4v_~pBtgWqc3C(z+JULYjjZzgQr9=}IW##i6sJ~S_4)*r~*JjMW z+;7p)shE7@y~DbvuiF-2(@H!i!_W1+qM~qa&g12>Wu>QwM`>N%m9na;r=ntFWtEk2 zcNTwKICt*c+6LX%5|77Ieox7@2zM^?fG8lgAFuj3Wj6fkHlMD%Cd(dBcWYg`EauMy zFnUHB0vwon!Agqw787;fpH_?mMwYKVsM&61EoplA`j!OE4~$v@!}rU>wFX8@^cDi^ z6&&0E)ETT!Y!~eY2)ujuB#=HGjwEGpfYy(kK=^OQZ4aW&1^}UJy#_DpyuQ~80yVE8 z3IK$SVb_k`x>*MTYw-;?a$;h_>dKWUAv+Nf7c$xj)T|L!wQTB4^FLsEJ_2D03FiX4 zu+60+3C%n5`A-NM10y3Q!^6WzUj?t+7*mzbzXh|j8fL%i{GM8?;5@j0v92NcI6D;y z$GyCebC=kwRJ^;cv7@T9fOQ=e-p5TLKLQxfv>su4_MFhlR}@4twI zIVb^_zrnMAd=|r58{UIkNZ3Mh7mxt_2qd6yT@>d6h)`*gJWduWQd&dftM}HMNq7Ma zC$OKW{dICP=kg6qO))oU#}&hISCORPb`4NCD}!tU;CCeE<=}L8j%5gmN9dpWE{H^u zg7iUG))*!^+PMj@9(DXu0v{Oqqb!<$Hv9{i`$I293gJ`~ObPs!DKG^hkRd?mgR_W{ zTnGmkt-&kLcpx7>9GZBsd)2N2kxbFB|_74pk`@0L8K- zE}+bThGQJR!KhWJ{jw)Hg8}az0y(H*LA+q>jZeXJR$8xRwPK$xC2~)r#s80W(R)c` zZ;>&1gh3MEm5-Bs{&=(i8fcTuN=K|moA)+P!uSqEhs{|pXY?+@}oIkXZ-3r=3Gk_Rg4&8qI0o;fkQZuEG>SD6Kgp* z2+lauOM1?B?K-*t{dUSZ+i@7>kCi(HoM88~qDy|#A@0`mcNij-5j8&E-bLQ@x_4V? zQYhry$)73=?)ngl94e@Gj*cY7$E$yTy;A9eph`h!VAL1Cx?w^@vuF zlWFeVq@2bo$F~=C|H3tY0G#$tM9xpHOb*@gFNsnY`482Di5#|jF%*AZ;i~Q zNVjf)EnN~ss#2StIQkU@Q-)!Ak;dgm)J^r5_Lrx-X$r>i-^E@@Bvdm-<3W_#UubU{!K{Z8)2B+-|6f~qnlqMRLmi2 zRBKLZ(Fa_;5HOs|il{kq2}u%ZoIJIg+Ph_*#r7a&q9nUUtAMB~s@3Puvlpf9teK@u+; zpBR6E@u^`$YD^5bvIrjL)R;^PokSl6!2`GXvFx}G^q2XQF(bU!g6kj8@%bjA{em_Y zY<`o!0qClPv#)Rf@aKap`7ev=snmvGvc+j742`FhX?q~g2PoCR6|2K;sw^w%Ws9@tcTI$#h2nU^~X{FWty@1c=JLwq=5?4$4pZ3#fCp=0e>x8J6_(A%4Bn=gQ*WJA=GamBv$|{yUo%2Xl*8knP zyLaw9U*^H&T6BpRDwK_CgO_6}TdBSc3E#pW`KaobWI4{ETs|ekG-)D{`Kb6ic-W;|Ghuxpu&`1$&g_Hnh;?n= zk5yFglFd)gsnw&ld3II%kXO`T7V8}IM8~$^e3(ILbr?q~nLKtHXtdJ*aumPPvm05= z^rOwRTsX}gb$HUeiP0ipHZzY6EQ~Z*LL99e#RshDqcSNh7AsX4WT@!y6j$3T*>O3C zJb^&L``uG&Iy}Iw{91V@Z}L3DRS7tGv6ISRnHGnLAz@Qumh*B5{cIr@e$$m#OEGS# zB~qO2OMuDi)~tGe4|nmbO)9NTcue|4HcM={B0Z2W(~+rDrn;0L_HnB)Y+yN+_70YO z5c)mc)sgK?JnZRTzQa`v;aAWDM4@wQX~cN}gg``_7g09I!-ox)n{r`8@JqC z=wpLKDS6A({oR%Wzu2VxT`xVe43C$RSCu7dd6(v{_1ETlAJ>a?u^N(fy9OeCV1HtN zGFKx%Bex2M(DKHX<0IczJ)9RzA2CNV@o>_VxTOVqI3cm*4rBhSZD?0Bhb228?(b$b z_;e{&qt1Mud4CmOl%F~}=NM}I$?(3}ecGAgr8l>xG!%XWw^_1`fuCT)cRw7#QT!+< zZAWh?gEef99#a@70bvjP(65oujf=-o3#)4vI9b$AztU#4Vzy{6U-^?kk(a8 zkMG$ryGE-20h)nz7-C|O5x^1Os=9G}HL{-S^Wx_|Maa{lAvpK6_FUU!CEuHs^4E!3 zhZA?3*A}rZrXSZXg^U?O+4;&=8-N8>HIK*eC(&ljsrI(LqZ3qks9y3faZAc`>u z$*r}C&WGq@CX<{GY9?_ilL*QaUPRInYX15DpFy4k5vWEaJ3#9Q@F97Ir{(e_fbn_% zFJ1Im0FF@Q#K@sliuqK!#v>^Z(i-}~sd20(;KaXdpe22+eXR7hAhGsDmd9F6?Fp9A zqgd_9Oei1K(5(XY*SlS0+=*O}55LKUU`aMWL}LL48&VD*XLOXL1OklG|X4KigH(Z?&hlxIg1-KhMeLUzjg&1FctO#e@si>CQ@moWzhk4~p-kXqC(oIkw z*8+b8TEA$ub)!J} zmCFCosOjRJR>bv}OcM&H=H%J$qof^Xk|}I^cj=KV$w-`6+7p(ZVxjIN3n+4IruRjL z(1%2q5e4IDuZd*GofwP{ZEa^*1$Ih`0^!8RRoXgWlEDb|KeYD^fIHy07BL;wui}F{ Qe1Cz_1vCAs^G^5w3;)#!&j0`b diff --git a/core/assets/ui/out/button-down.9.png b/core/assets/ui/out/button-down.9.png index a60a4eddbfcc2962a0be76086ecb3bef7b607617..dd54656563f1d48a06bed6171db20c34e02391ba 100644 GIT binary patch delta 166 zcmaFNc!hC-iY8})M`SSr1Gg{;GcwGYBf-GHz+U3%>&pI+MUI8rto|%RDp06+V!UY4 z!~dsd{O2)Y>3QfaF;n6NOWS-`of|CgZ7O{yF4Qtwq^$7bg_OHQ<%wmlnOxiU&3IxZ z<-S;~H_9aI;tE$d<4gW^!$sTQZrFO-tvN5@xBHZD?QV}VDi|2zb_$7Kvsc&&w2i^j L)z4*}Q$iB}qjf)E delta 171 zcmcb@_?U5m3O`$tx4R1i82ohJT|ZG#p(to(q7Q6 P4|0*GtDnm{r-UW|q6kBG diff --git a/core/assets/ui/out/button-over.9.png b/core/assets/ui/out/button-over.9.png index e9a6e1bfbdc932d2352ecc48a84bbb2133994c12..9d1144c6ac9bf5515a14571b577b9a96189b6343 100644 GIT binary patch delta 184 zcmaFBc!hC-N&pI+MUI8rn1A_~S3sd+PZ!6K zh{MS#3cP>Z9~%p;o;b0wvGL(wo&EoLOjw#SXG_eKc)`*(-&N-Zi~PQyeiIjdQktWz z@ZyD(yF}%Q+DEEgJbN$Z*h#rB7VC{N$-21070fUMvA*PAH(a#+?S`$V-J0_fe!EZk g*6#K=qk@59exBf~bJzTq1MO$e*VDx@B;xSf>jya-40u`} ziod)oYTeFU!WaIA{XE z)7O>#A&VTVp;TtwjT1m2KTj9O5Rc=@DF^ue83(XQY~k#+3eZ-@4;f+T%CVg(YQd={wEDG#)(^U$PH(Yexb4!ME&#{XS*cpy1@p0Ka S2=M@#%;4$j=d#Wzp$PybXf<{K literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/button.9.png b/core/assets/ui/out/button.9.png index 3894b3c76b8c1ca3e95793e3829874affbe55e3d..e3f0d440f26a3116a40a4900b951d1b0ddcf2794 100644 GIT binary patch delta 178 zcmaFBc#d&`N&pI+MUI8j@bdicE*?Yc5^?zL^@E%Z20X0~ z#b3&uyHsd3@v()sdgu2h0Zq4~_S@xV_1m0KT$cUx@a;wNzLTf4aTa()7Bet#3xhBt!>l+@pIrhB410EQIWE4m=p;}-gQu&X%Q~loCIICED#8E& literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/icon-close-down.png b/core/assets/ui/out/icon-close-down.png index 58a206c3c21f5bc800269bc6693e070363ba2c18..204c2eb91185a9667d8204f8a0faded988ff2f78 100644 GIT binary patch delta 294 zcmV+>0one@0>J{1B!3BTNLh0L01FcU01FcV0GgZ_00007bV*G`2jK)B1OzAoS|P~* z007`gL_t(o!|j-{5r8lVMH9~rEVR%{S8@x-aSKR?@+y8%Xbm=9i-(NM-GOReEa!vN{D1Nk3}wn?lFFR?Dh_1` zV-jO7KLy|Fb7~Z{;Ke=#xC~+8V_2S(#Oh;QZ}c8Bo78+OGiWi000000Qp0^e~}>|e-{@yGl9SIH~;_u)k#D_R9M69 zn6VLnAPhypa|bQ7(hZ%%4ee~)0xK!-G=>n51X585a{nITe{45QCg*BQ=G9(7O52{Bimf{FT^Vg*B{AclyH zK@7`Lc95%&QSWvIrx?p5kvTmIax?kWPiC)R-5?u-+U*g0{Z$6YB&& WF;oF&g>A|J00001IE(8)on`FZVc(M{W_ zl%rCKN9`WAbwM38wnx41o1c$@XUyaNdSaL~>5Itx3>EZb>VL{4mO1`a?9C9wB*a{P z3I^(PVieTQiysvrG6cp0!~C2iRv)8!yMQXbGD2k%>E(PCjLqcNc`|tg%MV6lFm@k= z=1D<)FtisV=SjJH@n1{|+>5c^3grWs%%@Qs+oSJmGTrI`=A4RWRTAe(xqC6h+fB)Q n_hRBi?CVr)oEk)zTYh33TAEcG=~zIa00000NkvXXu0mjfCf0sQ delta 272 zcmV+r0q_320>}c8Bo78+OGiWi000000Qp0^e~}>|e-{@yEDX2*%>V!Z)k#D_R9M69 zn6VLnAPhypa|bQ7(y1KKsqAdr0xK!-G=>n51X585a{nITe{45QCg*BQ=G9(7O52{Bimf{FT^Vg*B{AclyH zK@7`Lc95%&QSWvIrx?p5kvTmIax?kWPiC)R-5?u-+U*g0{Z$6YB)= W0aMOaf}%SB0000f4aTa()7Bet#3xhBt!>l=#BGa^_Tznm#hr^Udh0Nkqn-$elF{r G5}E+_1~gOv literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/icon-distribution.png b/core/assets/ui/out/icon-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1ea5112eab0de992e5482c138ab97153c51f73 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7Bet#3xhBt!>lK1G;wme-Wd7hErMl$19z@-bXw7Id4mZQ~c9Sqz@8elF{r5}E*N CkT8w_ literal 0 HcmV?d00001 diff --git a/core/assets/ui/out/icon-production.png b/core/assets/ui/out/icon-production.png new file mode 100644 index 0000000000000000000000000000000000000000..2191bedfac5d968da4dbb52d2550d14e4d1bad4f GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7Bet#3xhBt!>lP8O1N1p=#BG&pI+MUI7=T~C-H9w_AF>EamT zaXk6Yexqmh%)AW3%)JLL7|&phb=dSlAd=1Y{dQ^I$AQi6ymF=$R~{fS+IJo7SzIe{ n>$~GSn@U?Lku9bY3>?dOc;c8gCowQ^F)(<#`njxgN@xNA(FHAz delta 106 zcmZ3>xR`N*3O`$tx4R1i82ohJT|ZG#AwXQ*nzOXklLIJd;OXKR;&J@#8Am||1r7!S z70t{y*-Rb>f8JzzbEQ_6+h|(H(WH$LI%3@*>W{e`Pc*aM?%5SFAOk&J{an^LB{Ts5 DnLZ*w diff --git a/core/assets/ui/out/slider-knob-over.png b/core/assets/ui/out/slider-knob-over.png index 8b584c9d3c71bec6a44ae67e33c14b6e4dfa3ae4..dce38136568e767b9771007cf5aa1449c9d6971e 100644 GIT binary patch delta 145 zcmZ3?xR!B(N&pI+MUI7=D_~L0BcPCvr;B5V z$MNJp`;DI2GxIVCGxr|2U_660)?w2Jfk-yn_uHj;9|tzO^U9f4TzP=RXy0|PXK}5- nt?!QSY$|P~M7EepFmNpA;fZ6~oW#Ju#lYa{>gTe~DWM4ffO0QE delta 106 zcmZ3>xR`N*3O`$tx4R1i82ohJT|ZG#AwXQ*n(y_)JF9_$2A(dCAs)xyo^cdpP~c!N zSRz^2lPlzL@aIjYH&<$9xs9fE98KC7p(EA}qW+l6HE}XM`lrl!17x75tDnm{r-UW| DN24Vs diff --git a/core/assets/ui/out/slider-knob.png b/core/assets/ui/out/slider-knob.png index 3defe45dabb73aefa23052b8b92329b0b5c852f7..9e7bd21cc645b54a47acb04d6da17499833ee07d 100644 GIT binary patch delta 147 zcmZ3?xSnx>N&pI+MUI7w^TGxhNuZFQr;B5V z$MNJZU%&o6@4$TEh=a1h7oIdnaf{k-N|9_crC#^9eOz&HF>khHeCP! delta 106 zcmZ3_xR`N*3O`$tx4R1i82ohJT|ZG#AwXQ*nt>gTe~DWM4f D;DIB_ diff --git a/core/assets/ui/out/slider.png b/core/assets/ui/out/slider.png index cb57d188b88d8b8421472b9df32a9ed389d3da4f..7986f4f53bb7d6b9dabaa54e653127335fc413a1 100644 GIT binary patch delta 87 zcmZo?ES;bd$XVbKSzV`0_$>R-47C?w+P;uykl nJvkuw`mggx4jeepFrR_J>=0vXd8^1Npge=8tDnm{r-UW|@jebP0l+XkKU1t}P diff --git a/core/assets/ui/out/window.9.png b/core/assets/ui/out/window.9.png index 68444a860dfbac10785499066ba04aee9646f1bb..8bb4f278ae3ad388d7e6e1d3982578553eb2895c 100644 GIT binary patch delta 215 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 AQUCw| literal 27421 zcmY(qWmuGZv_3pTcc-Kv-O`PMq;xlkfOJVWC>(%mq0_s~dpH}gK6v-kd= zmup~#`SAQ=^}X&DuA(G^iS_~w1Oj2o$x5k#KnTD`Pyh-N@HcUtOcr=U`k){q1$qOr z0{cObwwsE)F_E+7y({_`&wl$uTge2M&7PVpV`8Uh)Jg0U!iOdJHF2FXdi(ePL} z`044RvDt9bb}U$B&JZX;jVjE{ScqH4j54#}wXat5#)dF=dErp|(9R*UruGA|je|DS z`_QhO%wr!eNTJ5s;WsNYV`an3x36A-;a;N7CkwhPuTWW9{CIEiJ>?@Fo=yrfA<+SUR_Uz@4k(Ekhe;Yw98_(F?*Ujvf=MDJ9 zuyL8>%YC1k8Q+2H4rHndmu;nifq}k(0UB}f%s5(^?{RT~gPVKbXDV4!)6$AcOY`#c zL$LxAu5BNM zbu}}iefRENZb1P=k-QS)leINmJ0}LB3l;i!!BuwM=KT84&hr2B5gKWLml;hysX!Nsp)iaI`szya>`GZYY z-I|=5mJXI%(i$6Yl5kvIT@w-$zfPv*hntc_kqds8pbnT3x@efHED?V66ZdP&92ps* ztF>Ffmp6m*U9b4JiG=@mIQaLuzI9?sqpG5=*VB+{u>QU^$ix3!2&7eJ&_9sK0%l}m z%d4&?2;g7#IR8=0&Dgzyv}HahKiMJAhKT@YI_Z}@ zNSJY3$GWc+@bKURvbMGcC4ms&0-^1vOpYtQ*Qb}|{-Oqu0te4*g`XUcMh}SpojX?^ z?AYv5LP)-r2g=LKW7Vku1rV}meTmKVz0!qL2ZoqtCEUGJsla9dTMVZXULl(35(&E< zINDPtv%Gp(F;Ar*rg)J&h{Xi%?DSVs!UALhs;;e_7#jmsyei~G;XuB5Joe{M&iz-q zL5v_Z`T(kPw-SSf*CP8=w~yjf9#IPA_tMGTNp100wOXlZFFrZg(3#wNv-1NG(}hNqeU#}`V%Ngyd`NUk&M(2(RC-%kySvngT{5Gctu1`QqHk}n#^*?QmQf=~p{ z(e*%I5f70a2en;q+ z=11k9LW#}I&GnamH#eW}($NcA`^Qe7J>cJ`0V4h4mz`7lBi(DS2(YgDNIcNZ*BL#q zyp3=2;3k?rDr@Vhv=)B-B)$Vz$T zizxa3^D@62>VbXgEIM{!id@Z^8Szm|6BMGL6-^!rk$lg{LCg^FpD|{GaAFXRZ#s!P zS1f%W#Ys+&B0&eY6I}=kl{>5_YfCfj)u~EuKa+BblQk1qN8UGm(6zZIucj0p-DiT+ zftqS&7i#hC+s0d>B{XbWjWRx@*r$#NCvv6j|H_GDTgm9V%t^mP!&ZQy|GQ)^9&gJ> zrJegzp~vDNRS?n;stG5W#M@0}K`X6HW~Teq!!OYDr!7}sL1V;j-YO0Qt&Y}r8>DqU z9P+`x2yfM2&pZ2-F&k*9HZpP_GPI+HYgCuy*)cdmTEA{+|Gd)sDR!cYpCUhA#(Phs zlu)4duZEj~aL@w?nBlw>zQrXPgc!kV}E`_0SykdBq;$~d9JnTpGC!g&xVo> zB5AGW;T@Zp`u1K{95nLu;3Ai2{BYizJHc@m73*2x?e*S_DeZlhCfWPX4UE`2+t3}& z_8q^^{et{?1rB;M3ymh(yI!6S67gkOJ8|;G_BeF^DcM`*I7U#BB=#8J>L!QxpB77w zd%dnG+tfd#$3ZPg8UAKo3xkobC!`CqR;1bGmHkZ}B#b#bcs?PfDh+(zBlth|MU6q3 zvFC=B5jQy3uj@llLC-dDA_A^g*X`;2d|cd8D_Y~)92+uEd!pqo3;9oSVQ>;8Jk`B9 z1iDbNIX9z>MkdimCu)C?^@}1qZ_lMgRc3E}T8nr(UylELD;nr!;(^ckuX>09?3{7f zteJoWX(LIS9W?Ty(2aFKR=Dny?zCnZl6V6ZAGf`3g8}(}imwVnDf-Ygxf0I#|FCD`QK8{yF-~5?hUy$MFbw$6RVK{PUjqp)=5|s zEn28m(sma8?*`N&zJLij4V?Sw){Z%vPvAhUSZUQQc5{wBCN*6WhQCaIzoh~H-zUoo zzWgQr{XKewVsH!i{-MJy7{#(&R@Q9x{uo;5&gk0RwJ5%=?nwYol98jPV3 z26^0sZ~v9Q%KV{qP5VALJilM0yuk4!^#idIr($o-!TOf*6J8f*XPR1szJ0^HvZQ~V zN~fb1sD4T5)9q4|dwfcYoRN{y(C2?cFZ!bykRsGWN-Fu^8bh$OyotGSel7gqN2P$kWp^AtB+5KYk54^{eVo)_3d7L|y`vcu(Hyc>hONO+Y%p zc8&ZWT^H^7?d#GM)A&x$Lh3e)F<(C!@ZXnbR=DaaKu6vb+Cz%i&Ah9rGm?^ehf=uv z`}3`y4_0gz{^Dq5>a-Q3Gv4?4J-rMwg!#~O@ zl{cv55c5SnypG^ES2l;;n~ohOQq~Hx#+4FwVulP48sIvorl)_^7{M(P$()3$Fa{Q` z=-CjlHFA}ml-IO!YkV8s#z*|m(LoSt=22R{!?q#dxjM%OW|Iw&)}`KbXLfAL}hK$Ryk*vFrC25eN;*t70KKRB&qJp zo}nQjCldjAN#;w_#09<%ttmfFut)GfnWGH+f&XgYa}f4_&F2v8PS(fsp4oQTL$cJj zzTvRboXsv&O~vQ1GHGP={p+DiZ(FiV@Rqk?x`v^mjSUM3a0a&Xm2?keIxkQVj)3H0 zuu@<%L7irB|Meu*o4MDk4*vK0Z#(@_CV4jh6W;SVAn=o%R@xCfJeyje(hHlUiEUOJ zE9hA42V?JwBJ(SccFH?=4UGyrC?D(K9?gSIDNsnv)eiSF zWRkP(;O8Nr`1_ys5bHKLn|F5pmts99MX?l`=#f@`cxxx-(1dymj^_b+dJd)ui?x;H zZ3MrHSoqUiv$1FQ^XXjqx_v!`H@X2H1#4Lsf zqruMQ(MAN|1M>6p`*dLyCl0CfffAre9^GaSr)G=d!cor6&CQs6i7)>DMlC@3P?qNF z`chKb9_1|OVar6pA=IF>vfi)^Uty(H`Ou%Y zurD&A4Q0I?xHd+aot>(WuTGui!jJ@;{t~~q1(MMQh7NJ|G(Nk%GyVVndZL_b6>X7= zzHZW9i`Dps{leq>Lt=3w2l!oWld0}OuTkqOcQ0bLt{BR(sG9r_aiz^uKHieQd#m0w zyp|90Zmb?(s~&9Ys@vk=5vu|=#<86;Zby@K}V%vwO>EAWnq_*+@kw1_ybe>3H_PD+0NSU+=aadej zGBs81^kfC|Ywk+Ic}*So=c>^@h%TT}lYZ@x(BZ_$b^cW@kEF`}kM{)3@C(6N)$em} z#VS*GvTY?rvN1PS7sCM;prrn@4`Vddfv6xb-kFl(O3uYB|MIemjEFa;qaFJ91V9aA z`l;g8$kWgEN!(7@wQNgGyS>SDHj7wCbf$25U z?lR8yNZz_vcKR^W*;2@4X`^n9`|dykW&h2io;N1utepP%JD`BpZw2!QQ`!BziKu9t z*w8&cE?AEtMU1f1zpzXPLX$}5REqQ=p?m}N%Bci#omu9tiuM00CxkQqMCfN=|XwiFL%iIYRWmHyVN;@;Q(iLuAvNB~(E@o-jspYK!1| zcj~=ay_oSkCbZAkooy7fz7j{a|Exd&3ZnjOI=N-HlsCH4LTvmx+Egv0_(Jr@Zw8uh z8T1ZG@DjvD&O)(`bi3&v--ki=5jB9CoTaEHw8AeqT`Ui-MUB~6OI)|$%jwJ= zUOC7^4E}q^d*^>03kEu3`{_}SeDh~iNYun{b_D}R<<3`P&V2sV6yxtuFX0U>D{by_ zVj%+@$H@O}4RViqcQ%sUa)s$bJ4*TOjOZqK@ z!^xe|C544Me8NlGvG-LL!x0Y+aP_DjL?$0GUit%j`*V4C{k@D~+~?Ql^R~Mcm8FHv zxr{D9Pqlxn`6Vu5I~PVj@2harWwI=r3xq!~3K6aD`8H<8i%^gBDPb#bqI#N{z;s+e zMuGyROmc2BT}{K1B`P`{2O$+4Nz@Z(71Rpxv-wAvHLC~K-WF(=OKCt#yOas5Qhn2- zgy4zTpV~(;3ReuV-0t@hj@sS z4V+OyipXx?c-C6Pw(+o9XgH=12}FT z5uU?UB8d19iWEM4rwnez*RYO?bg?FES8w-UV-*eSj?D3BAkkrP|2HGRa6oK_ED=ap z+y+GrTzzeG=h2`VMGN@Z4g?Z7*$~4U!LN3J77OYfpLhDZdmfEa)lAW78Mo z>U~q{MZ`YCc^zatz%M<0^nviNlSw{bK}b2A1WsdLOTbwjrJ&L1@k)S|QtL3UZ{QO*e zERhoJ^j#Y-zXhDE%zJ%_%Q@RU_*76-BqyZ)yj+YWqJ*U-17)m?7kz}N_dp7d70oLW zH(QXv%q9y+ovIFNCIgudPCc+LIOs?(3;xDHWwjNp9$$b{!tRDv1*-6ZMU_s1AU@ct zw^zUoM+aYo1Capi68KQ~nPEdf|DvA^*bJ6K+oPM#uKVFSOy;nI8S4<*HTTD?zi(ix zJUmyVrg-Yb1x9l#PxV?S-(moGL3;itBlPXpNUaiMnDgT6g5;sy+T)v8 z`&Z9)#-srPE(QKuaxz29d^}_S6j0BKwy8_o2 z7+X7bAn{J?UkFA9j3X$>KkUyLA0Yg9jPf$FB$R^rD0Ps*R#B?L@87>q#F;U`a@qV) zCgOvjBC9fdTO$w6>B7riHnYX3@ycUn($Vc`p9Tg8=PUEPzf2>yy0Y^>+Dn!Pi8H=< zvDe>E`i2^(eg86hEXIn|gp6Gyi<|L`its5dHI;fC!v=T17Tz_T#o&esn6a1p&3HL5p-kOSdG z@aWszy4JJ+cSj4@_PYZZW6$;!=mC6Vr6L%|sP%=0Mh&$BPk@8@P}zx9M`BLAZ?KGtd_jS~&6YB^U7s=#N*Q9r^&eV}hUSx4Z;50YTWN>86Q5v3iHqP@89nrHLHnN5Gj zAbon^ty>m%hluus?_(>A^{Ozl9y_QNx8~SrRo`jv2FuYc>T&pUO)Ad1<9=x!me)^0 z&HJJfA&Jda_+Tx|t2y*ON_X)5#unz?ZR;5X)j8*#8sK5((IcH;q!#I9A86!9-nU+BD|oF;^^EMG=Vhf zPcJr{D@5jx+{uBIP`b;`Uk#>_)k>e-#2%3IS`Pu({e#Q&#V)t2-;)kpeyA$Gl4+N? z7BV4~*;~)hFDL$+iP|ABDvYl7P3N^suYOjcpBJ5zCq(IZN-S9Th;MMdy!-{iSu-Z- z?AHH17E~3}Quq1AT(H^l6OALaF(&_lp>q`y}yQHmDF03nG-25V74|E>KU` zHQaHI`G@ev9((r~a?0jdyJ+7Pdirj|<1v~oSkH1Ju!dl`)n)ENHQkc=Wx|UE{K0!{ z4Q_i|uuxV-wICJ58S*nITc$Sd^lkpQ-=7sN8%&DTv0swa+N~X<^5WBMr^1>sxRZ#) zK6qqbfAJ=rak_mzO28#Hyet%#v-zTQ9flv6=(6qSO#5S2mwkoOu3kk;*kxRAm@}GZAQH8do}XiB!<1R!f#v;v(Y7Krg#M*)r+wIHp%rv<4>d zC%Yz8VR%`YueYgZ^297$u~JXOe+-1RHp9Q><}NBOY5#mr!foB1OF!sC^A0E)n+@~RrM(dq++NjDWK#(o zNgkFUBZ=@l-}+-Q`~t+z{>Usi^#RJqO>Y=&2VHB$V$zg^j`}~j*g~;jF@KxHA8GxK zZ&yGMK);cC>zMQD)nb8@J z#i_-H$^tX-o|%!IT)F+kWZ~zz@S-47l{CnRvotBPX4hyxJ3gY=*ATD7 zAZ3pEPt$QLSr=zE;+6g1?QIvJz-B0!;=%|9nr&*9b9ZM<;7t${r#ambA;W zJgxTxv&R1LN#>?dLt?2Coj-3Wou3n6ATj?&QyI9~{`C#`b}!7#9pu`6PwtB10b;P7 ziFHcfedn?cs;f&}roir__~nOFJO=86`st*1!k{++uI zieogiAMeU*dU+IM&2{~Ae}8?i38WOr{GtPW>$}x{C**8wY-^j~@$z#-^fL3F2*~Ek zXAt4JjAdH)NhfV5b9@i8L_pj?b`)8Wk%lKhe?X|`4S`$zYCfBidwd<>KT>Y){)9%&OhBlR+7mcO4>=iBXs2I8}_S(!H$^wY>!MbF{2 zzTjdzgD={qyoIQI7HaMfw9meN{W|nhI2l6apNdcnG6nwao$&NtY&7Lo)HpZpH0d?g zr7+^T?1b!tXv@Ntnv5d#0?>|RDAw1neq(JQS2D(gAYcbc@+R-6A94*r~M2TC~xz(G1p~QjBOx7xUT?n@FW#UY#pt5O) zrm1CJ42+&Z?!R>X7qh2`dXDQCQ;69Rmt4&cXT**AUvDS@GPRy=f zXTM2xT<6;47v6X0IE8vm4`eST|e#@(G4P{94*vtyR;_$B$vPeY*^DX)IGNdB}y{870+i`Qlb2L*vsv1-=c zxv$b>snHeCfVyW?WKpZ!h>gPmuv-ApFhnw$pNCA}^6>Fdjwb&mgfJ~5t->6K0=ts& z`r!HC$0Nn~*S?^>$9`H4#HUe#7x}YS&cn~^=;(jo+E1!0_((VeL(~b}sNjT$V84+$ znM)2#5X?pq9NG(n<^NXiE?)zn!_KUe!~L_n)JvR`M6>y;Ldzxu0l}Nc&*>->;UdAN zB33E&OOy+V`w<>iy&uyIybo(o6G@#NwYA*%LsJht`pYV+8+b#$mC`Gv%X;3jYx1~m z#UeLyusIwl%WM{uzCKj4HP6o-N>5LB6#p`FA%g~!FJgatN|$U9v~mnNbPG)Y!AN~% zLMJ!?G+kh9V&bhnRJErYaDRiU7es#*j^TZ?@oN37KlL>M_mjx zqrizAWuQKpLYn01R)dqOfq=?DXf#)e{dP>`@azb!;(e}u9ItWHV&rU%!L38MLuvfSQ8APyxN3cJ`AeQ& z?HBg%LJ>Fo2!EuccwU%q3!sv3Iycx)=pAdxm!hHe07Zc*iB8g2HMHcxOV3i*+}vi< znG#)?%gO2+KvCz~U=r`?hWg?>84+bDSVCCAQ+D!9Xz1ugWn!{#I(~e^%hIrU1brja zoZ4;Q1<>r`guCxEcXD|IK-485BvjQTj9FBPs9I!WIin~~5Hhs!6&j;!o1UR|01B>W zP448{s707uS{^*T4r}3iVo%2jVu0UX`?28A&eZ~YgRyqE-Ts|}z5aXV<9gkrSOZBX zY_nZHeFuJAKCo@=%kKUzX$Ht3L1G%;srl)eZ=#7u{zhEt7z+*2l$ufYWLb&MlZkb( zU6nfI2Cf1D<&|ax+P)zA23?Anuh&Gh@a^CD4Q5b4r$jpA?;Ppq{H{dL9uq^HHimmN z^ZU9G1KbP#MYA_=-pG=;A<44O#%ruhdddu&eu()Bg_xRKFi>cX8pSprBZ*xiw_}rB(;Tt|fTK8%M^!)CxgFpgIZx$AI;98i0>e zYX`7#GO{eiiFEb$3FV6r_4XMeBO^V}`Wa}y!oHltEAt(C{tT*WMd=T{*NB_Vt*rbW zO~zko+Jyuf5xq7T5!_C9%>4yM2^KDq{k!~Fe?5NcWw^P3_N=!8A}x90qlq8$itCRz zz8sU0F6JX4OH-NxM2?R8d-AJW7w-S@Tw<8S@5BoOX#-LP-u0Gdd2@mV$IxLT! zq{m+RNzHEQXx5J2dHNcsnN$7~74i_eSg0HuJj!dn<-l)su#Y=*%BI!dh�?4Jaa}*XLcUC;iDj& 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 Draw.circle(e.x, e.y, 3f + e.ifract() * 3f); Draw.clear(); }); + + Effect.addDraw("spawn", 23, e -> { + Draw.thickness(2f); + Draw.color(Hue.mix(Color.DARK_GRAY, Color.SCARLET, e.ifract())); + Draw.circle(e.x, e.y, 7f - e.ifract() * 6f); + Draw.clear(); + }); Effect.addDraw("ind", 100, e -> { Draw.thickness(3f); @@ -210,10 +217,16 @@ public class Control extends RendererModule{ return Mathf.scl2(UGraphics.mouseWorldPos().y, TileType.tilesize); } - boolean validPlace(int x, int y, TileType tile){ + boolean validPlace(int x, int y, TileType type){ if(!cursorNear()) return false; + + for(Tile spawn : main.spawnpoints){ + if(Vector2.dst(x * tilesize, y * tilesize, spawn.worldx(), spawn.worldy()) < main.spawnspace){ + return false; + } + } for(SolidEntity e : Entities.getNearby(x * tilesize, y * tilesize, tilesize * 2f)){ Rectangle.tmp.setSize(e.hitsize); @@ -223,7 +236,7 @@ public class Control extends RendererModule{ return false; } } - return main.tiles[x][y].block() == TileType.air; + return main.tile(x, y).block() == TileType.air; } boolean cursorNear(){ @@ -234,7 +247,12 @@ public class Control extends RendererModule{ public void update(){ if(Gdx.input.isKeyJustPressed(Keys.ESCAPE)) Gdx.app.exit(); - + + if(!main.playing){ + clearScreen(); + return; + } + Entities.update(); input(); @@ -312,11 +330,19 @@ public class Control extends RendererModule{ vector.set(7, 0).rotate(main.rotation * 90); Draw.line(x, y, x + vector.x, y + vector.y); } + + Draw.thickness(1f); + Draw.color("scarlet"); + for(Tile spawn : main.spawnpoints){ + Draw.dashcircle(spawn.worldx(), spawn.worldy(), main.spawnspace); + } if(valid) Cursors.setHand(); else Cursors.restoreCursor(); + + Draw.clear(); } //block breaking diff --git a/core/src/io/anuke/moment/Moment.java b/core/src/io/anuke/moment/Moment.java index f9b3564555..d2b9a0aed2 100644 --- a/core/src/io/anuke/moment/Moment.java +++ b/core/src/io/anuke/moment/Moment.java @@ -15,6 +15,7 @@ import io.anuke.moment.world.TileType; import io.anuke.ucore.core.KeyBinds; import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.UInput; +import io.anuke.ucore.entities.Effects; import io.anuke.ucore.modules.ModuleController; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Timers; @@ -31,10 +32,13 @@ public class Moment extends ModuleController{ public float placerange = 60; public int wave = 1; - public float wavespace = 2000/100; + public float wavespace = 1000; public float wavetime = wavespace; + public float spawnspace = 65; public Tile core; public Array spawnpoints = new Array(); + + public boolean playing = false; @Override public void init(){ @@ -78,14 +82,20 @@ public class Moment extends ModuleController{ public void update(){ super.update(); + if(!playing) return; + if(Enemy.amount == 0) - wavetime -= delta(); + wavetime -= delta(); if(wavetime < 0 || UInput.keyUp(Keys.F)){ runWave(); } } + public void play(){ + playing = true; + } + public void coreDestroyed(){ //TODO "you lose" message or something } @@ -126,7 +136,9 @@ public class Moment extends ModuleController{ Tile tile = spawnpoints.get(point); Timers.run((int)(i/spawnpoints.size)*40f, ()->{ - new Enemy(point).set(tile.worldx(), tile.worldy()).add(); + Enemy e = new Enemy(point).set(tile.worldx(), tile.worldy()); + Effects.effect("spawn", e); + e.add(); }); } @@ -140,10 +152,6 @@ public class Moment extends ModuleController{ return tiles[x][y]; } - public Tile spawn(){ - return tiles[size/2][size-1]; - } - public void addItem(Item item, int amount){ items.put(item, items.get(item, 0)+amount); get(UI.class).updateItems(); diff --git a/core/src/io/anuke/moment/UI.java b/core/src/io/anuke/moment/UI.java index 7d065e223e..04c9ca7599 100644 --- a/core/src/io/anuke/moment/UI.java +++ b/core/src/io/anuke/moment/UI.java @@ -2,13 +2,13 @@ package io.anuke.moment; import static io.anuke.moment.world.TileType.tilesize; +import java.util.function.BooleanSupplier; + import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.utils.Align; +import com.badlogic.gdx.utils.Array; import io.anuke.moment.entities.Enemy; -import io.anuke.moment.resource.Item; -import io.anuke.moment.resource.ItemStack; -import io.anuke.moment.resource.Recipe; +import io.anuke.moment.resource.*; import io.anuke.moment.world.Tile; import io.anuke.moment.world.TileType; import io.anuke.ucore.core.Draw; @@ -17,60 +17,197 @@ import io.anuke.ucore.modules.SceneModule; import io.anuke.ucore.scene.builders.*; import io.anuke.ucore.scene.style.Styles; import io.anuke.ucore.scene.ui.*; +import io.anuke.ucore.scene.ui.layout.Stack; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Mathf; public class UI extends SceneModule{ Table itemtable; - - public UI(){ + PrefsDialog prefs; + KeybindDialog keys; + Dialog about; + + BooleanSupplier play = () -> { + return main.playing; + }; + + BooleanSupplier nplay = () -> { + return !main.playing; + }; + + public UI() { Styles.styles.font().setUseIntegerPositions(false); TooltipManager.getInstance().animations = false; + + Dialog.closePadR = -1; + Dialog.closePadT = 4; } - + @Override public void update(){ - scene.getBatch().setProjectionMatrix(get(Control.class).camera.combined); - scene.getBatch().begin(); - Tile tile = main.tiles[tilex()][tiley()]; - if(tile.block() != TileType.air){ - String error = tile.block().error(tile); - if(error != null){ - Draw.tcolor(Color.SCARLET); - Draw.tscl(1/8f); - Draw.text(error, tile.worldx(), tile.worldy()+tilesize); - - }else if(tile.block().name().contains("turret")){ - Draw.tscl(1/8f); - Draw.tcolor(Color.GREEN); - Draw.text("Ammo: " + tile.entity.shots, tile.worldx(), tile.worldy()-tilesize); + + if(main.playing){ + scene.getBatch().setProjectionMatrix(get(Control.class).camera.combined); + scene.getBatch().begin(); + Tile tile = main.tiles[tilex()][tiley()]; + if(tile.block() != TileType.air){ + String error = tile.block().error(tile); + if(error != null){ + Draw.tcolor(Color.SCARLET); + Draw.tscl(1 / 8f); + Draw.text(error, tile.worldx(), tile.worldy() + tilesize); + + }else if(tile.block().name().contains("turret")){ + Draw.tscl(1 / 8f); + Draw.tcolor(Color.GREEN); + Draw.text("Ammo: " + tile.entity.shots, tile.worldx(), tile.worldy() - tilesize); + } + + Draw.tscl(0.5f); + Draw.clear(); } + scene.getBatch().end(); + }else{ - Draw.tscl(0.5f); - Draw.clear(); } - scene.getBatch().end(); super.update(); } - + @Override public void init(){ - + + prefs = new PrefsDialog("Settings"); + + prefs.sliderPref("screenshake", "Screen Shake", 4, 0, 12, i -> { + return (i / 4f) + "x"; + }); + + /* + * prefs.sliderPref("difficulty", "Difficulty", 1, 0, 3, i->{ return + * (i/3f) + "x"; }); + */ + + keys = new KeybindDialog(); + + about = new Dialog("About"); + about.getContentTable().add("Made by Anuken for the" + "\nGDL Metal Monstrosity jam." + "\nTools used:"); + about.addCloseButton(); + build.begin(scene); - + new table(){{ abottom(); aright(); - + new table(){{ - + get().background("button"); + int rows = 3; + int maxcol = 0; + float size = 46; + + Stack stack = new Stack(); + ButtonGroup group = new ButtonGroup<>(); + Array recipes = new Array(); + + for(Section sec : Section.values()){ + recipes.clear(); + Recipe.getBy(sec, recipes); + maxcol = Math.max((int)((float)recipes.size/rows+1), maxcol); + } + + + for(Section sec : Section.values()){ + recipes.clear(); + Recipe.getBy(sec, recipes); + + ImageButton button = new ImageButton("icon-"+sec.name(), "toggle"); + add(button).size(size).height(size+8); + button.getImageCell().size(40).padBottom(4); + group.add(button); + + Table table = new Table(); + + int i = 0; + + for(Recipe r : recipes){ + ImageButton image = new ImageButton(Draw.region(r.result.name()), "select"); + + image.clicked(()->{ + main.recipe = r; + }); + + table.add(image).size(size+8).pad(4); + image.getImageCell().size(size); + + image.update(()->{ + image.setChecked(main.recipe == r); + image.setDisabled(!main.hasItems(r.requirements)); + }); + + if(i % rows == rows-1) + table.row(); + + i++; + + String description = r.result.description(); + if(r.result.ammo != null){ + description += "\n[SALMON]Ammo: " + r.result.ammo.name(); + } + + Table tiptable = new Table(); + tiptable.background("button"); + tiptable.add("[PURPLE]" + r.result.name(), 0.75f).left().padBottom(2f); + + ItemStack[] req = r.requirements; + for(ItemStack s : req){ + tiptable.row(); + tiptable.add("[YELLOW]" + s.amount + "x " + s.item.name(), 0.5f).left(); + } + + tiptable.row(); + tiptable.add().size(10); + tiptable.row(); + tiptable.add("[ORANGE]" + description).left(); + tiptable.pad(10f); + + Tooltip tip = new Tooltip(tiptable); + tip.setInstant(true); + + image.addListener(tip); + } + + //additional padding + for(int j = 0; j < maxcol - (int)((float)recipes.size/rows+1); j ++){ + table.row(); + table.add().size(size); + } + + table.setVisible(()->{ + return button.isChecked(); + }); + + stack.add(table); + } + + + row(); + add(stack).colspan(3); + + /* for(Recipe r : Recipe.values()){ Image image = new Image(Draw.region(r.result.name())); - new button(r.result.name(), ()->{ + get().add(image).size(40); + + if(i % rows == rows-1) + row(); + + i++; + /* + new button(r.result.name(), () -> { main.recipe = r; }){{ get().clearChildren(); @@ -84,98 +221,131 @@ public class UI extends SceneModule{ ItemStack[] req = r.requirements; for(ItemStack stack : req){ table.row(); - table.add("[YELLOW]"+stack.amount +"x " +stack.item.name()).left(); + table.add("[YELLOW]" + stack.amount + "x " + stack.item.name()).left(); } get().getLabel().setAlignment(Align.left); - + String description = r.result.description(); if(r.result.ammo != null){ description += "\n[SALMON]Ammo: " + r.result.ammo.name(); } - + Table tiptable = new Table(); tiptable.background("button"); - tiptable.add("[PURPLE]"+r.result.name(), 0.5f).left().padBottom(2f); + tiptable.add("[PURPLE]" + r.result.name(), 0.5f).left().padBottom(2f); tiptable.row(); - tiptable.add("[ORANGE]"+description).left(); - tiptable.pad(8f); - + tiptable.add("[ORANGE]" + description).left(); + tiptable.pad(10f); + Tooltip tip = new Tooltip(tiptable); tip.setInstant(true); - + get().addListener(tip); - + Recipe current = r; - get().update(()->{ + get().update(() -> { get().setDisabled(!main.hasItems(current.requirements)); - //get().setTouchable(!main.hasItems(current.requirements) ? Touchable.disabled : Touchable.enabled); }); - - }}.width(220f); + + }}.width(234f); - row(); + //row(); } - - get().pad(20f); + */ + + get().pad(10f); }}.right().bottom(); - + + get().setVisible(play); + }}.end(); - + new table(){{ atop(); aleft(); itemtable = new table().top().left().get(); itemtable.background("button"); + + get().setVisible(play); }}.end(); - + //wave table... new table(){{ atop(); aright(); - + new table(){{ - get().background("button"); - - new label("Wave 1"){{ - get().setFontScale(1f); - get().update(()->{ - get().setText("[YELLOW]Wave " + Moment.i.wave); - }); - }}.left(); - - row(); - - new label("Time"){{ - get().update(()->{ - get().setText(Enemy.amount > 0 ? - Enemy.amount+" Enemies remaining" : "New wave in " + (int)(main.wavetime/60f)); - }); - }}.minWidth(150); - - get().pad(8); - }}; + get().background("button"); + + new label("Wave 1"){{ + get().setFontScale(1f); + get().update(() -> { + get().setText("[YELLOW]Wave " + Moment.i.wave); + }); + }}.left(); + + row(); + + new label("Time"){{ + get().update(() -> { + get().setText(Enemy.amount > 0 ? Enemy.amount + " Enemies remaining" : "New wave in " + (int) (main.wavetime / 60f)); + }); + }}.minWidth(150); + + get().pad(12); + }}; + + get().setVisible(play); }}.end(); - - + + //menu table + new table(){{ + float w = 200; + + new button("Play", () -> { + main.play(); + }).width(w); + + row(); + + new button("Settings", () -> { + prefs.show(scene); + }).width(w); + + row(); + + new button("Controls", () -> { + keys.show(scene); + }).width(w); + + row(); + + new button("About", () -> { + about.show(scene); + }).width(w); + + get().setVisible(nplay); + }}; + updateItems(); - + build.end(); } - + public void updateItems(){ itemtable.clear(); - + for(Item stack : main.items.keys()){ Image image = new Image(Draw.region("icon-" + stack.name())); - Label label = new Label(""+ main.items.get(stack)); + Label label = new Label("" + main.items.get(stack)); label.setFontScale(1f); itemtable.add(image).size(32); itemtable.add(label); itemtable.row(); } } - + float roundx(){ return Mathf.round2(UGraphics.mouseWorldPos().x, TileType.tilesize); } diff --git a/core/src/io/anuke/moment/resource/Recipe.java b/core/src/io/anuke/moment/resource/Recipe.java index 74875a3c51..030a00a771 100644 --- a/core/src/io/anuke/moment/resource/Recipe.java +++ b/core/src/io/anuke/moment/resource/Recipe.java @@ -1,34 +1,54 @@ package io.anuke.moment.resource; +import static io.anuke.moment.resource.Section.*; + +import com.badlogic.gdx.utils.Array; + import io.anuke.moment.world.TileType; public enum Recipe{ - stonewall(TileType.stonewall, stack(Item.stone, 4)), - ironwall(TileType.ironwall, stack(Item.iron, 4)), - drill(TileType.stonedrill, stack(Item.stone, 5)), - irondrill(TileType.irondrill, stack(Item.stone, 30)), - coaldrill(TileType.coaldrill, stack(Item.stone, 30), stack(Item.iron, 30)), - conveyor(TileType.conveyor, stack(Item.stone, 1)), - fastconveyor(TileType.steelconveyor, stack(Item.steel, 1)), - router(TileType.router, stack(Item.stone, 3)), - smelter(TileType.smelter, stack(Item.stone, 40), stack(Item.iron, 40)), - healturret(TileType.healturret, stack(Item.iron, 20)), - turret(TileType.turret, stack(Item.stone, 4)), - dturret(TileType.doubleturret, stack(Item.stone, 6)), - machineturret(TileType.machineturret, stack(Item.iron, 10), stack(Item.stone, 6)), - shotgunturret(TileType.shotgunturret, stack(Item.iron, 10), stack(Item.steel, 8)), - flameturret(TileType.flameturret, stack(Item.iron, 12), stack(Item.steel, 12)), - sniperturret(TileType.sniperturret, stack(Item.iron, 15), stack(Item.steel, 20)); + stonewall(distribution, TileType.stonewall, stack(Item.stone, 4)), + ironwall(distribution, TileType.ironwall, stack(Item.iron, 4)), + steelwall(distribution, TileType.steelwall, stack(Item.steel, 4)), + conveyor(distribution, TileType.conveyor, stack(Item.stone, 1)), + fastconveyor(distribution, TileType.steelconveyor, stack(Item.steel, 1)), + router(distribution, TileType.router, stack(Item.stone, 3)), + + healturret(defense, TileType.healturret, stack(Item.iron, 30)), + megahealturret(defense, TileType.megahealturret, stack(Item.iron, 30), stack(Item.steel, 30)), + + turret(defense, TileType.turret, stack(Item.stone, 4)), + dturret(defense, TileType.doubleturret, stack(Item.stone, 6)), + machineturret(defense, TileType.machineturret, stack(Item.iron, 10), stack(Item.stone, 6)), + shotgunturret(defense, TileType.shotgunturret, stack(Item.iron, 10), stack(Item.steel, 8)), + flameturret(defense, TileType.flameturret, stack(Item.iron, 12), stack(Item.steel, 12)), + sniperturret(defense, TileType.sniperturret, stack(Item.iron, 15), stack(Item.steel, 20)), + + drill(production, TileType.stonedrill, stack(Item.stone, 5)), + irondrill(production, TileType.irondrill, stack(Item.stone, 30)), + coaldrill(production, TileType.coaldrill, stack(Item.stone, 30), stack(Item.iron, 30)), + smelter(production, TileType.smelter, stack(Item.stone, 40), stack(Item.iron, 40)); public TileType result; public ItemStack[] requirements; + public Section section; - private Recipe(TileType result, ItemStack... requirements){ + private Recipe(Section section, TileType result, ItemStack... requirements){ this.result = result; this.requirements = requirements; + this.section = section; } private static ItemStack stack(Item item, int amount){ return new ItemStack(item, amount); } + + public static Array getBy(Section section, Array r){ + for(Recipe recipe : Recipe.values()){ + if(recipe.section == section) + r.add(recipe); + } + + return r; + } } diff --git a/core/src/io/anuke/moment/resource/Section.java b/core/src/io/anuke/moment/resource/Section.java new file mode 100644 index 0000000000..b138c84140 --- /dev/null +++ b/core/src/io/anuke/moment/resource/Section.java @@ -0,0 +1,5 @@ +package io.anuke.moment.resource; + +public enum Section{ + defense, production, distribution; +} diff --git a/core/src/io/anuke/moment/world/TileType.java b/core/src/io/anuke/moment/world/TileType.java index d25106e4ee..3628e04222 100644 --- a/core/src/io/anuke/moment/world/TileType.java +++ b/core/src/io/anuke/moment/world/TileType.java @@ -22,16 +22,16 @@ public enum TileType{ public void draw(Tile tile){ } }, - grass, stone, dirt, iron, coal, dirtblock(true), stoneblock(true), stonewall(true, true){ - { - health = 50; - } - }, - ironwall(true, true){ - { - health = 80; - } - }, + grass, + stone, + dirt, + iron, + coal, + dirtblock(true), + stoneblock(true), + stonewall(true, true){{health = 50;}}, + ironwall(true, true){{health = 80;}}, + steelwall(true, true){{health = 110;}}, stonedrill(true, true){ public void update(Tile tile){ @@ -416,7 +416,7 @@ public enum TileType{ healturret(true, true, false){ { range = 30; - reload = 30f; + reload = 40f; health = 50; } @@ -447,17 +447,65 @@ public enum TileType{ float x = tile.worldx(), y = tile.worldy(); float x2 = tile.entity.link.x, y2 = tile.entity.link.y; - Draw.color(Hue.rgb(138, 244, 138, (MathUtils.sin(Timers.time() / 2f) + 1f) / 15f)); + Draw.color(Hue.rgb(138, 244, 138, (MathUtils.sin(Timers.time()) + 1f) / 14f)); Draw.alpha(0.3f); Draw.thickness(4f); Draw.line(x, y, x2, y2); Draw.thickness(2f); - Draw.circle(x2, y2, 2f); + Draw.rect("circle", x2, y2, 7f, 7f); Draw.alpha(1f); Draw.thickness(2f); Draw.line(x, y, x2, y2); Draw.thickness(1f); - Draw.circle(x2, y2, 1f); + Draw.rect("circle", x2, y2, 5f, 5f); + Draw.clear(); + } + Draw.rect(name(), tile.worldx(), tile.worldy(), tile.entity.rotation - 90); + } + + public String description(){ + return "Heals nearby tiles."; + } + }, + megahealturret(true, true, false){ + { + range = 30; + reload = 25f; + health = 60; + } + + public void update(Tile tile){ + tile.entity.link = findTileTarget(tile, range); + + if(tile.entity.link != null){ + tile.entity.rotation = tile.entity.angleTo(tile.entity.link); + + if(Timers.get(tile, reload)){ + tile.entity.link.health++; + } + } + } + + public void draw(Tile tile){ + Draw.rect("block", tile.worldx(), tile.worldy()); + } + + public void drawOver(Tile tile){ + if(tile.entity.link != null){ + float x = tile.worldx(), y = tile.worldy(); + float x2 = tile.entity.link.x, y2 = tile.entity.link.y; + + Draw.color(Hue.rgb(132, 242, 242, (MathUtils.sin(Timers.time()) + 1f) / 13f)); + Draw.alpha(0.3f); + Draw.thickness(4f); + Draw.line(x, y, x2, y2); + Draw.thickness(2f); + Draw.rect("circle", x2, y2, 7f, 7f); + Draw.alpha(1f); + Draw.thickness(2f); + Draw.line(x, y, x2, y2); + Draw.thickness(1f); + Draw.rect("circle", x2, y2, 5f, 5f); Draw.clear(); } Draw.rect(name(), tile.worldx(), tile.worldy(), tile.entity.rotation - 90); @@ -558,7 +606,8 @@ public enum TileType{ Array array = Entities.getNearby(tile.worldx(), tile.worldy(), 100); for(Entity e : array){ - + if(e == tile.entity) continue; + if(e instanceof TileEntity && ((TileEntity) e).health < ((TileEntity) e).tile.block().health){ float ndst = Vector2.dst(tile.worldx(), tile.worldy(), e.x, e.y); if(ndst < range && (closest == null || ndst < dst)){