From 3e9747c59ccd26cac83a9faed842655cd40e7cc2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Dec 2021 11:31:32 -0500 Subject: [PATCH] Heat conductor + phase heater --- .../blocks/environment/arkyic-wall-large.png | Bin 0 -> 798 bytes .../blocks/environment/arkyic-wall1.png | Bin 0 -> 341 bytes .../blocks/environment/arkyic-wall2.png | Bin 0 -> 370 bytes .../blocks/environment/arkyic-wall3.png | Bin 0 -> 335 bytes .../production/electric-heater-liquid.png | Bin 246 -> 0 bytes .../production/heat-redirector-glow.png | Bin 0 -> 7711 bytes .../production/heat-redirector-heat.png | Bin 0 -> 7007 bytes .../production/heat-redirector-top1.png | Bin 0 -> 680 bytes .../production/heat-redirector-top2.png | Bin 0 -> 685 bytes .../blocks/production/heat-redirector.png | Bin 0 -> 1211 bytes .../blocks/production/phase-heater-heat.png | Bin 0 -> 5455 bytes .../blocks/production/phase-heater-side2.png | Bin 0 -> 533 bytes .../blocks/production/phase-heater-top1.png | Bin 0 -> 483 bytes .../blocks/production/phase-heater-top2.png | Bin 0 -> 488 bytes .../blocks/production/phase-heater.png | Bin 0 -> 1095 bytes core/assets-raw/sprites/units/vanquish.png | Bin 0 -> 552 bytes core/assets/bundles/bundle.properties | 12 +++++++ core/assets/icons/icons.properties | 3 ++ core/assets/logicids.dat | Bin 3748 -> 3779 bytes core/src/mindustry/content/Blocks.java | 28 ++++++++++++++-- .../src/mindustry/content/ErekirTechTree.java | 2 ++ .../mindustry/entities/comp/BuildingComp.java | 30 +++++++++++++++--- .../mindustry/graphics/MinimapRenderer.java | 2 ++ core/src/mindustry/io/JsonIO.java | 8 ++--- .../maps/planet/ErekirPlanetGenerator.java | 8 +++-- core/src/mindustry/type/Sector.java | 7 ++++ .../world/blocks/heat/HeatConductor.java | 24 +++++++++++--- .../world/blocks/heat/HeatConsumer.java | 6 ++++ .../world/blocks/production/HeatCrafter.java | 10 +++++- .../mindustry/world/draw/DrawHeatInput.java | 25 ++++++++++++--- core/src/mindustry/world/meta/Stat.java | 1 + 31 files changed, 143 insertions(+), 23 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/environment/arkyic-wall-large.png create mode 100644 core/assets-raw/sprites/blocks/environment/arkyic-wall1.png create mode 100644 core/assets-raw/sprites/blocks/environment/arkyic-wall2.png create mode 100644 core/assets-raw/sprites/blocks/environment/arkyic-wall3.png delete mode 100644 core/assets-raw/sprites/blocks/production/electric-heater-liquid.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-redirector-glow.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-redirector-heat.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-redirector-top1.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-redirector-top2.png create mode 100644 core/assets-raw/sprites/blocks/production/heat-redirector.png create mode 100644 core/assets-raw/sprites/blocks/production/phase-heater-heat.png create mode 100644 core/assets-raw/sprites/blocks/production/phase-heater-side2.png create mode 100644 core/assets-raw/sprites/blocks/production/phase-heater-top1.png create mode 100644 core/assets-raw/sprites/blocks/production/phase-heater-top2.png create mode 100644 core/assets-raw/sprites/blocks/production/phase-heater.png create mode 100644 core/assets-raw/sprites/units/vanquish.png create mode 100644 core/src/mindustry/world/blocks/heat/HeatConsumer.java diff --git a/core/assets-raw/sprites/blocks/environment/arkyic-wall-large.png b/core/assets-raw/sprites/blocks/environment/arkyic-wall-large.png new file mode 100644 index 0000000000000000000000000000000000000000..a972142d2203182201d0e3648f7c0f15ae4f7d70 GIT binary patch literal 798 zcmV+(1L6FMP)Px%*hxe|RCt`_TRU#UFbrjkZaF|kUm#oNqHE_4y+;q4Ef?^Z17uDo8LA@wBvPua z2Lx#R6Z!N+QjB}}{`q_Y0Gux~jEE`xal0-(?dXQ-zC6}1Ba$!y0E|q+x&%fgVT!+u zNWxos;J!TIG#`r}h!N+JWh};;atDJFv?`#kw^Y>ax|of1`1pE%Vkd(VB#cT2EmcAZ zfs(PZ3J8!Wft!uo^;&qwBa#3BnuHdCGB?KgGOr))y(wOTU=ATLS~+~XE=5ZrchC7U zSJ}lXpeMZJ3cx=nAcmD((%|BkUE#k2I;Xa^%u>9 zpq2BjNF)i6%>LG~i8{a&C;^(ZSDPX+XqG`~M#yFX%%RhKd|3wRwZV|ocx+qCp?0^& zL7fI;5~!J%7+tz8wglM|#BiFAsPp&bv3?}5?iFf*#(B; zG^mwzdane%euz=m0iKGm>^Vx&q!6M=>%GiO382yA2PNr6j03Lbb+Gj$1rGhJ=KsJwdP583m4nECHUal=$5ekOEV|t_et&V2*@c6A(Zxham_6z<+uhh5&%SBm^RcA^_m^pF@Wu c0N^hPzgZa5jigK#Px$4@pEpR9J=WmOU1OAPmQ&&#edO=mp$5_jT>uq4(%P-Mm0X4!~?D`XUBMl#iwV z2_lf6N%-jApXUkyFx^IIq24u?8QTCDw7*UZhyeh=poQyrVIfMVW^fG(L6rl@t-;Oh zX@{mGwwNYWbSyWo_YD$=&|;D?zHJAP8zLnZAeSWd!UAx`c+`PE#_tbMK{3!>1akhp zM28}fa!!jgHCA1O8s}X9G=RprL~4MLlbG|^x9;(}uf9=Qh*~A@0w;r3d>WorGzB$4 zL^V(nLR^HUAc|f_e}L=&CF(#Of!q*>ZbKhJdU7r^mU)m+APN(*X9ozu@b+yKs_z1W nc5^#6*@hIN%A+&{0f6uYy$glxv-nR#00000NkvXXu0mjfKgxPx$EJ;K`R9J<@Ry!8LAQ0T-rSkxmUck=UXKQWYJv?Z-T!4}TP{%5|z_RQD2~+XO z%MAM&7~Y@f3IK4uU7!cXZLrLyj{s}jZ_-1=2msJi#Iy~pad5tzND+J1$Al+X1jaI( zqzEoz65(UGfYT8Yg=D#ONzyqyUiX#SpdwKUE)r1$_5c@&iCQcKksx{<(&z22l~VBBo9+D#8{-Qt~1JDXZql zIgmb}A(s$$cR~(g0i}0C&L>0yT3$?Q0eg~*1k@te72S(4+lHxU8s5j?e4^M1Q}#@) zYpqegoKSN*Nov#rYVa52Kg|yB0&AR?iY{%4MI4p_N(6v`FB{sLIYt?m QLI3~&07*qoM6N<$f^CMATmS$7 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/environment/arkyic-wall3.png b/core/assets-raw/sprites/blocks/environment/arkyic-wall3.png new file mode 100644 index 0000000000000000000000000000000000000000..e289f569a402ba2b7bcc55bd7161ab38ab41661f GIT binary patch literal 335 zcmV-V0kHmwP)Px$2}wjjR9J=0m9Y_nFbqY1IJyjwk_FObiA<0^GN?NiP{{z)Nfn<1vMt*ZMt9r+ z2iEh~mwb7>pC16YKPL2u;de7T>I1OQ>K}SQi~z9EiraK$A*@T|OAsm%Mu{r3BYzbG zv_No4r4U2@lk|eAL=uP{KuiU0K@HQ6+{@6EIf&K}m!Kvj9TWvfl|nPj6p+pj(-JfR z#7uYyfJSolL1YE7n*);FZ#yLQPYA&ovseMHJ*6$nDN+QGN>n>H&ew*qomfpqkph-u znFXjxSUWq|C*JKLK5~Lsi!WRLJhfy6}Cei=^002ovPDHLkV1kMjfhhn0 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electric-heater-liquid.png b/core/assets-raw/sprites/blocks/production/electric-heater-liquid.png deleted file mode 100644 index 1c8f9ac253aa2ada8c84fd1d4b687ba738df0f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Hh8)?hE&XX zd&5xZkOPnNMV;^aKL@Q;p3E?fck%yIBHz4xC)x4=)q#NLwIi4Iey{slv-WD;yl<`P z50~z4xt1FKaOvijZLZ~qy~8`#*T<-t? diff --git a/core/assets-raw/sprites/blocks/production/heat-redirector-glow.png b/core/assets-raw/sprites/blocks/production/heat-redirector-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..87109515fc2090adaead5b363e600dbe6763d8da GIT binary patch literal 7711 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 Z;D19-qM}sCql5qe002ovPDHLkV1j`3(`*0$ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-redirector-heat.png b/core/assets-raw/sprites/blocks/production/heat-redirector-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..0115ebd9c568e2731a6903f291dd2a17175a05e8 GIT binary patch literal 7007 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 TY`LPc00000NkvXXu0mjfRVN;h literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-redirector.png b/core/assets-raw/sprites/blocks/production/heat-redirector.png new file mode 100644 index 0000000000000000000000000000000000000000..d664306eaae336dbeae552d08518cf9dcf725074 GIT binary patch literal 1211 zcmV;s1VsCZP)BpH~c-4s|y%)!BC*3b!zrDVF z|M9a``}6BHq*d2-)m}b){QTBU!n+gj9wb!PvlMV=3DtF|1>8|Wb^fq`J4vX{+bqB< z;c@P{RTtU0j;R2vgfZz|C1lkh3P2^ylHN^1W*tibS_!M9(d1dhTH|I(PzhK`h=T7e zmK8rzf?9wiArii|*r+^81z07pitf}81HMUsMMCCP*Kst`1)vg;gtYfxYxCy9gzpk? zB_aC$oe97F2pA<~6<-aXEdg4FKAQAdR|!#ZrE{qQ#=sW%RT84(N#{}o%mQ2BXG_S8 zW6fc?85h+uuguKb9h!@{9Ua{=@6A>4S2>jmKw(w(d0PPpu&VxUFJMe?_Bhc~?AT{z zeJTMn36Y`>P_t*c)?&v#Bf%o@mjXt>(W6Crux90*mNV z3s!TCS^&CT!31Rm7SX2`KGLWHtP-^E`A87F{Z+sZ5s)E48umNE4-*h6VO7vh@IwVe zNYECw3;b{aR}y}I`Sh=$641g>__Jdo;im{VOE}=860F6c@W*4L;hO{;$)V?s@U;@W z1)}h+(yh|q7qiaI3x6enb(L8seQW=afCGYcLiNI*Nnj6k6uwr1_2N1De>p?2u4dR0 zj+pFWp9O!F*Ez<^2*DzNDPfGu9`;%AXE}{={u59sVHTG)?6nfI;7p>mP)5SfFJhZ*MW7N8_}gqn zcyB9L@Yxd1$62n()p=G4kbnsIk7n79Msm424uR2PJGu(KSAujL0zX?q+eea!1kG`0 zXju|8x4*Uz<+T#5BPLpcb^*}(wUj9MS_#^vEDHbJTECcu%n4FlDTWvRC;>gM?W>8F ziCL14NU*}Rw3aXDdR9l$h|@^$+)mmFSgjJY@KFht`Np!EX)S;aUn{|~;;NL;<|j(X za#f0JUG`Q>llmNDbHb2yk02R@vR)SVktG_CcCS9~IX;Nn8 zE5X-_YV~IwBQR?$X=TLDS%R;T(B|)IMqr+tuFf6%%&xDs0QMvwy=b_VfQVIAM4z`5 zfPjh;kX0*f67CMaqXgPAbS$td{OmZh)z1n(^hIn|SXU@n@uVdvbt^(Ds0)njxYC!f z^u3_2@T1}%$E559d6TY&&(32!rj3AE(jDNla+w|1LV&ku20*3+^ig(QlAMkV?{RRMbu&$x)XeM9V-bb z?*&!Etgb_nkn(b_w`t$=LEoawmbs+>EBsv~v=-onzk`If0$A|7OK2&84ZpL5r+{J! Ze*q!l)L%RemplLf002ovPDHLkV1jntF&zK^ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/phase-heater-heat.png b/core/assets-raw/sprites/blocks/production/phase-heater-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..21a8096ff612db8ba65d3b5d2c9bddaeed98feb4 GIT binary patch literal 5455 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 FV1lK!UNZmy literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/phase-heater-side2.png b/core/assets-raw/sprites/blocks/production/phase-heater-side2.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d0222dae8586685f37de59ad9ca0129e839420 GIT binary patch literal 533 zcmV+w0_y#VP)Px$&q+i3AG}&#OOMfa5rh<2V-SyWP0C_Dx)izT1reU{U~u2Mh`b!vl>97>@gs zki*9hdv0?A;_!dR83{M5-pz%H%R6NIbelZhOa+ADxv;=_B{We1@srQB`55&AxUw&m zpt=d<+B`wcVf*}=%&JyENqFMn@W$p;DPXDafWkh28|PC@g$I;XKp1|ilPd`iC=!r* z@|=Xy@PHBlxw4NX)Px5V2%rwHWOi2@9uO`d?(K6DxN&|8u>!cEE+yf=;Q^rn#?QkD z0AKIl$=^c>bHW1x1yFb*Ct+@QK-fem4i5nLFL%jvYgT+YL$GFPRI>`p-qKvM{D6LWJq5FkyNzM3`O<6Q*B? z5T;*=5vE^?62oynmaYU#B#4>_l~B{$mwZ4`R{@0SPh*7XkE2BGu8`(7NO0v{x>!;# z063RWvr<&w1VZ|5H`eSA0vZzl)Nhk(P5@whqvRAOw#rUndb2c9Gm~rPx$ok>JNRCt{2n!RzuFbqbY(`16A%LrK{6S>o+%S2wpBe-)WNX1mRQ)Gc6Wh){G zywc}_-xK&x2!bF8g1{r`Jfy?kjo6EH9uj~{0TLb@3K)lnP6b>~$3G!o-k#O}b|+vO zUeF{wZQ7cDW?J53zArzszjsps!A4mr5|*1#*2}knZsM z@im*(tbmg6!r}c>&1q7=qr!v1F+iK==U564#wuVOerb>^2@i$@%zb%HLTPv~A|O}x zQwcTU!GHi6@Jd#9wc(+00n^bwCqbL%muOaiHr35ZSQ{Q1764@u?g+zrs8X_-j2nEM_!DW6adbz#st@wqeAVgknSExXyskHSu!sG zZY9+06wP;mG3h*{n)gA_Nd*YG(Oz9OZq}L|as5zo2^UXgmvH@9TG;ZS)eIpa2!bGR Z&MyO&)Mi#06SV*U002ovPDHLkV1lg+&q4qI literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/phase-heater-top2.png b/core/assets-raw/sprites/blocks/production/phase-heater-top2.png new file mode 100644 index 0000000000000000000000000000000000000000..293114bdc719d49cb1e4ba4854caef9d84c77e94 GIT binary patch literal 488 zcmVP)Px$qDe$SRCt{2nz40+Fc1aD&M&bb=*CP_1cYT_FCM@qc=hxHX^=2wy9zGTp?kk~*3JBkPYRreI7Z5A^TnVa&Kx)hj zG91otAB$Pl3djjByu5!#bE*{ZSK&e791#1?FR>OLlvThy{Msa!6CM-^SbFm@3Ay1x ziGWnuhZ0J{g8~6E;pKF9rQxA+0pV<)k`VjOuTial*r#qu!q)Imu>i=E@JM*5TmYmc zJQ^MpG(xe7tz^ZQqIvJn|$u&$Im0iR1VQFE{jaD_d e1jlh4$2i}g)zOCyK$blK0000Px(0ZBwbRCt`_nz3#ZK@f(=RwQUBD1vC{&W$CPAms%pKuQ$x2uM&M0S`a{5-&gr z63-ANB`-ihY2?Q4=tx09168QjS+93y=l^%_u;jmq``R|p63Kda?jL_|C>!3FDx8x+$Q z8^^}!7amXWddjQMBWh60Gg$B40w7{TKs%~|fZoeM$N~__LtrU05Lj^N7!RzAaZIQU zke5IHf_L1c`&ukk?wDW#5V?k+Dc4b7*#zm!3qhR%LEU5q4aoYwMoeFxAHoE{7_VJ_ z|HbdpX+Tdz)IwSWKu#|cN zV|?jaU&U1u03z2ASmQly`hd_3KuL%T4++5qz)FptHq893h2RC{4uaiere*`i_>1$i zjsK5NPP6wiff4bN(f4;RuF@|*{W?@{NFkKGBR9y@_@EpF5iF=$Z9hESGBrO1p54Aw z9}*i}sv2{3f@ZvR%{v`X<3$t?2(moEQqD`J)6O(L7UKz)G~-1I07OLY+`qN{?5W|c zI8oYMiB$vP&BH(I&xiMJm~Ejn7(X~C&A{W6Q<+Y?ttrz@X6iIzrh{jUso*+5>%cNT zD2CvPB`5^ccoDJ?N;~oxAC&V1k$MP>@ghA|g3KI7A+*q7rLc%EfO)FUmKqemE^1H! zo;3lIDqE;G08AP~f@v#J0Mde}MH> zNGUwXVkpQ9;o|&ky?~0<$6`pG0;N3xD_YkSG@%W;(P{-(>#RW*fOkWrHH7pUy3xu& z7(IIYWWzr^uf|d__oUN71H){$Av;KJ0Hp$jflyM-Mym#adN=4XfSC@KYIm8vJJC%m z!B!B4To5%cg=--&8?80!Wi7x$@Wzpr5USq}Yg#SmszIoW=YZB8(g%c|JdqnUPt?*g^g}@rZ+{>J3r4~b82sOr| z&nS&agFr8aTo4}IWgn0C1w1E?348Z)H1&kN10b>qp||~jU00Y6{{U^Qk!?iF>QVpz N002ovPDHLkV1iIT>)QYT literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/vanquish.png b/core/assets-raw/sprites/units/vanquish.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ec8ea8a97408b1ad855966cbae1d94b9f47333 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Te1|*L~tNjL2jKx9jP7LeL$-D%zA9=bshE&XX zd-tsGVFwY{hwO_)A}&cSYMIiI(X0A}Y4yZS8!p~>JimI{B{j4O>8CymRnOb`Bm3pYNzdYH4#jon2R&YT zcJGS^d&TcBIqE%U_wNIX#qKXT;yw5G#^(zbi`Sp8`o2s1j--&@v=-AdoxI_t?~bXu zujb+pFFnV$%zgE$DywQnTMp^UEkCUNF7vRbTCBM7e#iXx>rd{t-@oVHk>9yT=F%AHyF_V(?0JV|fLlC3eX`KDVP(2d-5ygT{L z-~Ya^SSOi%f7E~KO0R14=H;uE-xRVgix=@U=Fhz{t$B%ic2Jt!y*0XQ3th6`6{dmW c>Cz1QlTIx?-w%Zd0;8V6)78&qol`;+0N<4RD*ylh literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 811a2c8627..abfecb82bc 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -714,6 +714,7 @@ stat.showinmap = stat.description = Purpose stat.input = Input stat.output = Output +stat.maxefficiency = Max Efficiency stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities @@ -815,6 +816,7 @@ bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} bar.liquid = Liquid bar.heat = Heat +bar.heatamount = Heat: {0} bar.heatpercent = Heat: {0} ({1}%) bar.power = Power bar.progress = Build Progress @@ -1098,12 +1100,22 @@ item.metaglass.name = Metaglass item.scrap.name = Scrap item.fissile-matter.name = Fissile Matter item.beryllium.name = Beryllium +item.tungsten.name = Tungsten +item.oxide.name = Oxide +item.carbide.name = Carbide +item.dormant-cyst.name = Dormant Cyst liquid.water.name = Water liquid.slag.name = Slag liquid.oil.name = Oil liquid.cryofluid.name = Cryofluid liquid.neoplasm.name = Neoplasm +liquid.arkycite.name = Arkycite +liquid.gallium.name = Gallium +liquid.ozone.name = Ozone +liquid.hydrogen.name = Hydrogen +liquid.nitrogen.name = Nitrogen +liquid.cyanogen.name = Cyanogen unit.dagger.name = Dagger unit.mace.name = Mace diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 6234b6f393..8e10964f1d 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -480,3 +480,6 @@ 63226=eletric-heater|block-eletric-heater-ui 63225=vent-condenser|block-vent-condenser-ui 63224=electric-heater|block-electric-heater-ui +63223=phase-heater|block-phase-heater-ui +63222=arkyic-wall|block-arkyic-wall-ui +63221=heat-redirector|block-heat-redirector-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index be4c828ec62d2754594c6563c87efa81390559f7..7125675ef561f885d000eb2ffd3c13c811398e5c 100644 GIT binary patch delta 46 zcmZ1?dsvo<;rvD>IUZS_f{euCRNai!#FEq^27VB&Ta=oTS(KVwlD}Dwr;P~!T^A2D delta 16 XcmX>syF`|W;p|2xIiAh-JS|KBEs6xv diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 465719efff..813b7cced2 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -44,7 +44,7 @@ public class Blocks{ redmat, bluemat, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, redweed, purbush, coralChunk, yellowCoral, - regolithWall, yellowStoneWall, rhyoliteWall, steamVent, carbonWall, redIceWall, ferricStoneWall, beryllicStoneWall, + regolithWall, yellowStoneWall, rhyoliteWall, steamVent, carbonWall, redIceWall, ferricStoneWall, beryllicStoneWall, arkyicWall, ferricStone, ferricCraters, carbonStone, beryllicStone, iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, grass, salt, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, carbonBoulder, ferricBoulder, beryllicBoulder, yellowStoneBoulder, @@ -64,7 +64,7 @@ public class Blocks{ melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge, //erekir - siliconArcFurnace, electrolyzer, oxidationChamber, atmosphericConcentrator, electricHeater, slagIncinerator, + siliconArcFurnace, electrolyzer, oxidationChamber, atmosphericConcentrator, electricHeater, phaseHeater, heatRedirector, slagIncinerator, carbideCrucible, slagCentrifuge, surgeCrucible, cyanogenSynthesizer, phaseSynthesizer, heatReactor, cellSynthesisChamber, @@ -519,6 +519,11 @@ public class Blocks{ attributes.set(Attribute.silicate, 1.2f); }}; + arkyicWall = new StaticWall("arkyic-wall"){{ + variants = 3; + arkyciteFloor.asFloor().wall = arkyicStone.asFloor().wall = this; + }}; + redIceWall = new StaticWall("red-ice-wall"){{ redIce.asFloor().wall = this; }}; @@ -1081,6 +1086,25 @@ public class Blocks{ consumes.power(0.5f / 60f); }}; + phaseHeater = new HeatProducer("phase-heater"){{ + requirements(Category.crafting, with(Items.oxide, 30, Items.carbide, 30)); + + drawer = new DrawMulti(new DrawHeatOutput(true)); + drawer.iconOverride = new String[]{""}; + size = 2; + heatOutput = 10f; + craftTime = 60f * 8f; + consumes.item(Items.phaseFabric); + consumes.power(0.5f / 60f); + }}; + + heatRedirector = new HeatConductor("heat-redirector"){{ + requirements(Category.crafting, with(Items.tungsten, 10, Items.graphite, 10)); + + size = 3; + drawer = new DrawMulti(new DrawHeatOutput(true), new DrawHeatInput("-heat")); + }}; + slagIncinerator = new ItemIncinerator("slag-incinerator"){{ requirements(Category.crafting, with(Items.tungsten, 15)); size = 1; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 1d01dab76a..2855ab91c8 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -89,7 +89,9 @@ public class ErekirTechTree{ node(carbideCrucible, () -> { node(surgeCrucible, () -> { node(phaseSynthesizer, () -> { + node(phaseHeater, () -> { + }); }); }); }); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 820917bc4d..b5afe88109 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -34,6 +34,7 @@ import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.*; import mindustry.world.blocks.environment.*; import mindustry.world.blocks.heat.*; +import mindustry.world.blocks.heat.HeatConductor.*; import mindustry.world.blocks.logic.LogicBlock.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.power.*; @@ -285,17 +286,36 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } public float calculateHeat(float[] sideHeat){ + return calculateHeat(sideHeat, null); + } + + //TODO can cameFrom be an IntSet? + public float calculateHeat(float[] sideHeat, @Nullable IntSet cameFrom){ Arrays.fill(sideHeat, 0f); + if(cameFrom != null) cameFrom.clear(); + float heat = 0f; for(var edge : block.getEdges()){ Building build = nearby(edge.x, edge.y); - if(build != null && build.team == team && build instanceof HeatBlock heater && (!build.block.rotate || (relativeTo(build) + 2) % 4 == build.rotation)){ - //heat is distributed across building size - float add = heater.heat() / build.block.size; + if(build != null && build.team == team && build instanceof HeatBlock heater && (!build.block.rotate || (relativeTo(build) + 2) % 4 == build.rotation)){ //TODO hacky - sideHeat[Mathf.mod(relativeTo(build), 4)] += add; - heat += add; + //if there's a cycle, ignore its heat + if(!(build instanceof HeatConductorBuild hc && hc.cameFrom.contains(id()))){ + //heat is distributed across building size + float add = heater.heat() / build.block.size; + + sideHeat[Mathf.mod(relativeTo(build), 4)] += add; + heat += add; + } + + //register traversed cycles + if(cameFrom != null){ + cameFrom.add(build.id); + if(build instanceof HeatConductorBuild hc){ + cameFrom.addAll(hc.cameFrom); + } + } } } return heat; diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index 8f43b150ec..6bae42920e 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -114,6 +114,8 @@ public class MinimapRenderer{ } Draw.reset(); + + //TODO might be useful in the standard minimap too if(withLabels){ drawSpawns(x, y, w, h, scaling); } diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index b3984444ab..8cc9119fcc 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -225,10 +225,10 @@ public class JsonIO{ public UnlockableContent read(Json json, JsonValue jsonData, Class type){ if(jsonData.isNull()) return null; String str = jsonData.asString(); - Item item = Vars.content.getByName(ContentType.item, str); - Liquid liquid = Vars.content.getByName(ContentType.liquid, str); - Block block = Vars.content.getByName(ContentType.block, str); - UnitType unit = Vars.content.getByName(ContentType.unit, str); + Item item = Vars.content.item(str); + Liquid liquid = Vars.content.liquid(str); + Block block = Vars.content.block(str); + UnitType unit = Vars.content.unit(str); return item != null ? item : liquid != null ? liquid : diff --git a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java index e6e99807b2..4f3a229ead 100644 --- a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java @@ -45,7 +45,7 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ @Override public float getSizeScl(){ - return 2000; + return 2000 * 1.06f; } @Override @@ -92,7 +92,7 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ tile.block = tile.floor.asFloor().wall; - if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 25) > 0.19){ + if(Ridged.noise3d(1, position.x, position.y, position.z, 2, 14) > 0.15){ tile.block = Blocks.air; } @@ -160,6 +160,10 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ median(3, 0.6, Blocks.slag); pass((x, y) -> { + if((floor == Blocks.arkyciteFloor || floor == Blocks.arkyicStone) && block.isStatic()){ + block = Blocks.arkyicWall; + } + float max = 0; for(Point2 p : Geometry.d8){ max = Math.max(max, world.getDarkness(x + p.x, y + p.y)); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 0637ed8c2b..8b28d8808b 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -9,6 +9,7 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; import mindustry.*; +import mindustry.content.*; import mindustry.game.Saves.*; import mindustry.game.*; import mindustry.gen.*; @@ -85,6 +86,12 @@ public class Sector{ public void loadInfo(){ info = Core.settings.getJson(planet.name + "-s-" + id + "-info", SectorInfo.class, SectorInfo::new); + + //fix an old naming bug; this doesn't happen with new saves, but old saves need manual fixes + if(info.resources.contains(Blocks.water)){ + info.resources.remove(Blocks.water); + info.resources.add(Liquids.water); + } } /** Removes any sector info. */ diff --git a/core/src/mindustry/world/blocks/heat/HeatConductor.java b/core/src/mindustry/world/blocks/heat/HeatConductor.java index 67d8f6a75e..4979fefc17 100644 --- a/core/src/mindustry/world/blocks/heat/HeatConductor.java +++ b/core/src/mindustry/world/blocks/heat/HeatConductor.java @@ -1,6 +1,8 @@ package mindustry.world.blocks.heat; +import arc.*; import arc.graphics.g2d.*; +import arc.struct.*; import arc.util.*; import mindustry.entities.units.*; import mindustry.gen.*; @@ -10,12 +12,13 @@ import mindustry.world.*; import mindustry.world.draw.*; public class HeatConductor extends Block{ - public float visualMaxHeat = 10f; + public float visualMaxHeat = 15f; public DrawBlock drawer = new DrawBlock(); public HeatConductor(String name){ super(name); update = solid = rotate = true; + rotateDraw = false; size = 3; } @@ -23,7 +26,8 @@ public class HeatConductor extends Block{ public void setBars(){ super.setBars(); - bars.add("heat", (HeatConductorBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat / visualMaxHeat)); + //TODO show number + bars.add("heat", (HeatConductorBuild entity) -> new Bar(() -> Core.bundle.format("bar.heatamount", (int)entity.heat), () -> Pal.lightOrange, () -> entity.heat / visualMaxHeat)); } @Override @@ -43,8 +47,10 @@ public class HeatConductor extends Block{ return drawer.finalIcons(this); } - public class HeatConductorBuild extends Building implements HeatBlock{ + public class HeatConductorBuild extends Building implements HeatBlock, HeatConsumer{ public float heat = 0f; + public float[] sideHeat = new float[4]; + public IntSet cameFrom = new IntSet(); @Override public void draw(){ @@ -57,9 +63,19 @@ public class HeatConductor extends Block{ drawer.drawLights(this); } + @Override + public float[] sideHeat(){ + return sideHeat; + } + + @Override + public float heatRequirement(){ + return visualMaxHeat; + } + @Override public void updateTile(){ - heat = calculateHeat(null); + heat = calculateHeat(sideHeat, cameFrom); } @Override diff --git a/core/src/mindustry/world/blocks/heat/HeatConsumer.java b/core/src/mindustry/world/blocks/heat/HeatConsumer.java new file mode 100644 index 0000000000..f59569a98e --- /dev/null +++ b/core/src/mindustry/world/blocks/heat/HeatConsumer.java @@ -0,0 +1,6 @@ +package mindustry.world.blocks.heat; + +public interface HeatConsumer{ + float[] sideHeat(); + float heatRequirement(); +} diff --git a/core/src/mindustry/world/blocks/production/HeatCrafter.java b/core/src/mindustry/world/blocks/production/HeatCrafter.java index 7ce4a20fd0..a2eb5d11dc 100644 --- a/core/src/mindustry/world/blocks/production/HeatCrafter.java +++ b/core/src/mindustry/world/blocks/production/HeatCrafter.java @@ -4,6 +4,7 @@ import arc.*; import arc.math.*; import mindustry.graphics.*; import mindustry.ui.*; +import mindustry.world.blocks.heat.*; import mindustry.world.meta.*; /** A crafter that requires contact from heater blocks to craft. */ @@ -35,9 +36,10 @@ public class HeatCrafter extends GenericCrafter{ super.setStats(); stats.add(Stat.input, heatRequirement, StatUnit.heatUnits); + stats.add(Stat.maxEfficiency, (int)(maxEfficiency * 100f), StatUnit.percent); } - public class HeatCrafterBuild extends GenericCrafterBuild{ + public class HeatCrafterBuild extends GenericCrafterBuild implements HeatConsumer{ //TODO sideHeat could be smooth public float[] sideHeat = new float[4]; public float heat = 0f; @@ -49,10 +51,16 @@ public class HeatCrafter extends GenericCrafter{ super.updateTile(); } + @Override public float heatRequirement(){ return heatRequirement; } + @Override + public float[] sideHeat(){ + return sideHeat; + } + @Override public float warmupTarget(){ return Mathf.clamp(heat / heatRequirement); diff --git a/core/src/mindustry/world/draw/DrawHeatInput.java b/core/src/mindustry/world/draw/DrawHeatInput.java index 17462fc553..bb5005ac71 100644 --- a/core/src/mindustry/world/draw/DrawHeatInput.java +++ b/core/src/mindustry/world/draw/DrawHeatInput.java @@ -4,27 +4,42 @@ import arc.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; +import arc.util.*; +import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.*; -import mindustry.world.blocks.production.HeatCrafter.*; +import mindustry.world.blocks.heat.*; /** Not standalone. */ public class DrawHeatInput extends DrawBlock{ + public String suffix = "-heat"; public Color heatColor = new Color(1f, 0.22f, 0.22f, 0.8f); public float heatPulse = 0.3f, heatPulseScl = 10f; public TextureRegion heat; + public DrawHeatInput(String suffix){ + this.suffix = suffix; + } + + public DrawHeatInput(){ + } + + @Override + public void drawPlan(Block block, BuildPlan plan, Eachable list){ + } + @Override public void drawBase(Building build){ Draw.z(Layer.blockAdditive); - if(build instanceof HeatCrafterBuild hc){ + if(build instanceof HeatConsumer hc){ + float[] side = hc.sideHeat(); for(int i = 0; i < 4; i++){ - if(hc.sideHeat[i] > 0){ + if(side[i] > 0){ Draw.blend(Blending.additive); - Draw.color(heatColor, hc.sideHeat[i] / hc.heatRequirement() * (heatColor.a * (1f - heatPulse + Mathf.absin(heatPulseScl, heatPulse)))); + Draw.color(heatColor, side[i] / hc.heatRequirement() * (heatColor.a * (1f - heatPulse + Mathf.absin(heatPulseScl, heatPulse)))); Draw.rect(heat, build.x, build.y, i * 90f); Draw.blend(); Draw.color(); @@ -37,6 +52,6 @@ public class DrawHeatInput extends DrawBlock{ @Override public void load(Block block){ - heat = Core.atlas.find(block.name + "-heat"); + heat = Core.atlas.find(block.name + suffix); } } diff --git a/core/src/mindustry/world/meta/Stat.java b/core/src/mindustry/world/meta/Stat.java index 134070bd5d..5d341d5def 100644 --- a/core/src/mindustry/world/meta/Stat.java +++ b/core/src/mindustry/world/meta/Stat.java @@ -61,6 +61,7 @@ public enum Stat{ input(StatCat.crafting), output(StatCat.crafting), productionTime(StatCat.crafting), + maxEfficiency(StatCat.crafting), drillTier(StatCat.crafting), drillSpeed(StatCat.crafting), linkRange(StatCat.crafting),