From 9663d1153f569e2f2aaa7802157e061166f3edb4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 15 Nov 2021 14:31:20 -0500 Subject: [PATCH] WIP electrolyzer + liquid fixes --- .../blocks/production/electrolyzer-bottom.png | Bin 0 -> 462 bytes .../blocks/production/electrolyzer-glow.png | Bin 0 -> 5642 bytes .../electrolyzer-hydrogen-output1.png | Bin 0 -> 548 bytes .../electrolyzer-hydrogen-output2.png | Bin 0 -> 543 bytes .../blocks/production/electrolyzer-liquid.png | Bin 0 -> 392 bytes .../production/electrolyzer-ozone-output1.png | Bin 0 -> 554 bytes .../production/electrolyzer-ozone-output2.png | Bin 0 -> 541 bytes .../blocks/production/electrolyzer-top.png | Bin 0 -> 302 bytes .../blocks/production/electrolyzer.png | Bin 0 -> 1240 bytes .../sprites/items/item-dormant-cyst.png | Bin 332 -> 341 bytes .../sprites/items/liquid-hydrogen.png | Bin 320 -> 324 bytes .../assets-raw/sprites/items/liquid-ozone.png | Bin 322 -> 323 bytes core/assets/icons/icons.properties | 2 + core/assets/logicids.dat | Bin 3315 -> 3328 bytes core/src/mindustry/content/Blocks.java | 43 +++++++++++- core/src/mindustry/content/Liquids.java | 9 +-- .../mindustry/entities/comp/BuildingComp.java | 5 +- core/src/mindustry/type/LiquidStack.java | 7 +- core/src/mindustry/world/Block.java | 4 +- .../src/mindustry/world/blocks/Autotiler.java | 9 ++- .../blocks/production/GenericCrafter.java | 51 +++++++++++++-- .../world/consumers/ConsumeLiquid.java | 1 + .../world/consumers/ConsumeLiquids.java | 4 +- .../src/mindustry/world/draw/DrawBubbles.java | 47 ++++++++++++++ core/src/mindustry/world/draw/DrawGlow.java | 3 +- .../mindustry/world/draw/DrawGlowRegion.java | 45 +++++++++++++ .../world/draw/DrawLiquidOutputs.java | 61 ++++++++++++++++++ .../world/draw/DrawLiquidRegion.java | 44 +++++++++++++ core/src/mindustry/world/draw/DrawMulti.java | 10 +++ core/src/mindustry/world/draw/DrawRegion.java | 42 ++++++++++++ 30 files changed, 364 insertions(+), 23 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-glow.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output1.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output2.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output1.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-top.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer.png create mode 100644 core/src/mindustry/world/draw/DrawBubbles.java create mode 100644 core/src/mindustry/world/draw/DrawGlowRegion.java create mode 100644 core/src/mindustry/world/draw/DrawLiquidOutputs.java create mode 100644 core/src/mindustry/world/draw/DrawLiquidRegion.java create mode 100644 core/src/mindustry/world/draw/DrawRegion.java diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png b/core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4b6a2b8fa10ba52de5f54471a2bd0c9083c362 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zJ3L(+Ln`LH zy}P^cuz?8cMQ-sF^>_Q3R8ySGSo%{xH>*#)<4~>C*^*{b&h6lR@%QoP;a|e9!N<8uTI-#&7Yj_?uGBzLG!5Ij#}44}Tnw>fZ3gK1X@H%zvr<%71DK{$zjU&@HSvWpg*GxaOMlU-r1Uj0tQFk_>4KGX^80 za-wv`yu7okc@)dTCCl7)9D9^HZ?53Et(9|g(_4ypVqe^md>FA*`>eIHOmgm@6m^HB zmh{}-`8+HhJs(!={W$p`L#N;>w`2ZXj6%viQnL1%Y#u!umK)Vgs$rhID9Pen<}G0S PFfe$!`njxgN@xNAtYD$; literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-glow.png b/core/assets-raw/sprites/blocks/production/electrolyzer-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..7d88560571964fa9eceb80e8ec9f124760d64270 GIT binary patch literal 5642 zcmV+l7WL_gP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+TEF1mfJcKME|jhUIOM}IT+9B9rW`1CO}O!xMchN zbeCL3ilPW0BQqirR`WmqUg}@`cw3_KA>~+N)cpA3i>;hweSXURYqZ~g_fNb&;{D5Y zb^pL}$#Hb&ZK~J(mFwa0h1(dWy5S9+Z$2|{@@rh>_xugqXPoEUIjzp& zdKdwDS>Ela^>ct;f_ytuAESRi`w)Cvuj}qZEHAVaCtrSG!iVebK8$@H*xhGjUq2{D zuTRUle%Bg#t$9{geI%ms%BUS|b9)RoHbU<9*CMaPZ{R%bSK*a))g8!(?z-{nrWgw< zOBrv5sb-nEkKJ^p=Q^8B&P%P;B}7K&d#sq3mAqyef}H&2E&ws>!Y%9o-(DB|`YC@% zRS*n2%$WsN-OeLgFpu1F8)wITf#WG5qtdt@K!_MSFd0g~8y%?u6OB&RCS!?Tm>xe1NoDDCWmTp!G{oH zNFl3GLX9r^7-Ebm3dz;vl20MUlu}M5)$Fp*A;+9@&L!7ki-QA0i6xa>N~zVV%0QK8 zRqn4`X|}oMTWGPRmRo7HlRn+|&|^IY8XKb2>moREOW>1f!tfTsgU2o&HjX(66pR3fav!uOHN^Um8nd8`))MY>)zghrS|=yG&>;bW(4) zW@`z$*OpBSA4>9n{tuiPB~*nk#*##pORA$c&$8e$g$|Gqn_a}s9X zU)G&eKwMVUh1^@fKO<5`0&6qLiGV%e9czd+OzlRDX4n-xZe-Y4W@st29AYD#W6(8} zf|Ml|(`V2ml&|C&B3XA_J|ES0A3Psdt!o;WIzzV3^GynsLMWW|Q7MbORGgJcuqI~h zt*_MFoIb>{TG1=@2!CtSBmPj99+PQ(&0z}BG&T=k^=c%yR}|)od^`2NoEV_8pp70! zkCO*Y+h$I$U@yQiHcjHmmmx?|D`oAf#qZJPa(<6Hhbx_;r~dRzW`-Wh;0tYz+(#-k z<&juxY(wG=Lye%oqqX5;1a_iL%tH&sjFKIU6?+*yW6!d8V-2R)orKO!iJrV$rY>SP zlunFYJD;EEF+Jych_hYMvnLJvD6SQ=(=fGF1F+r3s zJ)OZbOLC)Lvl&Sf3qO0U0gbIw#}OidYk7{@0%WzQDG5_{CoL6sIHJ@5@=OO-jG@(H zOp(?g#GVJli5bF4tq~RLykLQRfN zQ=zL4%6UCl~zlF>XlQjH`rF+a%yt(T(L(B+^_V}WO6&F)O4vp$WD^# zZoVlA&}vKe#Q#TZ%VPx-!=1>U}<{6MQ(8njy#h5Z=y1Gf{|U;W5PIbvrtwURym` z!3-&wu(Kk;+h{*lAZ+$#$x=6^oq~>(jc;YndCEERFSeQ}WZm%%NfYkMl*O~GP}M9y zMR!5cE9SZM7&FNk8f`Nvb~r5(lk|&ZSOgTI!%J;m#t6lvAykAeS zW%5zOm>ucy6@0fa5m9Pr`A9&v4lys3?ptkBzY@LgkHTt_L?|mnI2aLuL>mK>n7E}# zqR#g-d~cZ*`1V9I}=0Yiqx<$YOlMw`9h=xXiN0=A`vQBtu8Aahp z=5P%cC%(^{l<4a$96iWC^baGbqm>zxgmj-y=fm2R1m-yG^{U&+9~@J5qLpxzZ%zrt z5v*<(WV4o(V#H-Sspvy+#`ct@+*)If)E|7h5<*T+PTR37iNaE>F|&Xa{IF9)K~d-0 zi$xIQEG#(VdeSCtG|S|4Bkt@z=h2TvLM4caVC-$iKn2}n=wNm8Im+}Xkpbh3U`oJL zc)zu^cSIvy+Uoj^$*^r++{k7!5e*%x9|Qm*Q(H8A?!6k1QKtbIF~DS1&$XFs#WCQK zAtckO|0uEXu*6F+rZV+88Xgm8-xnsN2mPan|) z*~^*Re~v;`51!wcu~<-415SWlmoBP-U>Dh??Wmg-nlDJGogt+|3V2jM>6Yl601&q^ zyVOBrknQF+GpMgbA})dLF56*E!3n0zjM3i(TMcz> zS+7&3OKGI{Xz;7!m1F8fE`QG@^&vf904w3)kzsXtS(&myKC>J>IAKzCU{kLv;pJ@G7B3hwe?Iu`m{f6$`I9+Zn#N7=*T zy?Fd(>!!}^k+i(*m{*z855R{lmvO2*dQE~C`h{bmRfn!3ixNqsd{FnVeZo)nK)vA) zE_={_CA3AoDYV<S}aRNWX!u-=mF51L0KMXY6P zC;i2=_2LCd50kB>D6TcYU$&b8Er6PBn*8W{5wP=Y(v@P@#KsgkizMK-F~>zWB7)@b z%o!HhoU6DPWu$=;%%Wq2*8ji=9D#hka0ED%yK@u$J?u$cU;1mW=Di;MJ>*GqECRf{ zcd0*M6+RN1fotvi+_l{nigU&1jMnljzfpWZs65tD+|Xc468bOr+59n0@f$<14- zZ_Jfci(lh?JD}dVQTAxBO@+(?k(5YYWOGnm?7uA8FaMlqse>YXI zEyxBELI@+Bc9Y(98&_IvOAHu&k3sGQiG)j%|Mik8%{HM}Ou)!FCyx?AMp zwOe#G_WH3|q~NRYakuCt*0=v~zc8hGEO`7?=TXg&w z6Wqj`MLd)^G89izBa-Cw@jErJ=Hu40$PQ5`L#I<=?uuS5m!oYGJ|1MMvpHY@x1bF_ zlg&rat{tMcyps9_@~rx2e|@WW^-aOwc8CZK>APoh91Ed=3HNj^%aTFbSCvV}t})2l z>{I9?ZnM7wv{v2LfA1C%rqoVBA4^7<;#JWjDKTZiv@Hqs?B@>uP=v>B5jpkPE!sKt zvROp+zw8!;r`;mvwD*f%tM|&O*Ucg_`@?P#F7SD`s6Fi#VMyZH9|B?7fZY2-CvJJl z9-9sRvJtt{##m#+_7M#tTX-m;0#nZZ&<{oXcf9{jn|0&;v)wKItJ_*!sWI8^X1R1J za#V2G*=cyMA3nSBBI$cK-n83pyvln!9&?`89(!1+(W@0%E|i>Jdd@N8bITdy)pDvw z&so~v{8xnfNB%G4f8{|7J_XMI0>S9Yc@26#-2eaqglR)VP)S2WAaHVTW@&6?004NL zeUUv#!$2IxUsI)`l@9G7B9fsxSr8R*)G8FALZ}s5buhW~3z{?}DK3tJYr(;f#j1mg zv#t)Vf*|+-;^yY0=prTlFD@e+I7fw!cybW zJ=5y%2Tjs)mDF_4kjnQ|bqR@??mPG0 zckT>eFc=I5gTY`h7z_r3!C){L3m3 z*CGIM;h{D2m`w06ekdJf2_d-##wVV2b0L7dD2)tg`$Tla7DQ4a^W8|*#pi)BwN(t! z_9QSQ9eqtlOd%vCF+b&~aJcW_1@{4D;%}c2@==0Nj1O6!q$Na$rX`vXl9HHT0Z;|7 z1YnteSHy*P0rdFk6U0c@FvQjQ7{4UwaRSIlLr2h)#TG(R67!bW$SmDKk7kUn$ z&Cd>h>nlNAu@1)&kE=_Ct4qbG3R-IXtn%D0*Kct+TA~V}8qu{$=GOo;0DQyI;O_}9 z@(jQUfKy(4M`&Osv~$2ZJT50y7FQ9&F@F`n8fmEWx14L9066Awb9aQL7H$F62-+{T zuu3g!0Js5Q8^9KTKh>#E02~2mk_m0$3cCDTe%Bd`ThqB0=jxW#cc%y&05$=r&{fy&W#R@3jzCz8e zQ`>98<*d>IZvyx=K*vu2-T`<|dcKG?3wK3HB<**ur%p|~4d8o^=4-s96`TpipHe7C z{5;|BT_u1eGT6DgO@6KkLDZ@JFGkSu0Kne>{^7c3A|B)b^0^W~An-cZvjyNjfWO9^ z?lpiN_1hx=A2^&=wiy?kE3FA@+veCGW9|@s1aLr?bV4gAJRqkf1YzfY$AynU`*dHo zsMV_;|L)w&Egri+=G-B;`70u$Djcx{5W~`br&e!>?4>HQ8|PlOdF(>e$zlmW=IuR^ z%FT+mbTc6fSm!ZCK<`KLxfOu&g|epNHaBNXHH*Ni+D+>mzX&{08J8}P6qW_05j5Wo zw|Qzah#fK2oD~(d)72ZWS@E2-o`^u7c}gM+;ewn6oHD&UWU4s}e6=E3NSg&ONn?{V zU&;UHHUp?LsAXh~vovu77Zuqp0DGRb9+LSV zad|(YjY#F^vIPKKy*(*w_8X$MQ{e@>opY0nmpQqQ`3ML>uC>m!8dL(emUCI7^8aXE z5!Gm>l_c(-t#d=b;O#_LrZ^_EQn7n(iJbggZM;G^<#Vx9mTpkSpH*CTLiEM&GXL+E z#r&uO@CYGS%#qBl3Z}@crYjhdg?6KA9VrC4ZkLSKYjrSq&pAU$OOcD;1NRK<7P9@S~8vOm!C-85V>SA&|@`guptI@p7$D5KfiQlQM)*Em89w z^QTQi;S)l^X=tLXExIMdc0tk|IBjf9xDoSpC1i?GMQp^XlIa-n%)(p;VWpW;`|H&F zZ2;dPd;@(Czz+cKQc$iF!Zp)YaJBncGk=5U-sN0-fwkU}mTl5j$6z~(@0u1O3(`HJ zvQuuH){$4ZXz02_?bYol^4@R-SKCvzcmrb90l4_$y5ny1+}$zP+Q(qiS4A^Fh82`$0W$kpn{b}raM9`ZE&X{zrIb|_ zUvBW&dpvg%tdU0D5w|!Npmv{H04^n*6uZI|Nh^>7aN6%&&+ZiK$cIOC@Spz}Fyw)W zswhX-rkwtjiUp2QODgbgjp6e{aP-L-kj8XFX$kH}GT&{8rfo~vqnim?Kx0U@GYYRU z_)I}5fjEtz{o42Y?g8w~uvASjzoK@%wHfB!A#L9XAus!4L6KGvyFJ~xhc#Z@O^kjx zViaPwCcYqz8>D$flr9!xAK=>Oa62xpx1Zmt9WeeZNZ@vT&$o*3lAm0>3 zv+pU&o+zvpfj279r?K_~v0ac1!bRXAE?ZOdQxgbo z(d{VXw7ir>^R)>;cf?Kdgp4mmeT0inw~rWXp3)X@%wyic-~2U6`YZ1dM{7^F$5j1T ztjAP6`v7}TyKDgjtU%UiihNbUu+F$5URCe`mmPU6z2;oLs=y`6!C){L31^Kf}tTOIRK10ssI207*qoM6N<$g3H{)?EnA( literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output1.png b/core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output1.png new file mode 100644 index 0000000000000000000000000000000000000000..bae0b401462153becac4c23008d255ce2d1a37b7 GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z?|Hg7hE&XX zd&fTOuz|?&kI(&Lizhj>i&V|$Yn`JUe&WLB65SHbA1ZRUedn?`d0e|}AAR)x`B@e% z-#6>Lycxj)G!FzC-Ywhv|3Ki`ZbK!O4cyT+f=oB&fXONGAhyqnA4)6%Z~uK1)>-rV z=}W_3H=Qrn7b|>D@_Do7oFfD4okQ#A-j!mRpjmS5dW!>tWK>L14adCyZu=4TT7V;=HNIwbDhG>zp!UAfy|I&c zP0#LeG~Y5|+3b}+`IHk}b42#spWmH-;0K4oL4L*UKg9ag!Zs*Q5xdXTdO&7_v6}4k*aS691bhP zIanqvbO#ceB8P6V%y9ySlt5OOz7xaIbIUWc3O$qLHweo4$}p_glVi|-FUPQV0pph% fVP#01Ffh!spCNNU?$wUx1|ShnS3j3^P6K-5Z?vV;2^OJUYO&<^aQ6MozJZCk*H4L{9r}^Ze$m{pY{SKW*K;?0%YiP;|-K+hX#Y%>R8Tj^573sC9H(jW-KZNXFOAkChvO`hl7p zmR|qh%3&aLozZLO-Un~L?#$}@m%fo*;wqng4L>8#HJ<%Ps~H&>{@MGrYDG>{Od) z^UGUzELdilC!nxU;992$B;Sl)h^8^gjR(ju7E{{F*t7iRH9phyJEyAIxC zasdbYFF44wu-|%RG9~$d*Q{H`TZ0WWs8IWsJc z6XXb3=nf2xF4q&X4c;6Zn&b}})d>1IpIy_xR^@=(kL*V*6(t{8Dk{FSL~ze?IInKV d1dR-VAIvG*54P-C{67pN;_2$=vd$@?2>_A4;R^r& literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png b/core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..0ecd1df73e0b500f0f9069b3ab900378ed2f0c83 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zojhF}Ln`LH zz2lvC*nr3N;*Q_fyR11*3GHjeb8TY&jZ#t|Q_vz z;u8kGr|cj2rKSi#+=c4Y$Rm$`JxY~ju82L$5O>4mfZlqY?rn#?e?x+Up+PC!;8~B= SkA#=zAQ4YjKbLh*2~7Y^<|7&v> zy{Ijf*&iat2s97`7VKL1l{M#T#m+t@mJ2P~`#2ca{2a&!jekiddeEa)N zROii=$Cv-UN#}Q6pXPi=|JU=+*GuN@Rtn#2c=`6pOY5VX8H8HjJ)I`Np>XhyOO_*p zmuZ*26NA=P5P5bZUqF-;>*2)tA;(|tlwfpQdGvd~B17|>N7F6D7#JS>e;lYWajC9g z)fbfp7S$@JIu4cvA)6GR8UALD9t%@P!O?QBb_WLTKaZ?koi)mq zNgIdPJg>OrDxEc}vNs+Jh#j~He9X$Qh@;7TwKZDXAfuQd9AFjJFi#z3g zoEyM#hOyU>NofbG=@FGX0Xeb@conyaCGeeC5}A^@?=VM%gZ3h3lgCyL*1MSZOnAw# zUd1}#*HRk>h683FBbJEV$vXBU!ZL21^4$RD)3Xl9dNa6LDsD)PRPvoTecRf|TW6XD zFGw(ITzT_Qpdn~2FgzT4fkdDN%jtcEEE5u?m}Y-7HIn(}+!-zOx?$>v>qq!Dloqnz o*t47YOOsVVvAP>1Vi*`~>bd&w_%$9{_8TPP>FVdQ&MBb@08&KX>Hq)$ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png b/core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1bdd0bdc8fca88f160d72d0b5c7a69633eb520 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zuY0;UhE&XX zd&fTSkby|UNB67NUl?p1*^l+zX;t3Jtlro=abdM;*pj@xj#iPIl>S$q+ngN!vre07 z;dfP)!T=Ybd0>!{cl|ea&efk4b6q$tv`X*eU<`ZCAK${TdKQ@E9aj=dG@r&D)uKap}CQniJQ49QMz>E5)KAa_f_>AVG1LDi!y)DC-EC-$^QFe%VH2=^hfGFD+9xi{}!TJDUs7S=2i(UaOgE% zSjobqaW!VbXJrA0#9epQ1t*?<8Ti&XmW3&0$3yF_$^r_Bb~Ve>SeRUnw7rk<>wnWU z>)8&+hK`tqyZ=H>cgL_WsT@(tXn(&%NkAc4Zehs}zItDi0>No~_c>i3^hKnoKBm{FllVmQD354#JbveIgER2jn##S60^SlrEi;P7tt15p^r~M!iPgg&ebxsLQ0Pm;QrvLx| literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-top.png b/core/assets-raw/sprites/blocks/production/electrolyzer-top.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc870c30eda5adf19f098b30d7bcbd6f7467252 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|UU<4VhE&XX zd-GscbAX8J#m~R~|IcxA@|<9Dfg=M{YxkTMJA{ zeT(6&{>2P6^G;npJZ1ZXB?bpJPxgy$S(R8{btb1P!1zU8R7;oQ`?;MT?$48-$~ehV zFl#^S+{kMe^Vk2F5-6=OQ*fb`!zKBJb`F2|kx zPfx`0?fZ}0Y4S$pd%};3FuUm8+6g~EgTnv(@@0CVJGXB5@7_P(uC@xoRp%uc+Mnd^kt0z0h9>Z z#iNt(?#BZG21p2&ZFK+%LKuM6mmnzuYYB=_uxDQ$bAo?_J-&{k!Fi9TF@NYXG*bAj zP`t;}%ApGoHT+h+D@S`HQ08rZ&Ug1YXFb8PeG0zG=8iFZ6>%7_F zM?x?Ipw2}LwhEs@(E1&l0)R}s9GqJu)j#z-qX(dUF%c3VN059~k?;`&?PX&r0Awj^ z6^n*XA#lT&AcO^|o%{Re>s@OV%n84T&X? zub-gFTLQGkA3+EYaD|^5g>e1%tEJCN0rK&#hJ;Toi(3Hn5K>qk5wrlP^F)s%k#o2RNcd6!E&?~i76Nh(`=LDg zdG1n#gg*j+B1pq85zx=GUQ3ZS>WT;re-wa17!6<2TmWhawPh#$4p;)Tmb@9^y8`40 zt?=_7V@dd02wvg41Ehwm#U%n7{s@9+@a6!$LD6gRguo4-gOE4re8K@xgQ5UelZG!r z7@b!L0CZrF@Hq(D^P2*|9o!>)1i^Zq!vM&gu(SY=@OucFe{3dq!pL3_G|*xP7r|sN zsJFwH5Oxed9Vh~olL&z76c%3mkggDDPSpX>PD$NO4h?`-RtEq$+yTxK^#7Q$1f3t@ zzsJ-c;d2=p;4-v@Ko!Gj=SECefCj?Zia48bdu_&{MV{?wV*sjH4!{Tk@{D=Q2QpNX zyeK6JpL)i;^&`nzOIHWfL-|nzXAy?tFncvyh^615DU1CS%+mzq8JtpN~(vj1wq z41m4w5`I_!6rt6(CIEsU4L>vh)laYAX3>oBa{z8FX!zj) z(21AlbPET=F9A5UZ1W9}_D4+`3BLxwsRc!F2hc=leU`HXZ~-{AP$7;iWhVbF}IcB8#5rnt>^qB~nV@9mMhj8~qX#`g{z0&9Q1}NSK==nCK==p2C;UJEyJx0n&GKCU0000%Om|gs)Ga%m4F)~ z@DK^8Ap>V6yp2NOjKug`a5PSVKHy3TQxGdq=GEKt=2}}>lYbaUH_fdP>qVAon}oPX z(7)h<*XPH_J5wTh7x+f*lkiS~4-gx18}^ak7nto%^bOa>HveYekKYe#oh%Y-&9+Wl zaB~;HQ{aNzYA75MD6&)|=RqsMz`X)RmQu$t3s(v}ip#uGtNomD5ux3{Yrwo*q&fB?J&c~iJJ4$E zwXxs^7FJxq7AuUBo!S2v1Pguz*@5@6yE7tv`gEKD`@!?PDYUim{6PPY`oMyRO2EYk zJVXL2WZ*hV@RfX3y0zbZsTqFLlz*NzFf1Mm)LaBU6k z0lE4F@OF^L_t(oh3%ES5dt9)g%>03;d;2-#6qmVimbpwOw6x`>p?S& za8{1}Wz`w=&0Hc2@8hiiz+WF$vQC)hoVoFFNTxN_#gefXL@crzTS3^tUULluIS^$o zL9ALo9#7X$b52bF0D#N+#!eiEl<+4RQHd@l*1O;C)(c~+34b@2OrQuSQ7kj0*KUa0l1Fgt0i7UScm=QQ6Kd@yA#kJOX;dM z0o3Vm3v1tqW`Xn?;#Ty^)q=?9n%s%jq?JaQt4WG2h}fwF!L}f>*OXKS-XywP;03WH i=ZcsDc}L5>PZf9e7ka+3O7I>40000A>0F@O3=L_t(oh3%C+4gw(%g$Ijm^(-b-dmzu`fviY8i?-Xa6$V-6 zmr)b-CELir`*c83F@OC@L_t(oh3%D14uUWcg+biw9Y{EU31{+5o{7W*kZ=b*fT^pJ zI?jJbP1KjLq0_#vZzye=zdo$iIw4IXI-Jzo=f*olR!%}#90e24}xPE$$DB6Nj*MIYkTp&$L%8vv`0d6IL z3;~mXi+MlVhXlBf&-#aR0caI@L|p)p`Yiz0F?_YeA5p3Oaail4u4i`w>id4|Tdvjw z0MlWwS;2U%(-=XOt*Di&1(DY^xf87kmPVedNs29q*r^1;wji?ClvD=ZB&u8B1+gUO hju?Y^N6WrXcN8?Kc^iB_R}ugK002ovPDHLkV1hU$e*ORe delta 282 zcmV+#0pT22F@O9?L_t(oh3%C+4gw(%g$FAw_avKG+IkvKl2M2c--u>`^cvz;^vczO$mg2eiPof*MwzQgiYa%Bs|&&2zb2nFKg8DpQK`(^K;pSo5p$^HKqY Cz7RnG delta 34 ocmZpW`Yg%Buwx_B9Inl4xLlY7+43tY(^K;pI5H|zit>Rh0LI`8f&c&j diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6c0fc1209e..6d43933bef 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -60,7 +60,7 @@ public class Blocks implements ContentList{ //crafting siliconSmelter, siliconCrucible, siliconArcFurnace, kiln, graphitePress, plastaniumCompressor, multiPress, phaseWeaver, surgeSmelter, pyratiteMixer, blastMixer, cryofluidMixer, melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge, - oxidizer, heatReactor, carbideCrucible, + electrolyzer, oxidizer, heatReactor, carbideCrucible, cellSynthesisChamber, //sandbox @@ -935,6 +935,7 @@ public class Blocks implements ContentList{ craftTime = 30f; size = 2; hasPower = hasItems = hasLiquids = true; + rotatePlan = false; consumes.liquid(Liquids.oil, 0.1f); consumes.power(0.7f); @@ -946,10 +947,46 @@ public class Blocks implements ContentList{ consumes.power(0.50f); }}; + //TODO better name + electrolyzer = new GenericCrafter("electrolyzer"){{ + requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); + size = 3; + + craftTime = 10f; + rotate = true; + + liquidCapacity = 100f; + + consumes.liquid(Liquids.water, 1f); + consumes.power(2f); + + drawer = new DrawMulti( + new DrawRegion("-bottom"), + new DrawLiquidRegion(Liquids.water), + new DrawBubbles(Color.valueOf("7693e3")){{ + sides = 10; + recurrence = 3f; + spread = 6; + radius = 1.5f; + amount = 20; + }}, + new DrawRegion(), + new DrawLiquidOutputs(), + new DrawRegion("-top"), + new DrawGlowRegion(){{ + alpha = 0.5f; + color = new Color(1f, 0.22f, 0.22f); + }} + ); + iconOverride = new String[]{"-bottom", "", "-top"}; + + outputLiquids = LiquidStack.with(Liquids.ozone, 0.5f, Liquids.hydrogen, 0.5f); + liquidOutputDirections = new int[]{1, 3}; + }}; + oxidizer = new HeatProducer("oxidizer"){{ requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); - //TODO bigger? - size = 2; + size = 3; //TODO multi liquid output //converts oxygen (?) + beryllium into heat + oxide diff --git a/core/src/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java index 5f40b987cc..94db84a5e2 100644 --- a/core/src/mindustry/content/Liquids.java +++ b/core/src/mindustry/content/Liquids.java @@ -58,17 +58,18 @@ public class Liquids implements ContentList{ }}; //TODO reactivity, etc - ozone = new Liquid("ozone", Color.valueOf("bdd7ff")){{ + ozone = new Liquid("ozone", Color.valueOf("f099da")){{ gas = true; - barColor = Color.valueOf("97bdf7"); + barColor = Color.valueOf("d699f0"); explosiveness = 1f; flammability = 1f; }}; //TODO combustion - hydrogen = new Liquid("hydrogen", Color.valueOf("e8d1ff")){{ + hydrogen = new Liquid("hydrogen", Color.valueOf("97a5f7")){{ gas = true; - barColor = Color.valueOf("c599f0"); + barColor = Color.valueOf("7d8be0"); + flammability = 1f; }}; //TODO dicyanoacetylene diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 75fb1fe866..5332a455d8 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -567,6 +567,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, liquids.add(liquid, amount); } + //TODO entire liquid system is awful public void dumpLiquid(Liquid liquid){ dumpLiquid(liquid, 2f); } @@ -585,9 +586,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, for(int i = 0; i < proximity.size; i++){ incrementDump(proximity.size); - Building other = proximity.get((i + dump) % proximity.size); - if(outputDir != -1 && (relativeTo(other) + rotation) % 4 != outputDir) return; + Building other = proximity.get((i + dump) % proximity.size); + if(outputDir != -1 && (outputDir + rotation) % 4 != relativeTo(other)) continue; other = other.getLiquidDestination(self(), liquid); diff --git a/core/src/mindustry/type/LiquidStack.java b/core/src/mindustry/type/LiquidStack.java index 9250d24c8e..d233697302 100644 --- a/core/src/mindustry/type/LiquidStack.java +++ b/core/src/mindustry/type/LiquidStack.java @@ -1,6 +1,5 @@ package mindustry.type; -import arc.math.*; import arc.struct.*; import mindustry.content.*; @@ -38,7 +37,7 @@ public class LiquidStack implements Comparable{ public static LiquidStack[] mult(LiquidStack[] stacks, float amount){ LiquidStack[] copy = new LiquidStack[stacks.length]; for(int i = 0; i < copy.length; i++){ - copy[i] = new LiquidStack(stacks[i].liquid, Mathf.round(stacks[i].amount * amount)); + copy[i] = new LiquidStack(stacks[i].liquid, stacks[i].amount * amount); } return copy; } @@ -46,7 +45,7 @@ public class LiquidStack implements Comparable{ public static LiquidStack[] with(Object... items){ LiquidStack[] stacks = new LiquidStack[items.length / 2]; for(int i = 0; i < items.length; i += 2){ - stacks[i / 2] = new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).intValue()); + stacks[i / 2] = new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).floatValue()); } return stacks; } @@ -54,7 +53,7 @@ public class LiquidStack implements Comparable{ public static Seq list(Object... items){ Seq stacks = new Seq<>(items.length / 2); for(int i = 0; i < items.length; i += 2){ - stacks.add(new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).intValue())); + stacks.add(new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).floatValue())); } return stacks; } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 76f20d8090..e05dff979f 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -90,6 +90,8 @@ public class Block extends UnlockableContent{ public boolean solidifes; /** whether this is rotatable */ public boolean rotate; + /** if set to plan, the plan region won't rotate when drawing */ + public boolean rotatePlan = true; /** number of different variant regions to use */ public int variants = 0; /** whether to draw a rotation arrow - this does not apply to lines of blocks */ @@ -544,7 +546,7 @@ public class Block extends UnlockableContent{ public void drawRequestRegion(BuildPlan plan, Eachable list){ TextureRegion reg = getRequestRegion(plan, list); - Draw.rect(reg, plan.drawx(), plan.drawy(), !rotate ? 0 : plan.rotation * 90); + Draw.rect(reg, plan.drawx(), plan.drawy(), !rotate || !rotatePlan ? 0 : plan.rotation * 90); if(plan.worldContext && player != null && teamRegion != null && teamRegion.found()){ if(teamRegions[player.team().id] == teamRegion) Draw.color(player.team().color); diff --git a/core/src/mindustry/world/blocks/Autotiler.java b/core/src/mindustry/world/blocks/Autotiler.java index 03e0b7e01a..d6b47c8f02 100644 --- a/core/src/mindustry/world/blocks/Autotiler.java +++ b/core/src/mindustry/world/blocks/Autotiler.java @@ -201,8 +201,13 @@ public interface Autotiler{ /** @return whether this tile is looking at the other tile, or the other tile is looking at this one. * If the other tile does not rotate, it is always considered to be facing this one. */ default boolean lookingAtEither(Tile tile, int rotation, int otherx, int othery, int otherrot, Block otherblock){ - return (Point2.equals(tile.x + Geometry.d4(rotation).x, tile.y + Geometry.d4(rotation).y, otherx, othery) - || (!otherblock.rotatedOutput(otherx, othery) || Point2.equals(otherx + Geometry.d4(otherrot).x, othery + Geometry.d4(otherrot).y, tile.x, tile.y))); + return + //block is facing the other + Point2.equals(tile.x + Geometry.d4(rotation).x, tile.y + Geometry.d4(rotation).y, otherx, othery) || + //does not output to rotated direction + !otherblock.rotatedOutput(otherx, othery) || + //other block is facing this one + Point2.equals(otherx + Geometry.d4(otherrot).x, othery + Geometry.d4(otherrot).y, tile.x, tile.y); } /** diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 17f66b7d61..86a535185e 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.production; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.struct.*; @@ -13,6 +14,7 @@ import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.consumers.*; import mindustry.world.draw.*; import mindustry.world.meta.*; @@ -38,6 +40,8 @@ public class GenericCrafter extends Block{ public boolean legacyReadWarmup = false; public DrawBlock drawer = new DrawBlock(); + /** If set, the icon is overridden to be these strings, in order. Each string is a suffix. */ + public String[] iconOverride = null; public GenericCrafter(String name){ super(name); @@ -48,6 +52,7 @@ public class GenericCrafter extends Block{ sync = true; ambientSoundVolume = 0.03f; flags = EnumSet.of(BlockFlag.factory); + drawArrow = false; } @Override @@ -69,13 +74,37 @@ public class GenericCrafter extends Block{ public void setBars(){ super.setBars(); - //set up liquid bars for multiple liquid outputs; TODO multiple inputs not yet supported due to inherent complexity - //TODO this will currently screw up input display if input liquids are available - no good way to fix that yet - if(outputLiquids != null && outputLiquids.length > 1){ + //set up liquid bars for multiple liquid outputs + //TODO this will currently screw up input display if input liquids are filters - no good way to fix that yet + if(outputLiquids != null && outputLiquids.length > 0){ bars.remove("liquid"); + Seq consumed = new Seq<>(); + + //find list of liquids consumed + if(consumes.has(ConsumeType.liquid)){ + var consl = consumes.get(ConsumeType.liquid); + if(consl instanceof ConsumeLiquid liq){ + consumed.add(liq.liquid); + }else if(consl instanceof ConsumeLiquids multi){ + for(var stack : multi.liquids){ + consumed.add(stack.liquid); + } + } + } + + //display consumed first + for(var liq : consumed){ + bars.add("liquid-consume-" + liq.name, entity -> new Bar( + () -> liq.localizedName, + liq::barColor, + () -> entity.liquids.get(liq) / liquidCapacity) + ); + } + + //then display output buffer for(var stack : outputLiquids){ - bars.add("liquid-" + stack.liquid.name, entity -> new Bar( + bars.add("liquid-output-" + stack.liquid.name, entity -> new Bar( () -> stack.liquid.localizedName, () -> stack.liquid.barColor(), () -> entity.liquids.get(stack.liquid) / liquidCapacity) @@ -84,6 +113,11 @@ public class GenericCrafter extends Block{ } } + @Override + public boolean rotatedOutput(int x, int y){ + return false; + } + @Override public void load(){ super.load(); @@ -93,13 +127,13 @@ public class GenericCrafter extends Block{ @Override public void init(){ - outputsLiquid = outputLiquid != null; if(outputItems == null && outputItem != null){ outputItems = new ItemStack[]{outputItem}; } if(outputLiquids == null && outputLiquid != null){ outputLiquids = new LiquidStack[]{outputLiquid}; } + outputsLiquid = outputLiquids != null; super.init(); } @@ -114,6 +148,13 @@ public class GenericCrafter extends Block{ @Override public TextureRegion[] icons(){ + if(iconOverride != null){ + var out = new TextureRegion[iconOverride.length]; + for(int i = 0; i < out.length; i++){ + out[i] = Core.atlas.find(name + iconOverride[i]); + } + return out; + } return drawer.icons(this); } diff --git a/core/src/mindustry/world/consumers/ConsumeLiquid.java b/core/src/mindustry/world/consumers/ConsumeLiquid.java index 4d499bda1d..7dc1e557ec 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquid.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquid.java @@ -9,6 +9,7 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; +//TODO replace with ConsumeLiquids public class ConsumeLiquid extends ConsumeLiquidBase{ public final Liquid liquid; diff --git a/core/src/mindustry/world/consumers/ConsumeLiquids.java b/core/src/mindustry/world/consumers/ConsumeLiquids.java index ddefd5d4ff..a38e4dc725 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquids.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquids.java @@ -2,6 +2,7 @@ package mindustry.world.consumers; import arc.scene.ui.layout.*; import arc.struct.*; +import mindustry.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.ui.*; @@ -38,7 +39,7 @@ public class ConsumeLiquids extends Consume{ int i = 0; for(var stack : liquids){ c.add(new ReqImage(stack.liquid.uiIcon, - () -> build.liquids != null && build.liquids.get(stack.liquid) >= stack.amount * build.delta())).padRight(8); + () -> build.liquids.get(stack.liquid) >= stack.amount * build.delta())).size(Vars.iconMed).padRight(8); if(++i % 4 == 0) c.row(); } }).left(); @@ -63,6 +64,7 @@ public class ConsumeLiquids extends Consume{ @Override public void display(Stats stats){ + //TODO display is wrong stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(stats.timePeriod, stats.timePeriod >= 0, liquids)); } diff --git a/core/src/mindustry/world/draw/DrawBubbles.java b/core/src/mindustry/world/draw/DrawBubbles.java new file mode 100644 index 0000000000..7665ff6d25 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawBubbles.java @@ -0,0 +1,47 @@ +package mindustry.world.draw; + +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +public class DrawBubbles extends DrawBlock{ + public Color color = Color.valueOf("7457ce"); + + public int amount = 12, sides = 8; + public float strokeMin = 0.2f, spread = 3f, timeScl = 30f; + public float recurrence = 6f, radius = 3f; + + public DrawBubbles(Color color){ + this.color = color; + } + + public DrawBubbles(){ + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} + + @Override + public void draw(GenericCrafterBuild build){ + if(build.warmup <= 0.001f) return; + + Draw.color(color); + Draw.alpha(build.warmup); + + rand.setSeed(build.id); + for(int i = 0; i < amount; i++){ + float x = rand.range(spread), y = rand.range(spread); + float life = 1f - ((Time.time / timeScl + rand.random(recurrence)) % recurrence); + + if(life > 0){ + Lines.stroke(build.warmup * (life + strokeMin)); + Lines.poly(build.x + x, build.y + y, sides, (1f - life) * radius); + } + } + + Draw.color(); + } +} diff --git a/core/src/mindustry/world/draw/DrawGlow.java b/core/src/mindustry/world/draw/DrawGlow.java index 47748cad06..8db84eccb2 100644 --- a/core/src/mindustry/world/draw/DrawGlow.java +++ b/core/src/mindustry/world/draw/DrawGlow.java @@ -7,6 +7,7 @@ import mindustry.world.*; import mindustry.world.blocks.production.GenericCrafter.*; public class DrawGlow extends DrawBlock{ + public String suffix = "-top"; public float glowAmount = 0.9f, glowScale = 3f; public TextureRegion top; @@ -20,6 +21,6 @@ public class DrawGlow extends DrawBlock{ @Override public void load(Block block){ - top = Core.atlas.find(block.name + "-top"); + top = Core.atlas.find(block.name + suffix); } } diff --git a/core/src/mindustry/world/draw/DrawGlowRegion.java b/core/src/mindustry/world/draw/DrawGlowRegion.java new file mode 100644 index 0000000000..b9dc5511e6 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawGlowRegion.java @@ -0,0 +1,45 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.graphics.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawGlowRegion extends DrawBlock{ + public Blending blending = Blending.additive; + public String suffix = "-glow"; + public float alpha = 0.9f, glowScale = 3f; + public float layer = Layer.blockAdditive; + public Color color = Color.red.cpy(); + public TextureRegion top; + + @Override + public void draw(GenericCrafterBuild build){ + if(build.warmup <= 0.001f) return; + + float z = Draw.z(); + Draw.z(layer); + Draw.blend(blending); + Draw.color(color); + Draw.alpha(Mathf.absin(build.totalProgress, glowScale, alpha) * build.warmup); + Draw.rect(top, build.x, build.y); + Draw.reset(); + Draw.blend(); + Draw.z(z); + } + + @Override + public void load(Block block){ + top = Core.atlas.find(block.name + suffix); + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} +} diff --git a/core/src/mindustry/world/draw/DrawLiquidOutputs.java b/core/src/mindustry/world/draw/DrawLiquidOutputs.java new file mode 100644 index 0000000000..c650f6b524 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawLiquidOutputs.java @@ -0,0 +1,61 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** This must be used in conjunction with another DrawBlock; it only draws outputs. */ +public class DrawLiquidOutputs extends DrawBlock{ + public TextureRegion[][] liquidOutputRegions; + + @Override + public void draw(GenericCrafterBuild build){ + GenericCrafter crafter = (GenericCrafter)build.block; + if(crafter.outputLiquids == null) return; + + for(int i = 0; i < crafter.outputLiquids.length; i++){ + int side = i < crafter.liquidOutputDirections.length ? crafter.liquidOutputDirections[i] : -1; + if(side != -1){ + int realRot = (side + build.rotation) % 4; + Draw.rect(liquidOutputRegions[realRot > 1 ? 1 : 0][i], build.x, build.y, realRot * 90); + } + } + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + if(crafter.outputLiquids == null) return; + + for(int i = 0; i < crafter.outputLiquids.length; i++){ + int side = i < crafter.liquidOutputDirections.length ? crafter.liquidOutputDirections[i] : -1; + if(side != -1){ + int realRot = (side + plan.rotation) % 4; + Draw.rect(liquidOutputRegions[realRot > 1 ? 1 : 0][i], plan.drawx(), plan.drawy(), realRot * 90); + } + } + } + + @Override + public void load(Block block){ + GenericCrafter crafter = (GenericCrafter)block; + + if(crafter.outputLiquids == null) return; + + liquidOutputRegions = new TextureRegion[2][crafter.outputLiquids.length]; + for(int i = 0; i < crafter.outputLiquids.length; i++){ + for(int j = 1; j <= 2; j++){ + liquidOutputRegions[j - 1][i] = Core.atlas.find(block.name + "-" + crafter.outputLiquids[i].liquid.name + "-output" + j); + } + } + } + + //TODO + @Override + public TextureRegion[] icons(Block block){ + return super.icons(block); + } +} diff --git a/core/src/mindustry/world/draw/DrawLiquidRegion.java b/core/src/mindustry/world/draw/DrawLiquidRegion.java new file mode 100644 index 0000000000..ac2e1ce14f --- /dev/null +++ b/core/src/mindustry/world/draw/DrawLiquidRegion.java @@ -0,0 +1,44 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.graphics.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawLiquidRegion extends DrawBlock{ + public Liquid drawLiquid; + public TextureRegion liquid; + public String suffix = "-liquid"; + + public DrawLiquidRegion(Liquid drawLiquid){ + this.drawLiquid = drawLiquid; + } + + public DrawLiquidRegion(){ + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} + + @Override + public void draw(GenericCrafterBuild build){ + + if(drawLiquid != null){ + Drawf.liquid(liquid, build.x, build.y, + build.liquids.get(drawLiquid) / build.block.liquidCapacity, + drawLiquid.color + ); + } + } + + @Override + public void load(Block block){ + liquid = Core.atlas.find(block.name + suffix); + } +} diff --git a/core/src/mindustry/world/draw/DrawMulti.java b/core/src/mindustry/world/draw/DrawMulti.java index 78262a2dd1..eeb9614b98 100644 --- a/core/src/mindustry/world/draw/DrawMulti.java +++ b/core/src/mindustry/world/draw/DrawMulti.java @@ -1,7 +1,10 @@ package mindustry.world.draw; import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; import mindustry.world.*; +import mindustry.world.blocks.production.*; import mindustry.world.blocks.production.GenericCrafter.*; /** combined several DrawBlocks into one */ @@ -24,6 +27,13 @@ public class DrawMulti extends DrawBlock{ } } + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + for(var draw : drawers){ + draw.drawPlan(crafter, plan, list); + } + } + @Override public void drawLight(GenericCrafterBuild build){ for(var draw : drawers){ diff --git a/core/src/mindustry/world/draw/DrawRegion.java b/core/src/mindustry/world/draw/DrawRegion.java new file mode 100644 index 0000000000..50206d5d10 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawRegion.java @@ -0,0 +1,42 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawRegion extends DrawBlock{ + public TextureRegion region; + public String suffix = ""; + /** Any number <=0 disables layer changes. */ + public float layer = -1; + + public DrawRegion(String suffix){ + this.suffix = suffix; + } + + public DrawRegion(){ + } + + @Override + public void draw(GenericCrafterBuild build){ + float z = Draw.z(); + if(layer > 0) Draw.z(layer); + Draw.rect(region, build.x, build.y); + Draw.z(z); + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + Draw.rect(region, plan.drawx(), plan.drawy()); + } + + @Override + public void load(Block block){ + region = Core.atlas.find(block.name + suffix); + } +}