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 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z;wgY z#WAE}&eLe?yu$`OsXcj?4sP)Z(a#oTKj+))&Ob|6{KE|96hC#zRZ9Oy0%XUX^@ z{PT-TP*3%be?M!O80P33_jG9fDcr4R`}RfK%Y8Q2^pz(WFf#P`9NNX=rkdEbzsKWH zbk&1>HV;hXyX89spHEEHIX0_^y;*3B)`E50L$18tHKVum$B(M|B=u$?l^!p4-B2ga z#z`ADadAx0Xq?@9=WA5OG37}N46|Cq8jZ}4{WMxH|8}otTvGy{qCu2p&2BwcZ^iQS zKaIj~9@Sc)zUML50ef|Ywy8-$9h@EAOQN>isPsC1qlIb9!F9U?KDB&*lRaPm6ca;0 zs2uYP-pOnSe(Vw|a%Fikhu^SK=~&jbjaxD&PCLrgA;|8M^EpMg^xVx$A8$xZu$q3F z?d3+@ui|H$7fk)U)w z;Djp`Ink#VmTf=oIF~J1XvNIw60y585Va4l$l80#XF6;n&A*0b!b>j=EgIInBN8%wW?O9U2qyxx1phjYOtrR|-s zuGZ<_;+x(y`{jgS~@E3BQi9t-S?wy|$( zX<26Lxc-_XYhQ~Fvoi70VDrz z_bQpqzRAVg1h|g6t^FML-Rte7oURLA7mOcFowiNRZ08b3-+9xmo|-E9zGlceJ8jP6 zgl~&dw7;w{juBC)>|7+;rRB(d<;k;Y1-*=Wqwg_J;VS#x)H3DAU7-m~!3WoIdQ4B~ zYl#&WaL{d6HMX61R;lbDW&h5$!5A-?rM@n4oUE(A5gn@y9!PC{x JWt~$(69B&&XQ%)G literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/environment/arkyic-wall1.png b/core/assets-raw/sprites/blocks/environment/arkyic-wall1.png new file mode 100644 index 0000000000000000000000000000000000000000..0df834af2e26095c7ad85398238674d66262cb2f GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>VC467 zaSVxQeLKxotXYBQ_~P?x*VjvIh7{N z_x$nV-u&lW3?~48YWDh@%hH~cOQ4H-xnCw5vBT`NxeC&MrvND z39G4ti)nz6Q%uWJg|0Za`i3_Qs;?Ym8}A6T=Q+zeRTb$OPpg~|pui=(DV?3;;D>Ly vBCFmrHJ24zo84>^S#)Z#2@7Mx2iCpZt#3B}@ONflU|{fc^>bP0l+XkKKgxVASz+ zaSVxQJsM^$c1S_s&Xc8|8K%V@ICm>OJNKcjO~$U6hDpo;$F+7H*z|^pGx+1l(>%W= zCGO3C&c#r$H+BL0vD^)3mi04a-^st^e1wDHLhz9-ylV;z_RaAStiE=k3oW2k|HNXZhYUWzU)3rI*{`Dl?7Ai>0Aa ZU;5T8OE<~sP7DkT44$rjF6*2UngDHvlUx7* 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 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>VC3|4 zaSVxQJv()yV6y>_YrVxTo(Yp!FQs<+Ot3XtVJ#MLlHrP{=zQi)y0?Yg%I`3;U;BK0 zdQIit`SJ`q?A5+>JS;c1e#N}u!YlbIhaQFv7rJhjq$;lQe(WuvCFs_vwOP4dlzEFo zf#*^I=YNyGG_7X3EtVa;>oz1(-_^o1#w9oGb=FHlpF6=C(5>STOIWWqWA%R(lM zM|>(c8r+J$I;OC0oXtGxZoak3SAUL!lA9wK*V!)BJ*^qUGQlgv+Wg%0wvBTmeBCB8 zO-r81y23NU+WN-h9U_ZVe!h9JUiN(Yp;;LpJ7zI$6$s?daD4J-A=d%c^1K!|n>#Jh o3-n?)TzJK=_E~6&0>dG3#@_Zo*;utp3=9kmp00i_>zopr0E!iXDF6Tf 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 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 C^wVqr 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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 A@&Et; literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-redirector-top1.png b/core/assets-raw/sprites/blocks/production/heat-redirector-top1.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2463b4b3de1f20a0d8b9f9ba40b5fcba532f5d GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z?9_a z;uumf=k45sxwjnzT<4b*F*?pF(0zB@UG8pwmZxwd_Xp2Uib@ME+!1x1XwCelIy{=; z<9v^E=lC=QUQYd-xkF|V|Dy17%O5f=Xka+@!IAOoPF{JD3sW+GENDnO)5_14;iOs9 zkbIhX;(QH-36F0V1ULvB-~Nzc9;0H??_n+&;B;1vLw$R3mRf0r0gpAD`vgq z{r36%_5S~wvHu+z{R3C!<*8md#Ll{ASy_#%Qks=QLLDtbeL&vp?`uaK(pCV2Hmqal%fm zQ|4)=PbO+wv%WbJ#L0DIqN>myc9R3w!_*F}>|n7Foyf3UN$5d{3)8lDtGrro`Ony5 zH%-rSew(*uj(8I9$52+z8D0Sn4BLf71X^Z);{Eu&MfkDg1&-N;oEs#kGeD`|4x9l_ cO#2v}vRbYl*juokfq{X+)78&qol`;+0LG#ie*gdg literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/heat-redirector-top2.png b/core/assets-raw/sprites/blocks/production/heat-redirector-top2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cafe50705b5cdb75e5dea55c04d4526b78558ec GIT binary patch literal 685 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/phase-heater-top1.png b/core/assets-raw/sprites/blocks/production/phase-heater-top1.png new file mode 100644 index 0000000000000000000000000000000000000000..75c0a1a1e3ba0ef40d0874e599075f2cd5c43d15 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z&O{_ z#WAE}&f8gg3lAIcxXr(u(zN6>N2H4I&dWhiE z6`R~!v+C2L?j`Tjx8JIYFC~zm4TgZKbbMW`%*0 zLio2}PSb}68yF-%c!ia3eYmiY@$yAGb;sGyr)PvUm|Z>V86hnvCB~2{^p2Cim%Cw4 zOZDOA#?}dD8?L_jQDmaeaIN><(is99R2386v%Tr%WHh~fKWdhEz-EOg=gY4du5&Mp z;CftRtg_=CANM+b7nbYpNlmYv10PmdEqj!`{$AhFR`g?|HzIK}-_rx*N< oh`RAk44ofy`glX=O&z_`fM z#WAE}&f8fVOIr*CSdX96->Wre7w2{-=IK8t?qu9vykEu`|I{n505#9QE&ZD zC_muW-YCR$yin$Np^nj)yI)GaILjQpP%hly$tWbp!!@J5-Ho;9`swu(9$(k3$}eU* z^uhkRve3Np+FA8#I`1u?U%&k5YnoPqoSm51JMD#?Tpagnvd*-x5Esz?9mBb*-687? zw~@@beEIIkt6V2I_4n+lcPm~c@*(`8<3kyN-{>T9Rg4>Q%g(#DHrN(2y4xSPxI!Rc(;wZXRg9{<7sXb+ zWA-t3y2q7VW2iDCj*okpxeLqX=%l8XzJZB*;+EZ+n$XwsN_ydhNjL45H;05XHoc5b zZhAR?vD3?y6Q1#T964oOzHvz$!yRvpNX=F9OvP>cW_z7ucT8ql@MlI$G1Gw`jwelh sWTwU*{*suPc)mBxbO#G4ge~sRzk0Eq*I}A10|Nttr>mdKI;Vst093)x_W%F@ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/phase-heater.png b/core/assets-raw/sprites/blocks/production/phase-heater.png new file mode 100644 index 0000000000000000000000000000000000000000..3563a591b4c572b955a614be5560e0ae0da0c894 GIT binary patch literal 1095 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z{2S1 z;uumf=jp7CdBTnYZO6k@GBh-rGG3hPRh_QzlvTsQOXMSmM}Pt&zXPL?z5}Pwc>z^b zeFw+PC&%8s@Njfw4qb6Aa(#K)^Z(`VH$2(j`S|wkyFYELjdyQfJbnHBIN#-Szbt(2 zep>DP&mX0io>*G;hM(T4BewdU)s50#SC?;+hb(GtgmbWev|s%+#>K_P@F45!4r!6g z;?l>Dy%d-8|4?;m^?Bv2fHTGs@9#1xBsn`+uWD?#ciQ0ulfX&m1WjXsh=Laq{A;=k zeOB;Jm~Q{Csr=58-%&bY?`9-03G8fJpm{wo{wB-I)7*}8nH=w?u<@Swwa?8bexCdx zmID&&W9$DPeSax4ddvCX!iHnjx3ZJ(aW$zv ze!TxpjQcWXE$!r|Ov#2EY)fw*c+F`l*|=ByXJQP)mXL_13re!zco#;nPg&y2p8ep~ zgREjJ2`pmbdz;<0V+uZ9ae4xSy{{G10_4|w&?GduHVZR-Qp zr+iI!Q*(%7<$$0&m51hB7}qd)WT<`S$O5GjbQ2NZ4DbpFQw+a_~&Q z-D@>3`=-4zNm|yN-m~(7mBZ@;Ms^x)4?0yfSguqEZW8da{v;tkox^X;LBw^s)jN=9w~1(u!VT&fp{E+?1&u$Z)A?g{#!%P0i*r zHc78FU|73YisNB17votKo|c1NiAQ>~r|{0YiFt+wSAex z$x7DSnq%2jR6Jq8M5aNFBO!dQQetG3PiA(_@RzYxH_HJLtE? z2*}+@mGA$~YNOuAS^d4pk44ofy`glX=O&!1&11 z#WAE}&fB|ZeGfZ`xIScGBoc8+YEjFShKyd-FHEZ^ZrX71#^d?blRoQCoO@<=vU=iE zEze0Ro|9C3t0ih1w|_tV{zZ08T}<2c!X+&;+x_k(HM9xor#=f+&)fMU`{l<;&*Ewh z#dYTgJzjct?~4a}#qTdU>OE)o?*og)?k_pwJ@@y<=L;5#*PpNYzDxU#q>$dU7Sl7G zyy2zqj;Xq@=Hd@8J;%1pef6p;t7=AD4(ZA*Kdk*O^RTB{thn)h$Ncx}PwuzhzvteO z-@TvunvGh(>UxX$#<$CplzUplIE{1{$iXPG=HJ-ach`MLf-UGUiRJdOSE_W zg1j%X<*Sw76tXUh7x6Ua&%H9Od5L>=P@3GmHM(pI kU9#U5rh($=(hU2PPAxs(4}}OaFfcH9y85}Sb4q9e0N<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),