From a1107eae13b24cc63396526b71b9479ecb591f5f Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 11 Nov 2021 18:52:51 -0500 Subject: [PATCH] WIP heat reactor system --- .../blocks/production/heat-reactor-glow.png | Bin 0 -> 5483 bytes .../blocks/production/heat-reactor-heat.png | Bin 0 -> 5804 bytes .../blocks/production/heat-reactor-top1.png | Bin 0 -> 765 bytes .../blocks/production/heat-reactor-top2.png | Bin 0 -> 780 bytes .../blocks/production/heat-reactor.png | Bin 0 -> 2006 bytes core/assets-raw/sprites/units/incite.png | Bin 0 -> 896 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3253 -> 3267 bytes core/src/mindustry/content/Blocks.java | 10 +- core/src/mindustry/content/Items.java | 2 +- core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/world/Block.java | 11 ++ .../world/blocks/heat/HeatBlock.java | 14 ++ .../world/blocks/heat/HeatProducer.java | 131 ++++++++++++++++++ .../world/blocks/production/BeamDrill.java | 16 +-- gradle.properties | 2 +- 16 files changed, 172 insertions(+), 17 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/production/heat-reactor-glow.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-reactor-heat.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-reactor-top1.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-reactor-top2.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-reactor.png create mode 100644 core/assets-raw/sprites/units/incite.png create mode 100644 core/src/mindustry/world/blocks/heat/HeatBlock.java create mode 100644 core/src/mindustry/world/blocks/heat/HeatProducer.java diff --git a/core/assets-raw/sprites/blocks/production/heat-reactor-glow.png b/core/assets-raw/sprites/blocks/production/heat-reactor-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..236059e1c826ce74210fbc898cbbb5250334f3b8 GIT binary patch literal 5483 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^TM=TwD6lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNQ(xBeF=vlF#LTWtSz>_oo&yXP>bZ|EW}vjGW|kHK_FK`5PKb zdqUQ*$P|<>nf3qY_n`lej%UB0%CC7`Xz{b-;_*38ov%G#{-%8K-@5zuALSnXFaLe@ zbwld(-ONZ*S)R*&8^s z{G{sg?cTZH-TuzoF}>*jpX|tV<^QY8t%V|`8rdzgmmB-N|6UXJ;K}(Nr|#E2x9R(I zbN8Ze>nifyobI)L&)HfxdqKHpo!!d*oAtH7Ce%c~uluezU0nBQyFdSo4~hG$ZIA7% z-B7*u#6J6gMf2=ii~nDfs$5&SXtmv>ixt{g>bGsSKRn`g>h3BZ7M`<~ z?#f$U)OYvWRpX1K)=a!s$Y%inc zqnnLK1OD85kr88X@kL6mQJYN~!>ToRtn#HfW(d4Vn0U=ve65#RbfwvKmCfh39(2>* z{ZOreLvI(0+0oDgpX>tcPo`(BU=y$5P;3*~#HD)W#iD-2V>1>_i1F3?DH7zP`7|Wx ztln>#qBEM$V~TXQSy&iMi3mEmbV}6PRW>V%)}Q)0)%L8}^%`#7ZC8r4*Or}H{#&l< z&C2I-RkCF}7=3#zE}dB1W7Rv$;OH0QGZvT6Y(BGV#nz|O;uDWf4U0>?DxM{Nb$;Cb z##uX8-0Yn)XL{ULywQromv}=ChZgu)wO4V8uU(LLGHo@(oMeF7r>Fob!ROByHy?iU8@2JM! z0)uU5H+_3*cyT7@7Sqxz*RwW-zfWFv>3r?XUAvZ6L_K%GGCYo6=rM zwBEj~b8*sv1Hnn9yWB4aM=f0U;@U1pjmR&;?PAw1Y*KB|GWG6%`&?pn+I+o+y6|M@Yo8idF5%eL_ejHb!qH31ZnV9$niAA*5Se{+mZF{VRu-0p8Mj4O zI&P4*et6l_^86LGnuzeVpP!rVio3og)@!8)yNYn6z!SFg*?xhQ^Brd`ceSB#&1cx6_MRw}aax^RKgMew;6GGDvmD>^*Zb4)4hOy~F+EnoG`+I986FoW%BbZ}V5L63H|<G* zoaQ$kudSvEmz^Sw-|>Zf-hIhcQBQWs97ET%W6x4PhTQ7n;X0$lB53v3B4+bemb=-f zTLeG(?C74R^<#;FVawT6iK@J_UW``XR*LkBPt;;D?YyKXQIj2ZT;}oCDw)3_x{VXA z&DnQi&#&4QYs7P{6|;;3^|RJ#DfPFeMrP%g^m)nU@@-Q-8WQgysB_BAEKaei=8muu z<6D8Ny@u=i6}QcIYB71HKYi7`Z$7?7#)5l7b=;ILpR<(FH|UuX*xqnV#7KFMXZC}e z3#6jFZI+m88VW^8z5F5;=a5o8@0!;8l-XbZuetqaRloJV{jLp>FJ;ogw=*%XWSE#8 zYrWCYaD`RU-Kgn)vx1U156;*YH|f-reJ8J(ReN&H3Qpobrnd6iF*zUG`sGSl(OxN6 z9$dK|_E$0Vd{@n-EgLt!3voGq=5fzPk=-f^H%(Yiu&r^_^N2O{(s|-2!np08(AOf1 zUrPgyKM*Mv(Ry?4ZS=wu7ba|5s_@_J=)P0O%vOlS-J0m=J@<}>eX_l<%0ZiCe{17q zC&G1(p1XTq*&{{C&&6!Uf&FXaRrRmG!b zpME~|Zz_lGy6lCqR$*T@URb>Pv5P#vFPpDh`1W?bHFvmjogzF{LS|ffcw4P_!U4gE zJ;DiI3Cm=6yc66j`)F-udz{<((k)Zh%R60>mSj+}*6`n?4+{bybZ4OhvzoMgVvqoni9 zQ`txxrf;GmueLHD6TbhYWx|P{Iq!8M^gpj%^0{#n#D9vxyZn^Ol=>IYR4NrNrAyl9o}^ z&#UB4zql{->4M`e>IddAx=!ro+3~ioB5qRfg}=sgT~0eR@7vw+;!*$Um@Ov`2`%xq zDRnD32?fuFtENmL>P{Q##S^OJ6MmF7{J0^z zpeZVq?e<=uhBM72Z#s5QZFbz4{mk#u$-Tl0EZn*J8Q(O24y;e?oF~Z5W_tX_-YpNM zc7MxgKDe=S^X^9lb7UVWe~8*rW!XMPnDwG?mP>xN9Y*WznFLa(7G>Ce6227+kc9(PLo`GSY2a*eOT%7 zmgYmN-Z6H}NHIIzdfte^@R0dauahPHJq~B|j;P!(=?Kr=`>!o$|HH-6$sU*Fo|kDD z=^CCrd0k!T)XZsNPHsxG%9g2m$1k}5s?Xco$#L(`>92cZcBS*kJeWJ})rKp~YfF|d zZTWCitjPZIBqO#s51*~oF=<*LT13yapgDZ9VkE37tl^L_2eucc?})~8&Rx7ZqeDE&`R!v`L9evb1w zm-N`)olz5Sww*1*^I*En#H%*Z)AP6Z6lP0l7i3+@6rGqVEDMXhxvC(89Rdo5rtIe1CRW&guKQck*36xd#K6GVn(6Eu;OXoPYo{|XRLrTJXzOv6Bb%+ zRnU60B2>evH9&jItAwJL@+O%cK`}C{*PEK{yF=N<(_>|0SRFsGA31y0^P;QQA3e=2 z9UuE1%ia5ZZ~E@{4E2i-g>2522{1kFp)TxXwq1)Q{-S%aK;jXVv{%K8W;8wjv8%oR zeR<)$r?KCkzX<=N#$3bnQRgymcSUnW)#Xc;?}gnXJcByUcP6vNPWUnL^`_JLbGrF{ zSEd~~vE+HD@)4(v%}@E#RGn4lDfMZsa{Kvj&1tUZy63W%9*g?^M4#vB)~TuME=xHI zbw@ODFdAiPEN0>^yk#2Xv*e}C!-w)^f0TBn6iq#NVq=3=h)19NAO5=U*K~aRc6csi zx$rmXw)|p;0`ZJ%xxatk*fv|;;eq6iOSk@IG0*s^viIJ#MeYt2(mQtKWq*<@*vZUe z`*M<^Wl+Pk{Q(U3&cB#lbl`yQh277-tu5`l%&y?P*Xu3=d;5WiiJPw5-n)DG=JxvR zsK37%3z~|SolJNn#lXP8mgMd3!tjG(5yPTn<=2`F3=EtF9+AZi4BWyX%*Zfnjsyb( z1AB?5uPgggZf z|7y?DD|LO0rc2(3J2o&)5Pn?1<*}3@lY0%v2fv;CO8ZX5PJB?tu#d$puA@PD{f+0H zKTEha&N^S@BXo!Fz;kWk^*j*_sm|+XdxUuWk36!SrCvEsJEh05>9*hx#sx8ZycRIM z$ga<25&X0{G*!La+JygaCfBBa*|+t> z+@Im@EwALy$oFzi?O?u;Ph$yl+g!q!!1thYk#qElx&NybjDOfF-M2jZLG@={SkQwk9icA4 z;<_1gjhUY7HYC@}RxMy+^ya^ypUO6!X+h7TR~LR)yZ=l7m*3dX%KmTq{-V^mH&%(Z zDJ+!WsL4&#$tc_Rm0|Dq>(&h01-Cz!Q|OT8u9?!1_Wz9VZ@vSZ4Z#famFx5wYywJB zChBIT9(+H$CFgCT%c8RjzmU_Wr2<;Mqxc~zJAGWVW1s>twk#`iWnr1Lm7}8Ycaggb*zCF6ZGZHIevLi2Yi*|ykE4rO!LLFSr3ilqmcj>}{wH+Rx*J{69s5Pxtv7;{V$NqJ~Myr|YPHC<% zOAuQ7WJ>I>Lz-Lo!kStxT#pQzSZev`hnlB@j_H=UbN~NrdO4ka8fQfJv0Ib0?y&#A zw=GcYZI9n1hNW6l{#LQseTkoSOP%36LmgAa5{(X5hZ%qS|Ji=O=N>#ec*@DP`(lE% zAxCa9Y?eE9Ccg9Dxyr*c>)9VzH^~31Ep}|^X<)tkxV`>;>|qa!<<%`3-m*-->a4D5 zPM)!68O}|fKli(-N(|EvFBTh(2S=_oST0@QaNznZ(}#EZUta8==ouCq5dU|_f)Y|>$+0EebDhBy+gMu9Tsj;>6=>p^h)8=YSu;bJ92iaeerV0za8*A zM$>~sQ{&6^r-jKsK5UHpyLtb!&O2umGJgLLa*2O)M)A&T&o#!cKBmvVdm-*MgOVfD zVN*v>hx036G)8Rrsp9jlMnyxlpnPz3c8>*gQ}0dt8U6O3sVJpKb{h zmFbVDw5`Z-bk+6vX)bkUn#N&0?Agt|Yv{jodax314S@anp$ zk?ZG$aR!)odOVn{zj9ZEYS0}8GY&>2t~o}^*PA#z4=h`z(DioLoS^0trJh0oZXR;3 zD@@C@59Rc5teB|yNi%Yuhoe#J&J#ZFXZLRTeNtq}-PJ+|s~2~9l(;NaTd^S4GfS{c zDb}*J<%(pB+NCbtLo26jlNSt7K4Gf+kUAnlwhb?D;wDH z&Ea;K%bF9H(*Ao#3C?P&3djvGOgPtn_Mh6KmEIw)!Fm_pv8_5jFX&Hcll`Ohvt5k+ zmO1X!EuH+f?b;k}V*|&&2=!UJ7(X!XcMVQop(Xa?OqlSWO`jf}`Tb)8gZzrF{e4Gn zZ3*8rWs1i1gPB^hxLD>mOz+7!wWFY4SZP7;4{xoi1?65z{8| zTKso~tH|xjhciF2P1;6*KQt*D)@-1i@Q^;0FftM@&Oia}a=1t9A^rq`n{w@23|GICT zH|>63cQQ!m)`F><>~t>t31pRW=-9IQ@U9DA0$CSlH?gg45mw1i(7o^{QTEog3$9)J zRcG0*N$y=GQYi9)J(5{!9p|?lvo>;gOi19*X|mn)=6yxVOedxU{dN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHWvky-TEN~q=kW07K(oYton5z5clivRrNT9R_}?b6-%H#;e@ zI;l*UI(2I5=6~Ps=l(k!|6%70jh#zoO?s+-Eu!}Ek{hqr&+|`z{L`lX<-Q}|%O5|h zJZLOp(e^q!@B5!)JNEp2@R8^G{r=fS@gJY=n^=AC#~;?(P4muQcQtyqzEJ$V^wm=R zozwp8x>9#P8(u*^2Mdz|DIeK^VEhd z-QvfD_p=#K?0#$8cWocj7rrOQXa4N?_xTO;k9~I^KV+U(zJ*79eq6z)L>n9V$MNzq z^Rz#`*T0hVTmSaX`_<<+ecx4fJ&EaJiSet3w{qJPmCQRI{?Yk(YESFunz*Uq8_)7N z*}Z+xIQR1_o4}jLT+L&PZ?7$u$=h(`#q{$sd*xZYj(eTh_e;>kFEBpuw@lUym$U5; zr*k$Y{*URlKEL*PlGIR2V%f9*s55Y?ul1ihRMH|y>$>aKnqW>Ls@Mz}AW%X0GbT4seuHxDH# z)R&m;RM4}Wz4!dN#$-i@-l@L@YSo$ij`)kcOy)Q_`%U-t^v|>3oQu)7tCV${&C${# zVzhDPLcui>tpA=wJP4Sq5a==~MbmB77Lg#INkOMPUDrLGkUVWp(K*%Ycf2$}!A6 zMJ;Vs<+RB3=yN(#l8&lsuibNM)#}_G+Ya|dm))wI9$Q}R_O|bp{(Ae4S-TfM^IuXD zSLfCnIQjEqF~6rSCTT8b+})3Cc4Kg=?wzTt=eB<0^WU| z^PS}G?I-?*-RYTfziak?%_2AF@A)q01a`$g{^ogQ*|nX8N@b}Fld_m^9{(CT>*LbQ z!0dRrY$s{yrL1eNYt}d0J~67*J-S^odA^UKT)?4MmsE0hM~1yVd~K%0%(Lt5GN9{}8_cN=#a+ob+Bzwdpw^m7IueJI7>|u!aG8J~a$}?A=KYOjU_h##o zAC9*=O$ii&zcJcW=tQcy#R>qxLxFlopq{MqDdb zPFyr4?e2db+xQ13Hl@DyyuI@F)Wg0TJ2u`tc%o#pNA!~Ct-;(W@7E>Y-(Xn$t>W;t zo0S_K4T3T}Q{(otSsQIqv}`@w{_awg%HF0N@$&Q8dpGH1=PZ{#$u3!z^Dyy3Lbg@q z;%M8IUvD4ZV7EKvT&H)+k~ub_>hmV2M6Z1nrF<>vlpa%w5^JuKtG}68kK*io6J(aP zPZD)Jd-?F5yMGzKE3jOhWb{^LWnR$+>nq$JJ8j#odAqYu_AoT^-LCj`cDqSdotlA@ zr$zO;gJ0KeT$RTkF*{1*WWImrg}~;#Bl03IcR$wqzOr)fw*x1`{rK)~VV+UA`x2M8 z1WS+nxfhH*b66M~^|nn|vTWl-<-(3jN9@nbsIqQXf3@YLfMbqHf3@<_Q);>s!|pQw z5~)5J=g@z|cvZxbpKmn3@m6`QGg_v8_`RmpVl(@q@>ykn6PB#WS%2H)Kg;y#-dC4s zGd8LpnEH9;Syr#xdz@$P5|_KX`U3+JM-GEqzM`!GruG@ zdmNuLHIv)s+CJgb(2#lbMFcxz4Sxz@7hH-p2Cgq7PJ4cNon|19wAG3&lM;NAE=x2w@NzsBGW2VULxfx=c?knGaxg~i<-O-&ZA6FlK6Y{00d{c^9 zXYrRedUlQhJb~v$CT&uU`Eqjp=0ksse`SQp+E3_Nc6Dmv3b)u926Mbl&thR&7q>1! zQ*T1-#a#~8-m}+fbM1Ju+0>*wV=LRkWh~tiJN`@xR$hD~>i0X|&xz4edg}|Os9oQf zW$bmZaG!J3eaGVI+&=F%8rZG88W{C&;g{g+`{sSfEDV;@to#*vuf$+QxQPHq`O2>1 zt$OSttJ^#Dt!JE>Io0UHnw6g%J_SvA+p%K#0pH~f60NJ=Nvo?$c!mcEtYOwKaIStyHCf+;;yRQe4_=+ zFCJL>G$bx+X+;Ak=c{*5s+=BoYP6N#xqYkj;>OBvD|2Q}Q1jp1_wU8I4Nghh>)*`x z;)}oYMz(gYVSfL_V;_>I%Wu^(->&sV>Zs`AfU5#27Zb#V?_|L8`ik2;F?@?I)ckdprqi-fgNJj6`ZgT#5Uh(F3PlL9mAIm&*bdT?Ueonje z%<}6t_d;_g&uKmGxN=h#=WD@)@)V?e>R@Wo}6~EX~&dfCwID)_Fc(&v(fDC(lbZ* z25s7+^uyM7AH&ZZGS#+Lt;S1)-?y7gu{*i0hke=>Nw=?Txy^jBmf|Bt7PHV0H!pPYs*%d2pI&E#+x50`lD{^K3qO+$S9b59eHvPcj@JPS^ryC~e zWt4wCUo5vNV|~G^TaTX{U;JOWaJzwU%xWZz&KF6(CXomKi7%8u9;xDem-E2R2j5lf7!%GXNt!a^Ne9v#K z`aGWd)P+h3DgFbqpUpV5>ObcTmQx4q-(Crt7!wdKJyYuLvXu3c{ZDrh}g z5vt+T8lb)9RYK8Ad6P_!pcom}>rKt}-J$H_>9Mjgtd1YpkDNX0dC}GDkDlh1j*oqh zaLN;g11el)oP#1PG+pfhDf6={IAn}Mw+NhdMa_rmTGok41fdqR;bm>(tbBm!%wqx+9u6 z7>%+t7Bg`d-ZBmHS@P26;Y0bdKT11Oil!bsv9Uob#G_CC4}abFYdSuDJ3JS%T=<)G zTYj-afq2HX+~2=%Y@4m_@IZ3MrCa~9m}mS{*?aHWB6o)h=^Z=rvOmcc>}2M#eK|?d zGN@tN{s4x1=U>b&I&eVu!tQ6^)|U2NW>;|D>vflbz5PJM#7)<2@7=w8b9;Su)ZgEX z1x-cEP9{8(VqjokOY(MiVfewYh+$E(@@q{71_sUokH}&M25w;xW@MN(M}mQYfxX1j z*OmP#H@CQ^^xtEp#S9Ew@t!V@Ar-ft#@;S^yn~NLGjh_?=tn8bo@xI7-)iia6Zt!7 zS%L(Eqx+JQS39~ypKqF}BbCwMFuBO!@@dQCb?@ddKbNU^f3TWAG}JLPG~l}Fny}UH zubS{~$>q+y?R33#L)`j>@2g+@mfLn)_s#ce3mLu--@dW!ulw6%U;ppG@#E|@H8nop z_8-_&&hQ|A^{%y7bGI^FxO>fNO;zWy=?)JLa5$92vd3O`y#IZ}&75}*6}7dk-@ljt z`1`w@@A2dHmTWCj46~#evKe0FXEQU@?sa+0emJ^E-}O-1=El2u8Ng-J$zO>fJ%ci-iUi;F9& zwtfCrRG5)p;m6Xd{nNO0Oj?u`Hh(`ZWWau)+~}M4=enF9ALcDq(3E`arE$SO?fvzh z^Na=IZNHXQ?oX@e{{EONWB+~U*y~I8+`n%ZcH}oRgGdV>gVp|!_x01NKDfR4`qk9@ z`Q=c}d*}7`o4oI@+~;C_@psJlBeds!R!#2nZtrv3w{I8HWk3I=HcRp0w^}JF=Zx?7@89>HI#=fFmL*RG%wi-O7@X`F>Sk4}e4Z?j zv0L%V@AkuteaDl}ZMvNGXP$)p7Fi~NO63Nr`M-Cy)@7_`m$tw1d&?7@2^CxW(!0$f z4!*EX`J>y_R3vgla-MNrPm{*q2dB~>$*!MPp&0aajo{q?fgLg%J}q6LzV+MnB8FT` zc|LXv89vohe(NjjufM-q@d>grIP7}q;!F(aZwJ(+k|uV26Z=Ximq;0;}B8gczc`czb_oDiBgZI zrTzIMnDFrbjE_tCG8q}>Fg2O{zMAp;;O}}FM$O&vy5csgxpi}DGMU`MQ%(MT5m8Z1 z;pTmq%DSlFul`fUoF7(4e?)3_bn{8^8fIN`*%kCfw1Z>4i%Z3Ol~at%_D1#mUwU@t z)O7{|tY!(9;u^e9&2jUXtviMF!A!5rgZknN*BL&YF3Ol7<1TSL@Q>U-$#>~5zc0CO zdUXD&8ok#4Da4GtLaEZtid!eh_T&8(8oQZP^Y z^S9SuS4r7Q)JU-Hh|w$98S|jV?(oy1lMg={GOT#0f9R6Kj%d5-)3d(_elE)?Irk$z zKK{ecpOLpds~(=u_~7-nbK93T2H3GLxxkZNa_-0S%PU(RS_-hS9Fo-KWieF$VcFa7 zDADHF!;tfb;lTd-|IeQMYy4Qp*|1uGHCc?o;@8B62M!l3{@2*mGZ$LTeNbcfd{xbk z`8$mS8yqc!AIFPu{rdM}xycUJj)+IR6BQZ-l@>UN^qe^!$na1p;Jkv$!%DLxO@|9B zCKNd`axFS0&l`Hd^@jYJ&4S&b&JrA4ZEoI@j1s-o4cUj}8hnrJYk8PFae-^g6lEp> z$?~Hsm#*BVt#`YtBlkp5`O%mo2?|`&axD2~m49+Xj=XI%b=cuC@tYuP`4IueM3Ggp zAMZzA31$7?zy1+J!6wl^ws~p}``w>23vZnfTz}0~?0a>rAj6i6OHw{u*=Z=}f6jn? z!aI&l4MAp1L2i@pXc(3C<+MHQHIe^zri(W}AuN*1oO#4*7M7olUjTH9Uqi9&e2#cq@*a% z>e==@!{c#uj|>J>702s zf1+ZR(bt~ohM5i(tQ>v|q;=i9vz&v=_HW!&a_sDM<2TGlm?byo9LX>h>E_Za+VVdA zRzqWgMQ-pj-rSDVEa#Uzl?T_~n4o&nI_+Xx(cijXl|JrMF7BALap(72F9aRJBA&1- zq>8LO+p$yeFVA9+oD13~eqH!5Z}xO`=zv>N{7T>qz8mu?NpKfCFku;6av74Lt~nQWM= z@c3b&%*_e?G38&@*@v(&yuGILRw(?n>%G}$)x;S#?qo2ZG0|;uPP>UTLyWkIn)gMv zPj|MOCR)^6$Siv`A0fp5ZMGi@v%UOjq_!-I$A-8GS_i|w;(wtP7wTQupRZt)`r_nC_o++63l zY-~C{J4Eil3BHCY+&h-!_+Gg8yIuX2sqf_1Y^5(ZZWR*nGqB)xn)WcuOK-yp)g8~f z0|lD0@|5-lA#MCV_l$< zx8$8!Fw_s7l)JnO?GFMi&dl>XaqHfJPgAb;a9Vx~$>rZP;rqj`$B~R4o_jX7+ZKrL-j+N2b<_I@ z&r^2|&z`(7J4wkqTjWSj{>y2X#9Z6l<{E$NGLftf?rEx<#2xgU^^RqeWR%DkP3f&B z`VlM)8{K5DubVcj1Nb6I)QHq9kBjq)yuT12l2b^l??bl|J~ ZCc*u0r!821n}LCW!PC{xWt~$(697NJ6AAzT literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-reactor-top1.png b/core/assets-raw/sprites/blocks/production/heat-reactor-top1.png new file mode 100644 index 0000000000000000000000000000000000000000..68454936da51cbea2f63d853213185f90637512e GIT binary patch literal 765 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_i`d z#WAE}&fB?;dC`gj4$A|@Y#pw8f6>|7KRxc3ot?M7;8TXkn~^snlDYmoWR_F87wtOn zZ|d3848{pcObiSR8>FUx{`l+gZ|60qp4RN?>QFe)C{QEFvPVX?MsT9}dVVHzfd@QH za~vCtISSYq&+VzMZcRlE+^o8Q~r(YS37C1=Edh}|$I>!lt^W2M7 z6b?wTq^y|P6TOL zW~LlZw=Hb(OZ*x*oG&!X9lX!XbVUD$5=Q|$2uN5y8}t|xyT(~f<*y43c?Pi98xFVhaR`dYtGRoq&X z#HS&^Zg*As)+)hmzdTbKj5#Damd@^KaEyq)$&sNVnz3)umBv|9{ZAj`Wt!vY(6+r1C>E>|aS#@fkVHQ@<0)yF=zQw+HK=P@!q}Ch4$RmQLE)HtY5I zX=fYmM66f8GmUwN>XsX+#tH|frV1zQ6kOWga>ZDn;P~rXUMw0rc9b&h*j2%_V^1~H zj(v4ZZhx5DEp`ihNU{(&kp!m}P=H%BGo(kfSve@0F)lW%UcjWnz`$VfiMO4#zH~nS Sm75F<3=E#GelF{r5}E**qd*k^ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-reactor-top2.png b/core/assets-raw/sprites/blocks/production/heat-reactor-top2.png new file mode 100644 index 0000000000000000000000000000000000000000..b5861e05dae63a963846054f3172e7c6ff395dc8 GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z;w*h z#WAE}&fB@Cdv6;EI2=ECZGuqI8BNt4OpZr)u!tw`V4AvNxy<&KTqnylojwvlkHVE3 z-p>`|jy8Dqw%~-~Sy4s?1_p`V)OpvszqU(EO`R7eD99r5ph>@};qb+S;(|ZZzB)eO zW|3%SNES%oVd`;gFwDOu|KNLZy=MC3-}zY& zjUCwS&6ZtftA8Eo%+2xl>2IMZHv2DU65AKt*s!=e$MZvQg6x8h&L4HV#gD5kUC>>_ zDHqpp;=fQ8K<^1%~xh&oa-^Qp`mYyheLzmoGuTQs44O<&vR_mIMKio zwN>5eZYax}3%ksZw4L#M5aFf#r_k2yb0M$QT*lKjYk3?+pM3f2{C=n1JaHD0AfZ1O zs%N%U9oeQ)T=hp&=ku0HjB@U*_Z@iyWMpgDnU3iFP~tFPXB3Km`|S>QnZkqCsVpoS zebWkRZS>bL+XT(dH{~{*xL=pkXu*V8&AaFH<+*gS?3Z*mzrtbOGLcbwNlocWmRNg% z4bIt|F*iaSv^f{f6gEv@w*Rp3-i3QoiR1F3qdg`aPWQCw_EdE4zT$-o!^@%mZX1Y#{EYIdiSTCcM-o6$Gbz~FgFM59}Q0D z_-h+QpIq>KCR4P|UfPT~DS5Bnj;+7<8E(0eXnf${)Kqnar*2ckgq+Sh9N=D^tu46V z!J})!2d*AfZ#cc%pW*uT`3-Xa4;(zN$0Eb?yvdIZoNzb{*cgu~9FSPHkZps2HRE2h hY6WH$Q1bi49&)j1X5LBPVg?2V22WQ%mvv4FO#pBiOveBK literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-reactor.png b/core/assets-raw/sprites/blocks/production/heat-reactor.png new file mode 100644 index 0000000000000000000000000000000000000000..a23dffaddbd1a8cae7279971c921b56c12449ad4 GIT binary patch literal 2006 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z&^p# z#WAE}&f8e+{1|r;yExG+C87e})11n*SBwJv{p_mP`GRnTqnfZAS|8@CI?~~>3m!G#eKlASIe?R%nyN~i5 zYe{F%{_^YP)g7-G84M!V>m}?wqHW?5@MQZtUQuC&hK(Hu6f1I+d@jj5i#s~Knc*_y z$$y?u7T$%)f{8(K60112i_T9FzrLEAf#F4U$rQVm?eFbg+}nR|&;4@StQ#8}TK4H4 zG=8rbZIZ>vsq4KW)aUb6SD~rP-^QACw@wtB;1KE5t)n?Jwr=UY)Xh`&YBC&H#}UzX zBm97FguHLd(wu3#rroIi^5Z1$_lGzCNbH>_uF-U6`uEbgANsG)x0=2rHaxR9d5fpx_{~u(>I?z)OYDzd)AT47;@Qp zp^if@%c>3YlE2RiEjk_cdz0?83tJd^{(ODaWNVcr%CuYFu<+88;Cs{gTrHHSkG0VtOV|ciSI)> z^em3Jz3p=COpsztyxzX&Ln>=H%SjE7D=bq}lK&o_AimG$f{ z+39^VYa!pO?OR`Z>1>xNTc)^NE&p0lOy{)|D^fYdv@3s`@6`$1eZ6Um&zxr`Qso!| z-Z!kQz7-n6XRt{3iF$X)I9`} z7uCL|}-4z?{ls?zMG;;OCDFMQbx4!S)^Cx_6-t^azS&S;X zQ?3Mj>AzopIqf|gzu=*}K@0_lmPSvtw203Le-NR_`Z{O6YC~%VkF%2fK_w=(bsVc~ zA6kDnAh_`Q%n!0XOdi`bbq^eSqbnn4$DwgjZ;kS@RSa97rJs1B&g0k;X6(Xc!18JT zpI6ymtim)`?Qs@&yu(sC;k@G04<8tJtqWe=Ew5@4p|J$&}-aKILklT;;4kr(B)-ZrpltHm0TDcS2ju$=%a_x|}wa{#|7HGcc}BLML&<&)wDi za`rn9a@71dn*QQ+{=Yx%Q#rrZ?aMjSctlrD+3!~R+_`5izW#3aoV7aO_L3XFmxmkA zh}ic>N@L*)uA~Jvn^o666Y}0LN&o2P=F&TDJO|uZ&Iq0Jd$#I>V&7-+Ymvn+3l1$< zbi$t_zH5PwqttiR!he(c(tat)Cp^h^+ibL+tXm-*-ONW^X!{Iq4i@nb|K!GbI-@SK+rl+ghc5#(21yh7_y3+ijvsg|VK+j8@dMBUzF^B>pzj6N^CSV||1w>rG*^Gm^dEwTB_({1}T&bHZq zV-)j#uqV2EP0qqp&bTMu_qMh;J$;||l~Kz3!KC(Qb>EkD zHmWL0U*7&%${W2l>c9lo2Me_SD|?^Wkf~;qBG~3&$G$j@dlzp&>&knL?S6+sOkbP| zbz$OP-yze?5xh3hLn-3K_O_L)elu|XthM&Ns!;fEkw8`63UQ@5%i`|+cX*fPYFS^Y z?80!$%0x+J`AQ+nk5YnO&(}|J7f-+Ol;ieyinub2BM1H}x4>>GXY8kFh3tsV+ zGfHK?a?byolk(#9Ps=f|&uv>-b#6s*yZ*ZUTI^5X&3*Rbm*3%#-vW%vcbr>p?OY*Y z)0Y}7AA6^28Cy4p=^|aFEq$rkzSp+6i+BHSxZ}9(i_e5_oLX<#m)>?b`%`=3dP~dG zB_$iL3LRrRBedbZ$b zFQ#wjBO-Mjo2Tr%%4Bo8>EI)o94Xeq`d|m{{*pzflfIr2^F6YGb!!pRv%58Co*jR( zk@IZ%-1-x`i`K20X`tG)W#*~-@0n+9Dt!Iw9!sF)Q`W~e$9?ssrfu5#N{iElv)Fs$ zq+3fl?xjv%x9FKc?y2g@VmGHpoL*JAU+m(1gNWxb{)NB4!Eivi?8FoGCrUkD k3=LKXlNIb0J3q*;Ymr)}AIqJ`z`(%Z>FVdQ&MBb@0A{to!~g&Q literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/incite.png b/core/assets-raw/sprites/units/incite.png new file mode 100644 index 0000000000000000000000000000000000000000..01d7d777bb5e85ecef3158db0df7ed25cec0d1ef GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0y~yV6b3dU@+rgV_;yI)DxA*z`(#*9OUlAu$39NU%3+;)P@q2i^XA63eCl*+ zlPcw9=Vg3p_JW)5mGmdam(QME^IKk!ecOA>w!I-akAF`2RAj=KSW)=TdvE{ii!K&3 zTDGvw|2x_c=@sPvDJIUw^MCw_my2gGiy%JR*mr&{5?Ae`BqeZh|GX*u zDgU3mdY7;3_pEVwx$x|0Yx5$fndg`BTAWxFqOkhhZ5T zX13eW&ve^^0P}ZtziP{Mx!4O&9JcT8Jh5()(S(O>ax&ptYO)_|b4jjCxuqsDF-`hz zXv8YEH&W}KEapwQDzT<+-69BxIpT}n}xxv4LzQOe_J~1%Ia|A z-E7{O4)>xx4y=+_UON3Mo1JCKS&8*=?4}xVl^>3*t(Dim_+!`0pK>{}TdMrDZ>uZ` zoA6m`iudj8vR!;p-G4rv+T39&c$ev|tZ&Bqj75hcHzm3FpS!zUU}eIVlMdgMPU&|{ zFLkMUU%2B|*Rl%Z;CWLORApE^`1w{fn&cWtt5|=xJT^@6Ps_Ue$}5dyhhEakhPb`vDlsO@rWOk>`I4&1tr@?0 z+qamde3@T=t}#2g@IgmZ9m7?jqbtLoZMd;{GlTU{1}@JNLNX$)JvTg0_}M2qH}o8E zluJ3rH(~D|VJFQEFVdQ&MBb@0Oky)vH$=8 literal 0 HcmV?d00001 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index f452fb24f1..1ac8ca077d 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -435,3 +435,4 @@ 63273=core-aegis|block-core-aegis-ui 63272=core-citadel|block-core-citadel-ui 63271=core-acropolis|block-core-acropolis-ui +63270=heat-reactor|block-heat-reactor-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 2addc7299ab59d41b6bb49262de35ff7e52e289d..a9c5b29ed36be08dfb11b0882702c681360af7d4 100644 GIT binary patch delta 30 lcmdlgd03K(Vf#j=dM;j`jMT&u-J;aQ delta 16 XcmX>sxmA*hVcSNgdalj=TqaBaFjoa3 diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index a32b4a25a4..3a0706c7e7 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -17,6 +17,7 @@ import mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.turrets.*; import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.environment.*; +import mindustry.world.blocks.heat.*; import mindustry.world.blocks.legacy.*; import mindustry.world.blocks.liquid.*; import mindustry.world.blocks.logic.*; @@ -59,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, - carbideCrucible, + heatReactor, carbideCrucible, cellSynthesisChamber, //sandbox @@ -942,6 +943,13 @@ public class Blocks implements ContentList{ consumes.power(0.50f); }}; + heatReactor = new HeatProducer("heat-reactor"){{ + requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); + size = 3; + consumeTime = 60f * 10f; + consumes.item(Items.fissileMatter, 1); + }}; + carbideCrucible = new GenericCrafter("carbide-crucible"){{ requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); craftEffect = Fx.smeltsmoke; diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 5c3d285f20..160c59cc15 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -98,7 +98,7 @@ public class Items implements ContentList{ cost = 1.3f; }}; - fissileMatter = new Item("fissile-matter", Color.valueOf("536631")){{ + fissileMatter = new Item("fissile-matter", Color.valueOf("5e988d")){{ radioactivity = 1.5f; }}; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 67cbdf015a..1a04d1cee3 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -40,7 +40,7 @@ public class UnitTypes implements ContentList{ //air public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra, - evoke; //elicit, incite? + evoke, incite; //elicit, incite? //air, legacy public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType mono; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index acedbc1b26..4577287cd7 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -593,6 +593,17 @@ public class Block extends UnlockableContent{ return (hasItems && itemCapacity > 0); } + /** sets {@param out} to the index-th side outside of this block, using the given rotation. */ + public void nearbySide(int x, int y, int rotation, int index, Point2 out){ + int cornerX = x - (size-1)/2, cornerY = y - (size-1)/2, s = size; + switch(rotation){ + case 0 -> out.set(cornerX + s, cornerY + index); + case 1 -> out.set(cornerX + index, cornerY + s); + case 2 -> out.set(cornerX - 1, cornerY + index); + case 3 -> out.set(cornerX + index, cornerY - 1); + } + } + /** Iterate through ever grid position taken up by this block. */ public void iterateTaken(int x, int y, Intc2 placer){ if(isMultiblock()){ diff --git a/core/src/mindustry/world/blocks/heat/HeatBlock.java b/core/src/mindustry/world/blocks/heat/HeatBlock.java new file mode 100644 index 0000000000..da72507e18 --- /dev/null +++ b/core/src/mindustry/world/blocks/heat/HeatBlock.java @@ -0,0 +1,14 @@ +package mindustry.world.blocks.heat; + +/** Basic interface for any block that produces or requires heat.*/ +public interface HeatBlock{ + float heat(); + + //potentially unnecessary + /* + void heat(float value); + + default void addHeat(float amount){ + heat(heat() + amount); + }*/ +} diff --git a/core/src/mindustry/world/blocks/heat/HeatProducer.java b/core/src/mindustry/world/blocks/heat/HeatProducer.java new file mode 100644 index 0000000000..849ca04d64 --- /dev/null +++ b/core/src/mindustry/world/blocks/heat/HeatProducer.java @@ -0,0 +1,131 @@ +package mindustry.world.blocks.heat; + +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import arc.util.io.*; +import mindustry.annotations.Annotations.*; +import mindustry.entities.units.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.logic.*; +import mindustry.ui.*; +import mindustry.world.*; +import mindustry.world.blocks.power.NuclearReactor.*; +import mindustry.world.meta.*; + +public class HeatProducer extends Block{ + public float heatOutput = 10f; + public float warmupRate = 0.25f; + public float consumeTime = 100; + + public @Load("@-heat") TextureRegion heatRegion; + public @Load("@-glow") TextureRegion glowRegion; + public @Load("@-top1") TextureRegion topRegion1; + public @Load("@-top2") TextureRegion topRegion2; + public Color heatColor = new Color(1f, 0.22f, 0.22f, 0.8f); + public float heatPulse = 0.3f, heatPulseScl = 10f, glowMult = 1.2f; + + public HeatProducer(String name){ + super(name); + + update = solid = rotate = true; + canOverdrive = false; + } + + @Override + public void setStats(){ + stats.timePeriod = consumeTime; + super.setStats(); + stats.add(Stat.productionTime, consumeTime / 60f, StatUnit.seconds); + //TODO heat prod stats + } + + @Override + public void setBars(){ + super.setBars(); + + bars.add("heat", (NuclearReactorBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat)); + } + + @Override + public void drawRequestRegion(BuildPlan req, Eachable list){ + Draw.rect(region, req.drawx(), req.drawy()); + Draw.rect(req.rotation > 1 ? topRegion2 : topRegion1, req.drawx(), req.drawy(), req.rotation * 90); + } + + + @Override + public TextureRegion[] icons(){ + return new TextureRegion[]{region, topRegion1}; + } + + public class HeatProducerBuild extends Building implements HeatBlock{ + public float heat; + public float progress; + + @Override + public void updateTile(){ + if(consValid()){ + progress += getProgressIncrease(consumeTime); + + if(progress >= 1f){ + consume(); + progress -= 1f; + } + } + + //heat approaches target at the same speed regardless of efficiency + heat = Mathf.approachDelta(heat, heatOutput * efficiency() * Mathf.num(consValid()), warmupRate * delta()); + } + + @Override + public void draw(){ + Draw.rect(region, x, y); + + Draw.rect(rotation > 1 ? topRegion2 : topRegion1, x, y, rotdeg()); + + if(heat > 0){ + Draw.z(Layer.blockAdditive); + Draw.blend(Blending.additive); + Draw.color(heatColor, heat / heatOutput * (heatColor.a * (1f - heatPulse + Mathf.absin(heatPulseScl, heatPulse)))); + Draw.rect(heatRegion, x, y, rotdeg()); + Draw.color(Draw.getColor().mul(glowMult)); + Draw.rect(glowRegion, x, y); + Draw.blend(); + Draw.color(); + } + } + + @Override + public double sense(LAccess sensor){ + if(sensor == LAccess.progress) return Mathf.clamp(progress); + return super.sense(sensor); + } + + @Override + public boolean shouldAmbientSound(){ + return cons.valid(); + } + + @Override + public float heat(){ + return heat; + } + + @Override + public void write(Writes write){ + super.write(write); + write.f(progress); + write.f(heat); + } + + @Override + public void read(Reads read, byte revision){ + super.read(read, revision); + progress = read.f(); + heat = read.f(); + } + } +} diff --git a/core/src/mindustry/world/blocks/production/BeamDrill.java b/core/src/mindustry/world/blocks/production/BeamDrill.java index 73af805a08..226b776137 100644 --- a/core/src/mindustry/world/blocks/production/BeamDrill.java +++ b/core/src/mindustry/world/blocks/production/BeamDrill.java @@ -83,7 +83,7 @@ public class BeamDrill extends Block{ int count = 0; for(int i = 0; i < size; i++){ - getLaserPos(x, y, rotation, i, Tmp.p1); + nearbySide(x, y, rotation, i, Tmp.p1); int j = 0; Item found = null; @@ -139,7 +139,7 @@ public class BeamDrill extends Block{ @Override public boolean canPlaceOn(Tile tile, Team team, int rotation){ for(int i = 0; i < size; i++){ - getLaserPos(tile.x, tile.y, rotation, i, Tmp.p1); + nearbySide(tile.x, tile.y, rotation, i, Tmp.p1); for(int j = 0; j < range; j++){ Tile other = world.tile(Tmp.p1.x + Geometry.d4x(rotation)*j, Tmp.p1.y + Geometry.d4y(rotation)*j); if(other != null && other.solid()){ @@ -155,16 +155,6 @@ public class BeamDrill extends Block{ return false; } - void getLaserPos(int tx, int ty, int rotation, int i, Point2 out){ - int cornerX = tx - (size-1)/2, cornerY = ty - (size-1)/2, s = size; - switch(rotation){ - case 0 -> out.set(cornerX + s, cornerY + i); - case 1 -> out.set(cornerX + i, cornerY + s); - case 2 -> out.set(cornerX - 1, cornerY + i); - case 3 -> out.set(cornerX + i, cornerY - 1); - } - } - public class BeamDrillBuild extends Building{ public Tile[] facing = new Tile[size]; public Point2[] lasers = new Point2[size]; @@ -306,7 +296,7 @@ public class BeamDrill extends Block{ void updateLasers(){ for(int i = 0; i < size; i++){ if(lasers[i] == null) lasers[i] = new Point2(); - getLaserPos(tileX(), tileY(), rotation, i, lasers[i]); + nearbySide(tileX(), tileY(), rotation, i, lasers[i]); } } diff --git a/gradle.properties b/gradle.properties index 41e4323054..e543381774 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=b0c234f0017ca4a7f28a70246e132e58401a7cde +archash=0531e7f883427a7c9a478a22b11a5d91cb1bab7b