From 0e8204b2433926b24986f995b49ba7fc13bcb5c5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 17 Sep 2017 15:41:49 -0400 Subject: [PATCH] Added block description panel, disabled deselecting, updated uCore --- build.gradle | 3 +- core/assets-raw/sprites/titanium1.png | Bin 0 -> 251 bytes core/assets-raw/sprites/titanium2.png | Bin 0 -> 246 bytes core/assets-raw/sprites/titanium3.png | Bin 0 -> 243 bytes core/assets-raw/sprites/titaniumblock.png | Bin 0 -> 185 bytes core/assets-raw/sprites/titaniumdrill.png | Bin 0 -> 252 bytes core/assets-raw/ui/icon-menu.png | Bin 0 -> 191 bytes core/assets-raw/ui/icon-pause.png | Bin 0 -> 175 bytes core/assets-raw/ui/icon-settings.png | Bin 0 -> 213 bytes core/assets/sprites/sprites.atlas | 45 +++- core/assets/sprites/sprites.png | Bin 6863 -> 7130 bytes core/assets/ui/uiskin.atlas | 31 ++- core/assets/ui/uiskin.json | 2 +- core/assets/ui/uiskin.png | Bin 12218 -> 12344 bytes core/src/io/anuke/mindustry/Control.java | 4 +- core/src/io/anuke/mindustry/Renderer.java | 6 +- core/src/io/anuke/mindustry/UI.java | 193 +++++++++--------- core/src/io/anuke/mindustry/input/Input.java | 11 +- core/src/io/anuke/mindustry/io/SaveIO.java | 2 +- .../src/io/anuke/mindustry/resource/Item.java | 2 +- core/src/io/anuke/mindustry/world/Block.java | 4 +- .../anuke/mindustry/world/blocks/Blocks.java | 12 +- .../mindustry/world/blocks/Conveyor.java | 2 +- .../world/blocks/ProductionBlocks.java | 19 ++ .../mindustry/world/blocks/RepairTurret.java | 2 +- .../anuke/mindustry/world/blocks/Turret.java | 2 +- .../mindustry/world/blocks/WeaponBlocks.java | 8 + 27 files changed, 219 insertions(+), 129 deletions(-) create mode 100644 core/assets-raw/sprites/titanium1.png create mode 100644 core/assets-raw/sprites/titanium2.png create mode 100644 core/assets-raw/sprites/titanium3.png create mode 100644 core/assets-raw/sprites/titaniumblock.png create mode 100644 core/assets-raw/sprites/titaniumdrill.png create mode 100644 core/assets-raw/ui/icon-menu.png create mode 100644 core/assets-raw/ui/icon-pause.png create mode 100644 core/assets-raw/ui/icon-settings.png diff --git a/build.gradle b/build.gradle index 4ddfbb579e..1e7b9188ea 100644 --- a/build.gradle +++ b/build.gradle @@ -79,8 +79,7 @@ project(":core") { apply plugin: "java" dependencies { - //compile fileTree(dir: '../core/lib', include: '*.jar') - compile 'com.github.anuken:ucore:627f0c756d' + compile 'com.github.anuken:ucore:532dc82873' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/assets-raw/sprites/titanium1.png b/core/assets-raw/sprites/titanium1.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf051540b704e32a5bcc7a76f8332828e6a7b48 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4kiW$2Jc+WI}8jAoCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$JAa0S@bly&nP?7#Ji=Tq8=H^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5* z!W;R-85kH!JzX3_IIhR`9pr5>;9*hEYcTfW7MWUJC*s1L*%+6hc&Uvk;9X*2|L4=2 zrPj~MT5CML|97qIJ3Y+{cVs0lZF)PY!GZbObC!3nJ4$NLU777UX-XCIv|RQ_=PHih zU2JgS-x0;u6yxdhXH<3j9Y~UXZ-3y7>m_mB1@>1K)wV=4FfcH9y85}Sb4q9e02KyT A5dZ)H literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/titanium2.png b/core/assets-raw/sprites/titanium2.png new file mode 100644 index 0000000000000000000000000000000000000000..9aad0c978f56fd942d4c5eab5eb967c02bfe1749 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4kiW$2Jc+WI}8jAoCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$JAa0Ztj+IVDvL3=EPbt`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#zt?w-B@ z;f;La3=9kfo-U3d9M@g@4hkMJ5MaKpSieYeyMz9g2ixmKo`?lai9S)VgYl4a!k1ka zUu^N(8df(+L~vjDgEOo*mb`d-CUvq~{^=6;{B!%18cb!a4f<}j&t=_lPmb-zRF#*} vtUhbD?zrMF_vxIf(mx*0^QZ6bWRYKDt$!geQv5js0|SGntDnm{r-UW|&hS)Y literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/titanium3.png b/core/assets-raw/sprites/titanium3.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f1ed80a3a656de7424cd7e033e599fa05f5980 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4kiW$2Jc+WI}8jAoCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`$JAa0ZtXxd1sz5Ffd4#xJHyX=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5r zgg5euGcYjZdb&7U`4_QC;U5Cl-K|`(=E1^Eho+s}LU?v5A+zm;1&Kb>HG@NnmDZO5X;Dl?OtmXyDhPK{l^ t{Qtk_6JJlMTlqK6MQ_r?)9DO$U)qiPo?bC3W?*1o@O1TaS?83{1OSY8Ry6nQ)F(S^kzClwGQ>|7-kDb(^qPTzfx*+&&t;ucLK6TWIW!Rf literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/titaniumdrill.png b/core/assets-raw/sprites/titaniumdrill.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f8fef5fc9b2fc7cbb4eef8890fa71ee117ac9a GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4mJh`h9ms@x)~T4I14-?iy0WWg+Z8+Vb&Z8 z1_lQ95>H=O_J^E;0tQ^y&-hGaU|^6eag8W(&d<$F%`0JWE=o--Nlj5G&n(GMaQE~L z2yf&QXJB9`^K@|xk+|I2zmfN_0S}9QpIL%(0ei2aLU*S6`-8F^W-Iq~yZFUjMG3 z+~~7s-1D5%ORoLOG1zQd#M;2A^SJzc)o*Uo7dk(qBNeEak7aXI-FVdQ&MBb@003b=tN;K2 literal 0 HcmV?d00001 diff --git a/core/assets-raw/ui/icon-pause.png b/core/assets-raw/ui/icon-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..a87060e0b3800d30aa7ce7ad917dc0b2b5c78d29 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7L($8yg?mhx7<~9sc>Bug%y%Fj;EyU#~|ZLb*!J%!elgobbqLU}mVZ X=dpgb-qw$Sfq}u()z4*}Q$iB}2w*ld literal 0 HcmV?d00001 diff --git a/core/assets-raw/ui/icon-settings.png b/core/assets-raw/ui/icon-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e2dad31ca814996ed206ec0a60348227efd778 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7QA->9QFkX^?y7V7#J8l MUHx3vIVCg!0IA+d&j0`b literal 0 HcmV?d00001 diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index f8d5f87250..e3036194d2 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -508,6 +508,41 @@ stonewall orig: 8, 8 offset: 0, 0 index: -1 +titanium1 + rotate: false + xy: 180, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +titanium2 + rotate: false + xy: 180, 3 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +titanium3 + rotate: false + xy: 190, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +titaniumblock + rotate: false + xy: 190, 3 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +titaniumdrill + rotate: false + xy: 200, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 turret rotate: false xy: 163, 21 @@ -517,7 +552,7 @@ turret index: -1 water rotate: false - xy: 180, 13 + xy: 200, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -531,28 +566,28 @@ wateredge index: -1 weapon-blaster rotate: false - xy: 180, 3 + xy: 210, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapon-flamethrower rotate: false - xy: 190, 13 + xy: 210, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapon-multigun rotate: false - xy: 190, 3 + xy: 220, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapon-trishot rotate: false - xy: 200, 13 + xy: 220, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 8ffc4f6024800e116d38f5ba9c75c46e58723ecd..9a014490f5e6efe5b4188c4715cfc0968f6993e7 100644 GIT binary patch literal 7130 zcmeAS@N?(olHy`uVBq!ia0y~yU}9ikU{K&-V_;xN@jmdBfkAqqr;B4q#jUqA>)maEv#u@+ylN6E75b_!GIM{)`*Z)l{CjWr z{fwn?d0I}-{szouNnm7p|Rh z@#007sNH3`N(*bAD9d;HEuB>Jp;^A?U;LNcAC9ZTtG~UOc(|S4neof&Zug#=^YOJ` zuX^b3|5N1iDFHJ?;WS<#cF;1 z`gK#zO{32p&r5l=mtcHinG% z)lO{R_9ZbKFstukm~iD!FoTD8)Fq>o@HC*qdJ=ubBI3x?XJ8NmhopZ{J!nCR|+P>Sj>S%kb^9 zs`oUBwUL|E(tfOaF5q}TjPbzNxS01_(|>dY9(z%&mHf&xm7(GO!!yhy84W63R5=(K7-rRTF=TprN8KxCU`Sqaalt%p z2A#?LQ;w{17ihR1rMABQ%h6TRFVBCxetP~H&1wJteNQt!6u$V+3u9CM+S4BOVQ%an z{_pg;$i$HRp=^H)gTv$P4hu3EHY{iO#K>^=J}ZMAM}aHDF=2*jYxbsWse0|d==mCF z-t0apL6#g*W`^#lzLOF4%ip|xeQBBe4F-n8@1u5~k*IZcW}e5c$iR}}tfHU`a@{&H z29c;qj1I?c{C}QM%fetVBmCX|`y8cA4p-D`<|a>>FV3KFT*F?U;f05TB7=dAP0kTP zd*1!I_cfK77+d#A8jDQVRAXfL_Suyo<6lk8uf5M!^D(T`Y>+uHS(xFCOv4h8!+GcD z>M=B2%zmsd#voF=cT0y!?WgobjiYAI&zO7#;SxY>oK8{#yQ|^Ct4kZ?d2I;XC&@2Lr$TAA{$= zl|OG+mJwqSU^rrIKaZ6`FW`eKLk`D^y*Elimot2N%J77_p++F!ln4W(gZ=yt4u(m3 z?Ck8l5C6Y^w@u-*%?4$Ln3)Wd+ds1BUuA1)2vAdpgwe7$A`H*=#LK_#=>3=2l0R*# z%>(5yuG*g_PqD~Ey-`T7d`b-XKCqdy!eyb_+Rqk3=bR61}iRx)?DFPEH9*g z?p9*>GiTR3CI+X5w#FpJhQ;-N|9uHL>cViKjW_LSt6?1jgNPfGQsI~L6YLop1O)up zC6=n{W_q5U!p898IQuRoh6O)^Ss1<;Mt(|u>-V^Qft@!ie-p9k}^vWx^67Ovo}XYytfx-h>fG9)zgd0ETNuui6- z(~l{Ir9nV|snL_?$=2rm-0uH<{&6=dc=621nwH;L{_8q7B2N6FXFInPQynAhFSaA7~EM7Xna1bUlsRz;l!T@ZJkpEc^0hel`H=Lqp@7Kee-n2 zU(?Qg+>yRT-jT7t_{jTPh7%?>=-0mVe$2$cDXh1b;lU(shKxg3wlXmM(0gP1p(5p9 z#Hr&s_3u8hb8Oho+9 zgcM#sG`v~&Z~C*nN%!u=ont?Iogu-U;fDSBumhcDOq&=T`v252Jh){z;W#&ILsIH& z9mWH!jO#cYW?Y{Tx?E7$rzn?g$#SNcza_SrPZ${*R!pCF{<&WLohR%Q8DwQwWak)` zuHifB(BR2+YH{^H@T77a?wG)^zVQs_KgS$)8Uq}9odMsIdc)AM11FnzicepIFl^3WmOi1B6 zur)bBli|TGb_ct|`l1Yz{1`Ky-V#=bxBkz6h;6w*iS(A_<9w0Z^X3-!+MEAa`0@2z zhKtL;MI`)coyag*cmlYwHJOdU)BUwDBZG!Bd(@Mad*{0CRqmbma(mykqpw(4|LtFT zkLSgEDgWntpYP^p_#(n^n}gw+n!`rZk29p7y=~aZeqc-HGM)`~3d)U9Qey(uBdlrt*$CD*E zJBpY<4VfiRXR$Mgvpg~Qe;~MjZ`(0>Es2}g)8rNk@GSZ@@9%0K`+a6F*EYm5BuMW4 zK5hMlrde10jKAkrG{3Dg6uM%~n8ka2+UbL-pU?dM@xt9+s+%R?;j4y4(-?)AwjA2V z8Ob)|$e*_y4YIr!3?^__d=Y6ledOz&{eS0u%9RK?A<~fjCI8T$tls_k>JD2B)fHmd zW=z|%B=yp%`Ze?38dd4ldh;+GyTe|7i$P$wW8b^S%nV;&ta8`7@<;Q$hrK#Oh|WuG z4u%OgSdEuG%#Zug5VP`!*R%qjqg$mP9MAu|7i~h~NzFtR*(_rDx;|>XNch}wE*q55Oo#*cF zk_Pu{x3zwq?YG|kGqudT=U=Pqe~-)jPOiD@KF$2S?BEIJ8I?D;{r0VO^mjeCw!!)H z@$9DA)9z-t{oa;yqTt2dzNe;X#~pNT9|>VSe|y`j$cw+-=f1shPr}^p&=z*Nk1}s_ zMQfk!`SbM77f)Z`UdwXH#r>RbFPv$syVq;DV|$^&Hr7pIWw)H!>cZbo_>uSj^)BTF z`i>V^8LVDj@N;@1(y;fi{NaB;-c-H2|E~S{51!fP`P1CxDv#()Y-JGLvz+bQxdT6s zpX=+mF-0jSsO3NR|9k6VcR#ssBJbz9iHbk33(xL3SDW1~BY9i<@NRyO?+@xC_Y}>a za`nyBnWA}TSKZU)J$pMf`+tMXt&6$whgDxb*{5e|dr3Ln?RQUr`)tc^9=mI*cLbix zT|4D7^X4Zp@6DgioL7DJaqGX|PvY6+46H7jd-Ii^ot&HfI(0+(+@I@YED8?jJU*)$ zfAPNUz1@u0W%uvj!}dD-n)lmZR*@DV%1_y~YRj$X8l1Hb)8*bDt9?~``qL|iHhT-N zoKW=il<4v|pN>iATZDQ%eD7EMH%KxgR!{kL_=$u6LN}GZ^?Dh**U4~3uGBvE; zqQ=OOQBiSY#{X}truTgO9LKO?G4Jt1c1M{U9&|9N#IfyIQMWR*Os zuDZbzJh^u3@}8YXUlpU4u++(>{%HO^s}Fr z_xZnkIa^P_@t-Xm40fNFb1*#4{3qh`f97#BiG}O>1sM{)7}R$?^Jio*TNfvDFv;$- zKNrK#cgGzWcHDaA|J3;ZcOeFczuHnyZXD2BENi>^?AC2Nb6YF_efsyc$cmYfp`qsb z(~9{0B8&&j>bcfC3K=ZxN&MEpQ@0+}O8dBb`uRWVvJ4il+HYR|qv^!BoLPk72+zMm z4}IN!?c`_S+9RE?Q2GCwl?~^1F7KUq@XEP)w$c|Kgv>oYcX55&gxEj^iEp;bvWV8PgriQ%TCDGLu}4U)7p1AyQ1@U zJY?JX@tE|}Y0-HT_3MA0p0rb~=LM_5FY)-AiOb|$x^CUzcl-Z3{{O6H@-36L->dTe z_hq@g>tBW(y_dXOzr6pqv@!Ice&3hl>&&-ptTkG9Kco8RWcA`xTW57&;=ISjz|{Vc z{V^+pt3Trmjsv$YGc8_z^K~@iX4%>zMu$oAjY}93Z1u1F*zDjiTl(J)6N@WbPrj}C zutY}dw#IYq)k%xfzg=JaLVVhtT)E5}-N)08pNW}WRiU%&*>SNBHdbD~hZ`3$GQ5AC zH2$luKttd;(Ak@i_2!5-?#hSjtqlK3q<6MpD)il7hF_+dF724@yra18Mv$5 z&&vJwWIWK5Qoa2jD}$6(if3%G&X)EgdnUXJX7FGXA)vwsNF;K4l zPoZV$t0{)Rp3kqhV`|u-r@!YzQ_Q}an=;iemrn2b`Tv>u{!WGmZ@1q!d-i|#{lDjA znx`v7J#A+2=sk5moT0&^!K^xG{rTt%o8K-Cp8M(f>8EbtrkoSR&urT!EXZ)-kLI?; z=Tm$cr!X<}cAq=3aF_7Joqs>}*Y`|%7LZ1H9ws*09evo*sY3G5&Z&FMg z3{&nd`@NIl;JftwYMF}^rzbs&TDNj)zUT7Ve--=QJa1)kU=-Z#vMm39^tb)ydrH~_ z&%`q~{GIcB>-zQQ&)ocE`Rd^cdnSgyc^0iFS9)!0SN!Ml{qc!%{>e%2YbW`~Otbm_ zQc8KozP}u2@6^PrZpreQAjYyxWY@c z;-BIy439VRTsZgVd5!(y|GUl_vQA)S`04g=Ct#i9H zac1#8`DbhY^Iyq)kvLz6;X(F|?I8>gH0Hm*`t{$(6LsHyDyj(f#XMJk87pb{K8%Cm z0sG1Ce{JjjRJ>tt5txwDvf%99K8wtZf`cv#y?NDz7(VQH)49Fb)w)i?(P5=v1B>A9 zNxyzG9GJ$-&?m63ML>Y@fHwbnWBWz!+w!~W4hNW5`piszIH&$g^ZD1^mlm79+a1_5 zQ@wWXYYR{-UXS5ITfTi3!-g~VY>bKwEECumq?z>M_HZybq$s5Q>tWgR`JDB!Klf|D z#|js|eEZhaJTO>5ppl{P_Vx8^W?eJ8J?VA z)v#nT2+Mu8esSRbK86c-4%sbYZ1^i7^t_mxAt|xOnkk|E``exM-IcyYckT<<6 zU;ST->xWFO1mlJ0$NMC9ob$i5+enOyfy1`yQ`D0?JBv38ESi?>GQULJaemH@4d&8H z3O8o+_L?*7smf`cXjae5I7ev43(bb4-ur9}@+=k%3eSUr7!F8F&whG7_GzT{^b2jt ziAiBR3~{qQhbl`ms8wBg-^`NxZ=XklEMtLV12+Q)W0{Hra|1sU2ZN*rzk&lpZ~S3~ zWz7FRwA;_fw%rpM_Mn;J{@2&sKY#nw*_3gsvfR3!Z^)3~KBI;qfqz{t!;kgp;$mzJ zOY>OIEUo2P$eS-I_&X^{`qzT@5AWWsWIT}mXQvVaC&PjWfsV8PFaOB=XT_iJoLT+p zmp8v6KFzUhx^}X}q&V%eU{PV)4%y^XXq~8{7s~!E-h@H zM@{%KC&mX;!{Z8P*|$8k-1olMwrYFtopam;U$=hdd{Zm5j+NoUv;N~jj0;4Z<^357 zK;v5sYj*s|j9<*iQ2kWsRsm07b05>S$Pn1Tpr9?}AfUjY zpu}z{#2~OinX!W@LCWE-k?ppG;iHaHOAwH6}&?G<<3`jX`t@^M&gdORi3146-`uD;X7% zK54epUw6-vQwEEzCcl`#Y+!umUAmCM^G~I7JsXU#dNHUmY8~!>^>`-BjMsmQMH}qw zt@N8pYwIfRx2lw<>WDB*sCdF0`9yfi)Ty1PkCg7XC;Djn?_F`TwYwN%wSyT<>bLc# z3oV#;zWnUl=|YAcM!)n^xEdCQxH0@Vyz2IXCBY1jZMVn!@HPB>!NefX@`Rb8gR{|x zWs9OiGXukeOG~|r9v)(y%>Loc=JRfs85tPem?Rhj7$&eX3NSF7{vY#f&Ea1=i&!Qx zG`#=m;>UO+de7_E;qTWb^RN3FXRR-nJCU3HHg`O4z^k_nZ+W8D^xoN=-Y@v-Tj6=D z2TsBa-gh}PHvYVRea_TqbjDpgcenFQ z5MXdnaJca2c(P=|r0?tPf3N&^`q>MHt&u4FnT_`^&Dk z(s7&2?fv_H%w?P`Rd2^|;r8EWR@0c7_S|NOf4jCpQRH~k_Zby$O1|nZs%6NSp!ZRt zd#^~r!;F~@--I0Q-oM4IpeA#8+9B2)7LnW2zny!%Ui-!0$D7};|I_#V&j*R~{`+L#Nv@*AXILnMq0UdE0Ns1Ah+JFnpG9WA2Hoe!Dfpo`IdkhSt{bzrEoSDyc*4~gI z;j)6x*Uz=rwY0R70vC%g+`G?^u#APx{D_&+W$9_T@7~W9Vrb}XC}L#jn`#@S_x+;NIuWirY@B6)O zx%s_{!|Ii5wrnw(6!iXlaBl9}_d7$1i;Gphe)*!Y)GmC+m2`ivph=UaEJ;ba!N?$R zbV2gW{ftceP9NJ}`@2kaZ|&=AYp-0oB*e)Opyo5<0dqri{@$zBWrumqFC3}=A!vJR zZZd1bw!6|9pP!xOWKdDn^z`%!Qetjc+r!FWaeSM(a7&d0!Ny#HeOC3J zrm;41^Re_F%bp7~H|WVS{Mfyv?Mr4bFfe!^X`lW2+}(T6 zonz&k<0S;87v!}ReW^dKyM4vwj2Dk*3o$S(dE%hP;UQU*!tmhx$u@oW{~3>;n;m8s z@X)xxc;MSkNd^g~l2m2}gAbcF8GYSR^Rq~GhP{GA-Ti_+3l};%G8~q;#lQ%5$0UXW z5)2GI6MNadDllB|xhJT!_MIa`-0GQoOf)aO^7>T#=j*5E%txQ@|Gzh?_rp<*`@emz zM$ZqOG=J)1<{$rkmaSlHFsj%aFTk+jW46KsLxvZ@42cW}p5-$!NVCjPVn}9XnDL7t z$I+mu=U;HY->E;c4h%|+Mpgk~k&9og{Lar&a6!DD--QX3JXD@$u{Z2cm10=Z^SA!n z)M^HX=E~2V>Qe&J89w~lvEI1nlQScO5r}kfV|v8kke|O^sQ<^!53kGmH4FtdTrf{< zOEEgC!EoSjjv#|seO=72*{{6$7?x=^Fg)O7VX$Ra;A6Ye6US+ zaEShSD>u&Gf#ILr3_cHVI%Q!nVqtjkxppfT!;L?Y8O8mYkxqa7I&v5UrmcAP`v2xn zz9rRP6V0mKCHAlSY{Vz6SFGH>OsCBY1d zmJEpu0&I+h3=1}HyqNwc=U<-60pmKGQ*}!Z_q}@V#uVb`0L~#Q!3>7W84RBP{TI-j z|Ak-qkA}K?C-0=i3@@U;mgL5K{;rVl?;Mj>RY1|9~6Ux(+Z@q!vx2d3I`Y%4&UFN zKmT#xpVYap+V30a%{)?F-g{4+vEX2XS>7Fw+}zx(zDS0Ks`YtE3QwOty|~14@}8~# zcoQa=1qnJGjy4!M1Gp{q1~PD|7o*xlkz2Ue3%)` z{&NTjWaiyUiZI!_NnM1&%I*H6;(*gtKc7zTeBNEk;4pjNx%p@J@7OUTh|T@7PCZD7T9yUg@%NFkz_pL$Un{z%S> zE)80_B&#~gerJ&aV*@CVt{btWY!x*qJN$Tq#g|X(rfm^4+FrP$CiMTTo*w!2kvlea zY+_}Q`0FlT`$W>dncHl{xsk4Rabrg z$rQ^td;Q6eBc}e`-!m zmXZy>^Itr>clq+-MNE5wrC()Cu08cj+j%)dQxVfKCWaedR2d|c7`!wOD_X9%O;2e2 z{NkDnKU=_bxBi{=GukpO=j`LTu&t!8KiciLoXCelxsS8Uc%FD1u>F3=SdBrz@Zlvc z2DOv1bT20U9Q)zv3=7;DcGRB;J226V=@O$u-=AEDgj)yi+PvL`Kj|AK+xaDLQoA4%KyS|>PLGQ79( z_<03QD!MwWKEUJv3)4)d238iOTo#l4+Z(#Vr>1NXypWvQYm$0(0YB4(FULI_bN+od z>sjSqlU8fHKkr5d+Y99yVTP1lf&pqECwwSkXlQ9T&B-v8xB1kQ^QCK-{++9P>d(d^ zXQzfch6OKHa^+uTc&~fF3tSSfUZhh|vFPHD#eUo`{(gDM5Ua)zVYlN58`I-Wq8m&q zCd;j}^|N1Zv+U5ZK!yV%kNS6r7Tj`k2xL$=CDM?2{6G%FffD`(gTv>=7>*TjG5l63 zDJ#=D{Qv&kQomO_7rQfjk!7w-R=g6sat=5bc<#(%P>*^Ipjd_e1;I()w>RIQTIZNHaHVW>F~-`m!Ef2#3@-F~)CdJ+|1_x%f9CBNV7)!GJM zh6R#)O$&LVA~xO1c(#oHzjyZ;>Qx%pwY z*x4oAKka>m`xee9WB&8+$@|NPnS)nuSgByd@FaJ}^0?23=l@gSWk~p^u{rJRE;Ysm zWd|y$`aVZM|^qcwEVc6JK}zDN7aGb5=k9EB9ji z_#gc_zxuS-pAE^YuTko`(>U{aiT%P?+|i$zw=o?Lc-kc&=z*Nk1}sdf9Ag0^XKWEErFh%omSdde@-Yx$B>9OEB$_?jFTxL}}Ve<8`@;QHRZ|>6a^2@>gwo6-7Hwlzoeo~#4@SbN* z{hK!(9lmCVp1*zdD(Jsl-n=dK3F>=G3bg;ep6KhPKL4&8dwW^n`*XHeF5UF+4u7|7 z&ZJlq<@;-H9<^S%Xjl8TE#(*fbEjazP)z{dAeG?;&NvlLp zyl>mb@X-3;{rG)sr^BZOXBJE9-imUntmeuox0W?OE3dcAb-&iqN5-d_w!Zjr$)hV+ zFJ?!=lsLN|511D}64`fb)#>R$?r)2vGU6P6-wMAtZL4ePLf;Kg^BDxbRZtILhU>2B`gV~^IEFf`N! z|NPJP>e^+72kiWRd!-KQ-Aq z+@Jly_OHJj2g9c1gUOdy)PK}@{ri5X$>dwp#8z-K&oB3l)HZ!u{`=fS8}qL_rB^Dg zKUV$!$D;p9o}1sF>-p5z)4$AtVf*i=-8|wldQx|)7cG5#Got=*mnr)c$#s#NkL|v& zQCYc2X~CaAHKhm7&$SM>-T!{y?~GepGN;U*{rY#IgM3)Pl9N~XpL5PyUgFGII>*1%FP34$O#5!e1f8?Eew|gi zw)E=Sfb;iXa%waB#`%-+kHXz~C_Hg-cZ_j9yCmq>1>zo}M1G|@G=z^@M z{s>{K%DMah-1C`ba#wJL z`8?g|hesFVn~h8Vvw1A#xp#TtugrbVgMO6+HeBi7s+$=(qkc)|4xVjh^4c3uT8jn# zJCQW&cMRj~J;{Q)HesuN*~FO6eYfYc->%>9cE9}h`~7luxr&CM>n%dnj6MIpUXM?| zTpm-Idxzic|HF3qO)st2y}0aezchdU-)pbg6O29IUC>;AzgTwl9DBK(@3HxJj=i1! z_}ABM)9tHF0+wBk(V6)`m*Ie+#D3#2h6x`<8oC(P$f`=%&fdF6)L{E!e*p%UpMo7+ z47Wb-I5wY+>C&AK$5We~V`tszi*(PdKj&r@8t_Egwz%H1%Wi+luBw#7aW+$48y9E3 zdS^I))%-XQArTde9mkE>81}3;HvM_;MEt(`6Si*qgO4iOEZYf(^|ggu&c@D`gxOh89upBuLx{t@2Xq(F0$zT-tVhABxc)( zL`Hg^xB1M|+tZ`5xc=$Xa2tk#*Cqe{R93y+di~1AZgG9B&;Nfs?zd(5@#pjTsXyz# z-AsQavCiLRb&deT%j@sAGBI?pcx*oY?N<$VRo-rkOCI%gy8bUGsWE+eewG1e)o6!w~bgEX4?PL{^k5u<~}Iw{_(sh zPRg6eBxh&O<8mi{+sV($=E+8Pr%p6ab(*nedKT$7h;?YztT(S4V^`wd$kqrKlfXH-Of zY7+OJlJM)7vdQAth5na*JeSo9m^6`L#{byzyRJeVk_-ji#S9E3kB)Gr{?p(0W0BCS z9i>(Z53YvChcYni{d~^))SuvG?_W;#w+nps|EPGphQtGzxl?Xhud87=u+y#P@1ZxU zECvi4zL>pRzW>-Y{z+d~T+h$WUL7PMapL`iI^WaD?c1kb`YC=*d-L%tjMeLAS3h_l zF}q%eL83dgq3W6a`R~O);me;xPf6Mt)cQ_!t(r0DzyE*&6H=n;Q?%j8< z;(o8s8JkzHeU3{q_y{C0F=YPuwU~wB?4MeJ2TTpjo(vZhADo$K%)sEnR`cxq#0LHS ze}ZQIzaC$|R!Q&m_4VQAfx-e08X5XtUte!h_4n6QgM=oQ%cXk1Uth1h@;aQU!S2=c z+&_CS^3HE;Sbu-YO6`Z%KfgRXd+)nQ>6VWl3t1U%yE*VM{9rD8X7A7ZqI6&JgA3ob zolven-QOz6z*NMzsgHq2boI~d{44s(3^{pu@{<@2{IyUycixoYL+i({91U{!u0Q{` zQ{Vd;Q;HPhkJ_uk`@ZWhY?!~8-<{#f&x^`z%RUQ#UDs2{$gt4eJC1visz0wB0PtVM6YO2<8L34{J|Z^3$8+fo9{!c}yp+{3vDE;Ml;(z%+dl z6NBB22;cg=Q{K@#Tg+sNg*VqQ6coNYKc$30;(g$LUZEvFZ!0lYu^eDwRAWfsxS-4^ z#E>I!fMG&Y5jzvhhL7G72TBfv$JZ`hSNgqgWgjn7&h_=WPx6g_`m8Jd`zw{>%KH00 z3=aJUHyIq{V_q|Sh))+k%G{8%o$1-qS{bL;cWoSg9X*o!qIn;C*|rv@hO_(tTx#dy_12x{skdcHcs)Ot z&tb~{Y7iCA-x{jLa3Nf8A@6YkQwe>B6DCmts!R*||9$0f z;9&W|;Ly~-#*jIYfsK)k!R3iU9}5G^7Y~L-3^UjSw)=d~U4KrX;U(kkui4zMy)8Dx zPOtK7%;kDe#LVz})tU9d8(zuP=Wm%~XAvi*FIb?H$9Cj5LqUf;C)bW03Rj*QelgWy z?3&7a;aWiH$!Uz6QYOtdFj;@jGcW1Od)14ahrhg<@>X5X4(p$9x0 zg&HO^v_7oQ)sh5KzsRR^H8`)7VSFGTc9YF@E|bLT zoqv6b7{0g*Gu%*6;9*ek<9OoYAj_n}!N72CuC@De|M_8+4C&|ReO<=Pz$C-@fTMw- z!GxoMfg$2wx>361HU3kA9ZU?{oQURdR9@ARD~Rf}>K zo%r)ylrd-C9rt*)45O0UMh3%VCFyUY<-_R9VxQ84}&(OKe_c zr?NCSI$T@Kz#zo@(`NNSk8!;#t$vy-%dzVgjGzFCmAU@wd4TsLLFlcF53->C@Zd-yd3{llIov zeEZilea-Xs{*OO7cWW#6O96F%%Q{V zBWdd?Fk#kS{rk~u9d$-R3QzR}LuLh8ggQCQ`Z3GMp+Wu0oey;k2KDCh4z{~4GA#Xm zuloFL{sRn*^Q5xEeOfpP(FmE8NmZ4Dbf)gKAx)jE^FRs))^@^tlcS?83{1ORejrP=@h diff --git a/core/assets/ui/uiskin.atlas b/core/assets/ui/uiskin.atlas index d9da6fe185..981639368a 100644 --- a/core/assets/ui/uiskin.atlas +++ b/core/assets/ui/uiskin.atlas @@ -358,13 +358,27 @@ icon-distribution orig: 10, 10 offset: 0, 0 index: -1 -icon-production +icon-menu rotate: false xy: 383, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 +icon-pause + rotate: false + xy: 395, 2 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +icon-production + rotate: false + xy: 407, 2 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 icon-rotate rotate: false xy: 405, 15 @@ -372,6 +386,13 @@ icon-rotate orig: 14, 14 offset: 0, 0 index: -1 +icon-settings + rotate: false + xy: 419, 2 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 list-selection rotate: false xy: 220, 3 @@ -556,7 +577,7 @@ slider-knob-over index: -1 slider-vertical rotate: false - xy: 343, 62 + xy: 421, 14 size: 8, 1 orig: 8, 1 offset: 0, 0 @@ -571,14 +592,14 @@ slot index: -1 splitpane rotate: false - xy: 343, 59 + xy: 431, 14 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 splitpane-over rotate: false - xy: 343, 56 + xy: 343, 62 size: 8, 1 orig: 8, 1 offset: 0, 0 @@ -637,7 +658,7 @@ touchpad-knob index: -1 tree-minus rotate: false - xy: 395, 2 + xy: 431, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index 5d62cc089b..8bf672d10f 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -34,7 +34,7 @@ io.anuke.ucore.scene.ui.TextButton$TextButtonStyle: { toggle: {font: default-font, fontColor: white, checked: button-down, down: button-down, up: button, over: button-over, disabled: button, disabledFontColor: grey } }, io.anuke.ucore.scene.ui.ImageButton$ImageButtonStyle: { - default: {down: button-down, up: button }, + default: {down: button-down, up: button, over: button-over }, static: {up: button }, static-down: {up: button-down }, blue: {down: button-blue-down, up: button-blue }, diff --git a/core/assets/ui/uiskin.png b/core/assets/ui/uiskin.png index a271b5fa3648be8ed3526e0dd38563a8b9ed4e4b..20d19722cff1522699b0e6ba4f38584a423a2f6b 100644 GIT binary patch delta 12228 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 diff --git a/core/src/io/anuke/mindustry/Control.java b/core/src/io/anuke/mindustry/Control.java index b82611d7c7..01e41465f1 100644 --- a/core/src/io/anuke/mindustry/Control.java +++ b/core/src/io/anuke/mindustry/Control.java @@ -23,10 +23,10 @@ import io.anuke.ucore.core.*; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entity; import io.anuke.ucore.graphics.Atlas; -import io.anuke.ucore.modules.RendererModule; +import io.anuke.ucore.modules.ControlModule; import io.anuke.ucore.util.Mathf; -public class Control extends RendererModule{ +public class Control extends ControlModule{ public int rangex = 10, rangey = 10; public float targetzoom = 1f; diff --git a/core/src/io/anuke/mindustry/Renderer.java b/core/src/io/anuke/mindustry/Renderer.java index 9bfd2cfe4b..e9380d921e 100644 --- a/core/src/io/anuke/mindustry/Renderer.java +++ b/core/src/io/anuke/mindustry/Renderer.java @@ -20,7 +20,9 @@ import io.anuke.ucore.entities.Entity; import io.anuke.ucore.graphics.Cache; import io.anuke.ucore.graphics.Caches; import io.anuke.ucore.scene.utils.Cursors; -import io.anuke.ucore.util.*; +import io.anuke.ucore.util.GridMap; +import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Tmp; public class Renderer{ private static int chunksize = 32; @@ -110,7 +112,7 @@ public class Renderer{ public static void renderPixelOverlay(){ - if(player.recipe != null && (!ui.hasMouse() || android)){ + if(player.recipe != null && Inventory.hasItems(player.recipe.requirements) && (!ui.hasMouse() || android)){ float x = 0; float y = 0; diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 06fefb2da1..bdbcda836a 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -6,13 +6,12 @@ import static io.anuke.ucore.scene.actions.Actions.*; import com.badlogic.gdx.Application.ApplicationType; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Timer; -import com.badlogic.gdx.utils.Timer.Task; import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.entities.Weapon; @@ -20,21 +19,18 @@ import io.anuke.mindustry.input.AndroidInput; import io.anuke.mindustry.resource.*; import io.anuke.mindustry.ui.*; import io.anuke.ucore.core.*; -import io.anuke.ucore.function.Listenable; import io.anuke.ucore.function.VisibilityProvider; import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.graphics.Textures; import io.anuke.ucore.modules.SceneModule; -import io.anuke.ucore.scene.Element; -import io.anuke.ucore.scene.Scene; import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.builders.*; -import io.anuke.ucore.scene.event.InputEvent; import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.*; +import io.anuke.ucore.util.Mathf; public class UI extends SceneModule{ - Table itemtable, weapontable, tools, loadingtable; + Table itemtable, weapontable, tools, loadingtable, desctable; SettingsDialog prefs; KeybindDialog keys; Dialog about, menu, restart, tutorial, levels, upgrades, load; @@ -62,6 +58,10 @@ public class UI extends SceneModule{ Textures.load("sprites/"); Textures.repeatWrap("conveyort", Gdx.app.getType() == ApplicationType.WebGL ? "back-web" : "back"); + + Colors.put("description", Color.WHITE); + Colors.put("turretinfo", Color.ORANGE); + Colors.put("missingitems", Color.SCARLET); } void drawBackground(){ @@ -114,7 +114,6 @@ public class UI extends SceneModule{ @Override public void init(){ - //TODO just move these dialogs to different files load = new LoadDialog(); @@ -146,19 +145,17 @@ public class UI extends SceneModule{ tutorial = new TutorialDialog(); - restart = new Dialog("The core was destroyed.", "dialog"){ - public Dialog show(Scene scene){ - super.show(scene); - restart.content().clearChildren(); - if(control.isHighScore()){ - restart.content().add("[YELLOW]New highscore!").pad(6); - restart.content().row(); - } - restart.content().add("You lasted until wave [GREEN]" + control.getWave() + "[].").pad(6); - restart.pack(); - return this; + restart = new Dialog("The core was destroyed.", "dialog"); + + restart.shown(()->{ + restart.content().clearChildren(); + if(control.isHighScore()){ + restart.content().add("[YELLOW]New highscore!").pad(6); + restart.content().row(); } - }; + restart.content().add("You lasted until wave [GREEN]" + control.getWave() + "[].").pad(6); + restart.pack(); + }); restart.getButtonTable().addButton("Back to menu", ()->{ restart.hide(); @@ -179,10 +176,16 @@ public class UI extends SceneModule{ new table(){{ abottom(); aright(); + + new table("button"){{ + visible(()->player.recipe != null); + desctable = get(); + fillX(); + }}.end().uniformX(); + + row(); - new table(){{ - - get().background("button"); + new table("button"){{ int rows = 3; int maxcol = 0; @@ -202,12 +205,18 @@ public class UI extends SceneModule{ recipes.clear(); Recipe.getBy(sec, recipes); + Table table = new Table(); + ImageButton button = new ImageButton("icon-"+sec.name(), "toggle"); + button.clicked(()->{ + if(!table.isVisible() && player.recipe != null){ + player.recipe = null; + } + }); add(button).fill().height(54).padTop(-10).units(Unit.dp); button.getImageCell().size(40).padBottom(4).units(Unit.dp); group.add(button); - Table table = new Table(); table.pad(4); int i = 0; @@ -216,8 +225,10 @@ public class UI extends SceneModule{ ImageButton image = new ImageButton(Draw.region(r.result.name()), "select"); image.clicked(()->{ - if(Inventory.hasItems(r.requirements)) + if(Inventory.hasItems(r.requirements)){ player.recipe = r; + updateRecipe(); + } }); table.add(image).size(size+8).pad(4).units(Unit.dp); @@ -236,67 +247,6 @@ public class UI extends SceneModule{ table.row(); i++; - - Table tiptable = new Table(); - - Listenable run = ()->{ - tiptable.clearChildren(); - - String description = r.result.description(); - - tiptable.background("button"); - tiptable.add("[PURPLE]" + r.result.name(), 0.75f*fontscale*2f).left().padBottom(2f).units(Unit.dp); - - ItemStack[] req = r.requirements; - for(ItemStack s : req){ - tiptable.row(); - int amount = Math.min(Inventory.getAmount(s.item), s.amount); - tiptable.add( - (amount >= s.amount ? "[YELLOW]" : "[RED]") - +s.item + ": " + amount + " / " +s.amount, fontscale).left(); - } - - tiptable.row(); - tiptable.add().size(10).units(Unit.px); - tiptable.row(); - tiptable.add("[scarlet]Health: " + r.result.health).left(); - tiptable.row(); - tiptable.add().size(6).units(Unit.px); - tiptable.row(); - tiptable.add("[ORANGE]" + description).left(); - tiptable.pad(Unit.dp.inPixels(10f)); - }; - - run.listen(); - - Tooltip tip = new Tooltip(tiptable, run){ - public void enter (InputEvent event, float x, float y, int pointer, Element fromActor) { - if(tooltip != this) - hideTooltip(); - Element actor = event.getListenerActor(); - if (fromActor != null && fromActor.isDescendantOf(actor)) return; - setContainerPosition(actor, x, y); - manager.enter(this); - run.listen(); - - tooltip = this; - - if(android){ - - Timer.schedule(new Task(){ - @Override - public void run(){ - hide(); - } - }, 1.5f); - - } - } - }; - - tip.setInstant(true); - - image.addListener(tip); } //additional padding @@ -336,18 +286,19 @@ public class UI extends SceneModule{ atop(); aleft(); - defaults().size(60).units(Unit.dp); + defaults().size(66).units(Unit.dp); - new button("M", ()->{ - + //TODO menu buttons! + new imagebutton("icon-menu", 40, ()->{ + showMenu(); }); - new button("P", ()->{ - + new imagebutton("icon-settings", 40, ()->{ + prefs.show(); }); - new button("S", ()->{ - + new imagebutton("icon-pause", 40, ()->{ + //TODO pause }); row(); @@ -370,7 +321,7 @@ public class UI extends SceneModule{ new table(){{ get().background("button"); - new label(()->"[YELLOW]Wave " + control.getWave()).scale(fontscale*2f).left(); + new label(()->"[orange]Wave " + control.getWave()).scale(fontscale*2f).left(); row(); @@ -385,9 +336,8 @@ public class UI extends SceneModule{ }}.end(); - //if(Gdx.app.getType() != ApplicationType.Android){ //+- table - //TODO refactor to make this less messy + //TODO refactor to make this less messy? new table(){{ aleft(); abottom(); @@ -408,7 +358,6 @@ public class UI extends SceneModule{ get().setVisible(play); }}.end(); - //} //menu table new table(){{ @@ -472,7 +421,6 @@ public class UI extends SceneModule{ } new table(){{ - //atop(); new table(){{ get().background("button"); @@ -528,6 +476,55 @@ public class UI extends SceneModule{ build.end(); } + void updateRecipe(){ + Recipe recipe = player.recipe; + desctable.clear(); + + desctable.defaults().left(); + desctable.left(); + desctable.pad(12); + + desctable.add(recipe.result.formalName); + desctable.row(); + desctable.addImage(Draw.region(recipe.result.name)).size(8*5).padTop(4); + desctable.row(); + + desctable.add().pad(2); + + Table requirements = new Table(); + + desctable.row(); + + desctable.add(requirements); + desctable.left(); + + for(ItemStack stack : recipe.requirements){ + ItemStack fs = stack; + requirements.addImage(Draw.region("icon-"+stack.item.name())).size(8*3); + Label reqlabel = new Label(""); + + reqlabel.update(()->{ + int current = Inventory.getAmount(fs.item); + String text = Mathf.clamp(current, 0, stack.amount) + "/" + stack.amount; + + reqlabel.setColor(current < stack.amount ? Colors.get("missingitems") : Color.WHITE); + + reqlabel.setText(text); + }); + + requirements.add(reqlabel); + requirements.row(); + } + + desctable.row(); + + if(recipe.result.description() != null){ + Label label = new Label(recipe.result.description()); + label.setWrap(true); + desctable.add(label).width(170).padTop(4); + } + } + public void updateWeapons(){ weapontable.clearChildren(); diff --git a/core/src/io/anuke/mindustry/input/Input.java b/core/src/io/anuke/mindustry/input/Input.java index a32e2486c5..c86e8b6c62 100644 --- a/core/src/io/anuke/mindustry/input/Input.java +++ b/core/src/io/anuke/mindustry/input/Input.java @@ -36,10 +36,7 @@ public class Input{ player.rotation %= 4; - if(player.recipe != null && !Inventory.hasItems(player.recipe.requirements)){ - player.recipe = null; - Cursors.restoreCursor(); - } + //TODO restore cursor when requirements are back for(int i = 0; i < 9; i ++) if(Inputs.keyUp(Keys.valueOf(""+(i+1))) && i < control.getWeapons().size){ @@ -48,7 +45,8 @@ public class Input{ } if(Inputs.buttonUp(Buttons.LEFT) && player.recipe != null && - World.validPlace(World.tilex(), World.tiley(), player.recipe.result) && !ui.hasMouse()){ + World.validPlace(World.tilex(), World.tiley(), player.recipe.result) && !ui.hasMouse() && + Inventory.hasItems(player.recipe.requirements)){ Tile tile = World.tile(World.tilex(), World.tiley()); if(tile == null) @@ -64,9 +62,8 @@ public class Input{ for(ItemStack stack : player.recipe.requirements){ Inventory.removeItem(stack); } - + if(!Inventory.hasItems(player.recipe.requirements)){ - player.recipe = null; Cursors.restoreCursor(); } } diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index bdc8218777..412da33aae 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -79,7 +79,7 @@ import io.anuke.ucore.entities.Entity; */ public class SaveIO{ /**Save file version ID. Should be incremented every breaking release.*/ - private static final int fileVersionID = 4; + private static final int fileVersionID = 5; private static FormatProvider provider = null; diff --git a/core/src/io/anuke/mindustry/resource/Item.java b/core/src/io/anuke/mindustry/resource/Item.java index 2824092bf3..ce0c7ce006 100644 --- a/core/src/io/anuke/mindustry/resource/Item.java +++ b/core/src/io/anuke/mindustry/resource/Item.java @@ -1,5 +1,5 @@ package io.anuke.mindustry.resource; public enum Item{ - stone, iron, coal, steel, titanium; + stone, iron, coal, steel, titanium, hypanium; } diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index ea60db2182..d71046d5ff 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -22,6 +22,7 @@ public class Block{ protected static TextureRegion temp = new TextureRegion(); public final String name; + public String formalName; public boolean solid, update, rotate, breakable; public int health = 40; public String shadow = "shadow"; @@ -38,6 +39,7 @@ public class Block{ blocks.add(this); this.name = name; + this.formalName = name; this.solid = false; this.id = lastid++; } @@ -51,7 +53,7 @@ public class Block{ } public String description(){ - return "[no description]"; + return null; } public String errorMessage(Tile tile){ diff --git a/core/src/io/anuke/mindustry/world/blocks/Blocks.java b/core/src/io/anuke/mindustry/world/blocks/Blocks.java index e6fe271654..05d0e46c10 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/Blocks.java @@ -95,17 +95,27 @@ public class Blocks{ solid = true; update = true; health = 50; + formalName = "stone wall"; }}, ironwall = new Block("ironwall"){{ solid = true; update = true; health = 80; + formalName = "iron wall"; }}, steelwall = new Block("steelwall"){{ solid = true; update = true; - health = 100; + health = 110; + formalName = "steel wall"; + }}, + + titaniumwall = new Block("titaniumwall"){{ + solid = true; + update = true; + health = 140; + formalName = "titanium wall"; }}; } diff --git a/core/src/io/anuke/mindustry/world/blocks/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/Conveyor.java index 687aa3655f..2eba10bff1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Conveyor.java @@ -98,7 +98,7 @@ public class Conveyor extends Block{ @Override public String description(){ - return "Moves Items"; + return "Moves items."; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index 4e2d257a4f..ef9dafee8d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -40,6 +40,7 @@ public class ProductionBlocks{ steelconveyor = new Conveyor("steelconveyor"){{ update = true; speed = 0.04f; + formalName = "steel conveyor"; }}, router = new Block("router"){ @@ -131,29 +132,47 @@ public class ProductionBlocks{ } }, + crucible = new Crafter("crucible"){ + { + health = 90; + requirements = new Item[]{Item.titanium, Item.steel}; + result = Item.hypanium; + } + + @Override + public String description(){ + return "Takes in steel + titanium, outputs hypanium."; + } + }, + stonedrill = new Drill("stonedrill"){{ resource = Blocks.stone; result = Item.stone; + formalName = "stone drill"; }}, irondrill = new Drill("irondrill"){{ resource = Blocks.iron; result = Item.iron; + formalName = "iron drill"; }}, coaldrill = new Drill("coaldrill"){{ resource = Blocks.coal; result = Item.coal; + formalName = "coal drill"; }}, titaniumdrill = new Drill("titaniumdrill"){{ resource = Blocks.titanium; result = Item.titanium; + formalName = "titanium drill"; }}, omnidrill = new Drill("omnidrill"){ { time = 4; + formalName = "omnidrill"; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/RepairTurret.java b/core/src/io/anuke/mindustry/world/blocks/RepairTurret.java index f0233f1663..993d3c2099 100644 --- a/core/src/io/anuke/mindustry/world/blocks/RepairTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/RepairTurret.java @@ -64,6 +64,6 @@ public class RepairTurret extends Turret{ @Override public String description(){ - return "[green]Range: " + (int)range + "\n[orange]Heals nearby tiles."; + return "[turretinfo]Range: " + (int)range + "\n[description]Heals nearby tiles."; } } diff --git a/core/src/io/anuke/mindustry/world/blocks/Turret.java b/core/src/io/anuke/mindustry/world/blocks/Turret.java index b81b87156f..9716824440 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/Turret.java @@ -69,7 +69,7 @@ public class Turret extends Block{ @Override public String description(){ - return "[green]Ammo: "+(ammo==null ? "N/A" : ammo.name())+"\nRange: " + (int)range + "\nDamage: " + bullet.damage; + return "[turretinfo]Ammo: "+(ammo==null ? "N/A" : ammo.name())+"\nRange: " + (int)range + "\nDamage: " + bullet.damage; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java index 29cc997d34..449b6edf5a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java @@ -12,6 +12,7 @@ public class WeaponBlocks{ turret = new Turret("turret"){ { + formalName = "turret"; range = 50; reload = 10f; bullet = BulletType.stone; @@ -21,6 +22,7 @@ public class WeaponBlocks{ doubleturret = new Turret("doubleturret"){ { + formalName = "double turret"; range = 40; reload = 13f; bullet = BulletType.stone; @@ -42,6 +44,7 @@ public class WeaponBlocks{ machineturret = new Turret("machineturret"){ { + formalName = "gattling turret"; range = 65; reload = 7f; bullet = BulletType.iron; @@ -52,6 +55,7 @@ public class WeaponBlocks{ shotgunturret = new Turret("shotgunturret"){ { + formalName = "splitter turret"; range = 50; reload = 30f; bullet = BulletType.iron; @@ -73,6 +77,7 @@ public class WeaponBlocks{ flameturret = new Turret("flameturret"){ { + formalName = "flamer turret"; range = 35f; reload = 5f; bullet = BulletType.flame; @@ -83,6 +88,7 @@ public class WeaponBlocks{ sniperturret = new Turret("sniperturret"){ { + formalName = "railgun turret"; range = 120; reload = 60f; bullet = BulletType.sniper; @@ -93,6 +99,7 @@ public class WeaponBlocks{ repairturret = new RepairTurret("repairturret"){ { + formalName = "heal turret"; range = 30; reload = 40f; health = 60; @@ -101,6 +108,7 @@ public class WeaponBlocks{ megarepairturret = new RepairTurret("megarepairturret"){ { + formalName = "heal turret II"; range = 50; reload = 20f; health = 90;