From a54907583bece807004a61d6650ca710403c9718 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 2 Aug 2022 21:26:15 -0400 Subject: [PATCH] Neoplasia reactor --- .../blocks/power/neoplasia-reactor-bottom.png | Bin 0 -> 822 bytes .../blocks/power/neoplasia-reactor-center.png | Bin 0 -> 411 bytes .../blocks/power/neoplasia-reactor-glow.png | Bin 0 -> 2779 bytes .../blocks/power/neoplasia-reactor-heat.png | Bin 0 -> 6860 bytes .../blocks/power/neoplasia-reactor-middle.png | Bin 0 -> 402 bytes .../blocks/power/neoplasia-reactor-top1.png | Bin 0 -> 643 bytes .../blocks/power/neoplasia-reactor-top2.png | Bin 0 -> 640 bytes .../blocks/power/neoplasia-reactor.png | Bin 0 -> 4614 bytes core/assets/bundles/bundle.properties | 1 + core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4614 -> 4633 bytes core/src/mindustry/content/Blocks.java | 69 +++++++++++++++- core/src/mindustry/content/Fx.java | 35 ++++++++ core/src/mindustry/content/Liquids.java | 2 +- core/src/mindustry/game/Rules.java | 2 +- core/src/mindustry/graphics/Pal.java | 1 + core/src/mindustry/type/CellLiquid.java | 23 ++++-- core/src/mindustry/type/Liquid.java | 2 + .../world/blocks/power/HeaterGenerator.java | 77 ++++++++++++++++++ .../world/blocks/power/PowerGenerator.java | 33 ++++---- .../world/blocks/production/Incinerator.java | 2 +- core/src/mindustry/world/draw/DrawCells.java | 4 +- 22 files changed, 225 insertions(+), 27 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-bottom.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-center.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-glow.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-heat.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-middle.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-top1.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor-top2.png create mode 100644 core/assets-raw/sprites/blocks/power/neoplasia-reactor.png create mode 100644 core/src/mindustry/world/blocks/power/HeaterGenerator.java diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor-bottom.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..c3eeda8e4c230c94dfecb07c93b00385562c8bae GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&!1Te> z#WAE}&fB}5dAAK190GT-XPNK)&$-D{@5;ImldkmcUre9wX?Y09CFfk1sk~FY?)~BXiqc2h=4@CiR=6>|#a-_Ez1P1lboYN* zdACYXe6zC6rybp2_x^5m|8?bD)RCiWIQnhgW!1i~y7;EkdeK^CllJF#YYvvrvDj9u zeQ33RSHEsd_lHNqkCMHoE7|;B@MFfqn3i}s0eR!K%74D}|G07Zzu>>$&NXi`J3pAT z{m7`k$>Syy3VoPCRHXdn52^v2!sS^Z!o@y;7x&4Le zW3jy{cNR@Q^Gj@RJd=!b%bAUR`90i>eTq)oO7->`u4A!i5pSO1RqE!Ju$uh zNcwRf!|@;U1n5=Xdj-tX2Oom37|U8PUhLTYTEF`fF{*foR^MZq|8QXKa2H zEmL{t=r22)7vbzXpEAk6jQ%MINqtui%$I%A!)kYF`zPf-n|HR?zw7sz8ArFC@m67A PU|{fc^>bP0l+XkK#??>J literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor-center.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor-center.png new file mode 100644 index 0000000000000000000000000000000000000000..e26c3c877d4001c18dc803c69ba962b8d589c667 GIT binary patch literal 411 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z!>W3 z;uumf=j|PDzrzj!t{0nF532l*XB566z~iCW`H@|;(86h>EE&F=}9zXV05=n@xSy|n()_$MWzAKi8w#om~__%bP z;J&c^40|~z1Tig{!l0?@;Dw#J)uwTx+*22y>yr%x&ocL{=-*IWBgoXl;r>Z`tGvQb z&6RC}=YHrG+c^9DFs#){K2uzopr0J%emX8-^I literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor-glow.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..88336542e8d0f062435e8189028232592cfeac0b GIT binary patch literal 2779 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z%|v= z#WAE}&fB@!)j}u5TH})*sR}G!oNkil_Pprde|@XRGNp@-B`@++FlQ>Ydvj~$t7VO9 z4i1~{J%8D*$gJzDyXxD$&{*yk0VfVcbRt4js{0>=KlDCdEv#3FXEp$>uppHNF9;O=Z#=Dd$dvRKbzVf?FG{P+6&gp71{_r zkXZEN9pm>#_XBA*a!E=o!gnkSr235?2)*!ZSv--!UEt_;J{yLp17;tDKd{{Bs%PK9 z;Mef}fMNm5mdE$ks~mc`roaB=-6bmfbRS555W2w_m!MQ55ntEWnJ@pNh4*6bn;4;o z0xAc%ydG8a*szy1njgsaY4P8vD4BEOZ`;>CU!R6~D`burd$ovqG^n<9ycd5^{(#@7 zb(ddd(nktHH##K_d6{59~K6v^#QyOYH_PTeaPZSIr+kGQBwaS*cD%<$#Bd(fZ`V zyJpi0_8e@x8&lKoX*;)jZOn|aUo&p(x_OaXaYcmeL%Re&_bj-|bb- z_RL8(J-GgW_!_qgrZuesCc%diHq=Zn6wFId%1PW9XKc5>|7gYHeVa|YHmjYj=nJcv zH$9z2XhDR5P{N_jSMoYm|$ z5WjEu!Ty2r2e}^t=fCRC+udDtAY0{t$Ks1G+66wzUAX?2*W2ckQ%V1#AO9HtvE5^O z-*7&~c0pDHC+7wa`R@C-M8fUD1vUJR&J7T`U;pT_oSDq_$FEiP@o*X_A8WE*6T!3i zv})~|3|_M>at0dv>Nos&uQD(A^8rm<>p zH*duc7;Qa&hSlQ8vwxX2XL#rJZ>_AmU*7ybLemGU=l-o-`<9!FcLuq)lXeST(Y-u#uU5tpC+ z6TNo#xuM%s=84LJ=Q<1@?e_d#QQabN=t}2FovH)7%)aYR+IX6I)!%DHDu*;zYVPyA z^?a9|$E{U6%+IFJ@oF&Nu(LdSb>X9C$^Vz$NtwDY^SpI@uETCnZtw|RGjALFncR2v zhc>OeK7*rNGOzglf{gt4J2-vzm-zhk-rfA;#FZm%%fb)jADAD~ogea>WsO2@A8QC_oZd`!#C|%@4xbUHP4@( z)Lr|H<7xtOsZ?z@iJ*Y^6P;~u5q{A1^X9bYKNA8ytvly@1s+$??1UdOS`BZ z!MG)W#no(i>B-willRN!gj9K!J~voZJ4@uYS^fKv$�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 E08?WLHUIzs literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor-middle.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor-middle.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1e8154c633558a6a69c4920c16517fc9035879 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&!06-Y z;uumf=k1-deN7Gmtrrh{uTM`~C@TB(xWT2TOU~V#eBkW%94jUUqQIq)zfAuR+MNG9 z@%ggMP4D@b-&#n;3q3S@obw~Q# z7S{Vz4p}?j=>hRiaTwa|Q*mOPc69nK_Zz<+uYT-3S2^eR!}~({l)siw_%Eq z!crCwO~xQEtjtwUIeWh7sweH5*V36Gm*7&{GWT(}K!S_Kr1+J88BY3pn)ZA+kU#UW z`I2dp@&;e<9BI2RQ6My@)Xqf3iRy O6j+|FelF{r5}E)jb&K5q literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor-top1.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor-top1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d713dd9481b11dea065d35803fb1d61e6a0f1aa GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z+~&` z;uumf=j|P9KV?S|hl}mXVhwJy=JagczN%%#*~3#;e_5r>fCm1Bo8OFYnE(E9>GzvoXECf?rN57ZG3a7IjUdyKNroR?IVNx& zJ0`B^z%^SazJ)pys;oxPY|+b$VlO70eR25q-=n6CmsW?g z%szhC*X79Phfkl>F{NC%#4-Da)Nw(s34zbtD&*oH*QmB!?G%8!zu{=llg(Y*UOr!b zzn;aTHuj@y1mnsz7|x$sVteAw;Z6@#hak=gAt1+j5@e<-&C=?5GWpy>l}nb>JgwL- zdzycs> zOo;P-oNXdFPu@>RVXoKF>lSWUh5Y6UZbAHl~T@@A=MSpL-yIkLaX;0BjL9Pi` zI9NSgp15i_>`QUcaPV6ryO06o+NJNAKmM)V^G+={Lta?H^-OO-gNU)Z6JyX7kcPrw zB@u4Bh9`br~2K7>k44ofy`glX=O&z+~m= z;uumf=k1-nfy#~o4Huv7@ownYaDZ9K(p&L_l28{12P5}n0S|`Y=XZiUZvCHo)9%Li zn5kh#`=nMbt5RcPKm`x#ODFzi{qb|&`+WY`^_&w{{d&|bpdiY7R9w+POHw$#g<)kv zPK_Ybk`0<4T{$K+EjuQz=)g4-B%zs*2a-7YyY9NwmDi`EKc4>;`lr*Nk-<~dp|9lc zpKD4Ec57whTNr+-EAQiA6sr8_%2Dvy=yA8egJr45#S@ih$>lcc-R!CRVR7EK;ft2& z!>f-kySg0tdiL(c&nzbvEEP2SXu8i$!@+H)^ux@W-pf-3!qlA*&KEPDbYAP$vibl2 z*l|qwwd+y$2Bx6Mc#xA8E&QRx;-Q)h@{0D$T_^55by*^$u#&|?i*b@y17W6-ps%Rg zC(q{rLN8@btITbFxkUQ+d;x^b52|eycIt0@7!FEf N44$rjF6*2UngHVq`NRMK literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/neoplasia-reactor.png b/core/assets-raw/sprites/blocks/power/neoplasia-reactor.png new file mode 100644 index 0000000000000000000000000000000000000000..d13908e2225a8a0054bde8fffe9171ba45521fd1 GIT binary patch literal 4614 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 J%Q~loCIFl4wX^^L literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 761d4926be..e1c7a888ee 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1673,6 +1673,7 @@ block.basic-assembler-module.name = Basic Assembler Module block.smite.name = Smite block.malign.name = Malign block.flux-reactor.name = Flux Reactor +block.neoplasia-reactor.name = Neoplasia Reactor block.switch.name = Switch block.micro-processor.name = Micro Processor diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index f590226e0b..27696878c3 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -578,3 +578,4 @@ 63106=shockwave-tower|block-shockwave-tower-ui 63105=heat-source|block-heat-source-ui 63104=flux-reactor|block-flux-reactor-ui +63103=neoplasia-reactor|block-neoplasia-reactor-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index c94f7ca2d0b7d2d028c29ae8b711c03be002137f..d0aa9226558a59301cefa72b3e40d2c432326950 100644 GIT binary patch delta 27 icmZounW@6W@Mj|vKR=gXUTS_pPGWIp;${y1e@p;&2ME{z delta 16 XcmbQK(x$@1@OvW@KmTSG{;x~`EB*x& diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 7dfa38d5a6..0a947143f8 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -36,6 +36,7 @@ import mindustry.world.consumers.*; import mindustry.world.draw.*; import mindustry.world.meta.*; +import static mindustry.Vars.*; import static mindustry.type.ItemStack.*; public class Blocks{ @@ -119,7 +120,7 @@ public class Blocks{ impactReactor, battery, batteryLarge, powerNode, powerNodeLarge, surgeTower, diode, //power - erekir - turbineCondenser, ventCondenser, chemicalCombustionChamber, pyrolysisGenerator, fluxReactor, + turbineCondenser, ventCondenser, chemicalCombustionChamber, pyrolysisGenerator, fluxReactor, neoplasiaReactor, beamNode, beamTower, beamLink, //production @@ -2374,7 +2375,6 @@ public class Blocks{ heating = 0.02f; consumeItem(Items.thorium); - //TODO how to non update consumeLiquid(Liquids.cryofluid, heating / coolantPower).update(false); }}; @@ -2507,6 +2507,7 @@ public class Blocks{ consumeLiquid(Liquids.cyanogen, 9f / 60f); liquidCapacity = 30f; + explosionMinWarmup = 0.5f; size = 5; @@ -2529,6 +2530,70 @@ public class Blocks{ ); }}; + //TODO stats + neoplasiaReactor = new HeaterGenerator("neoplasia-reactor"){{ + requirements(Category.power, with(Items.tungsten, 1000, Items.carbide, 300, Items.oxide, 150, Items.silicon, 500, Items.phaseFabric, 300, Items.surgeAlloy, 200)); + + size = 5; + liquidCapacity = 80f; + outputLiquid = new LiquidStack(Liquids.neoplasm, 20f / 60f); + explodeOnFull = true; + + heatOutput = 60f; + + //TODO arkycite, or nitrogen? both? Decide. + consumeLiquid(Liquids.arkycite, 80f / 60f); + consumeLiquid(Liquids.water, 10f / 60f); + consumeItem(Items.phaseFabric); + + itemDuration = 60f * 3f; + itemCapacity = 10; + + explosionRadius = 5; + explosionDamage = 500; + explodeEffect = new MultiEffect(Fx.bigShockwave, new WrapEffect(Fx.titanSmoke, Liquids.neoplasm.color), Fx.neoplasmSplat); + explodeSound = Sounds.explosionbig; + + powerProduction = 100f; + rebuildable = false; + + explosionPuddles = 80; + explosionPuddleRange = tilesize * 7f; + explosionPuddleLiquid = Liquids.neoplasm; + explosionPuddleAmount = 200f; + explosionMinWarmup = 0.5f; + + consumeEffect = new RadialEffect(Fx.neoplasiaSmoke, 4, 90f, 54f / 4f); + + drawer = new DrawMulti( + new DrawRegion("-bottom"), + new DrawLiquidTile(Liquids.arkycite, 3f), + new DrawCircles(){{ + color = Color.valueOf("feb380").a(0.8f); + strokeMax = 3.25f; + radius = 65f / 4f; + amount = 5; + timeScl = 200f; + }}, + + new DrawRegion("-center"), + + new DrawCells(){{ + color = Color.valueOf("c33e2b"); + particleColorFrom = Color.valueOf("e8803f"); + particleColorTo = Color.valueOf("8c1225"); + particles = 50; + range = 4f; + }}, + new DrawDefault(), + new DrawHeatOutput(), + new DrawGlowRegion("-glow"){{ + color = Color.valueOf("70170b"); + alpha = 0.7f; + }} + ); + }}; + //endregion power //region production diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index b04505be68..1b84922fec 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -470,6 +470,26 @@ public class Fx{ } }).layer(Layer.bullet - 1f), + neoplasmSplat = new Effect(400f, 300f, b -> { + float intensity = 3f; + + color(Pal.neoplasm1); + for(int i = 0; i < 4; i++){ + rand.setSeed(b.id*2 + i); + float lenScl = rand.random(0.5f, 1f); + int fi = i; + b.scaled(b.lifetime * lenScl, e -> { + randLenVectors(e.id + fi - 1, e.fin(Interp.pow10Out), (int)(5f * intensity), 22f * intensity, (x, y, in, out) -> { + float fout = e.fout(Interp.pow5Out) * rand.random(0.5f, 1f); + float rad = fout * ((2f + intensity) * 1.35f); + + Fill.circle(e.x + x, e.y + y, rad); + Drawf.light(e.x + x, e.y + y, rad * 2.5f, b.color, 0.5f); + }); + }); + } + }).layer(Layer.bullet - 2f), + scatheExplosion = new Effect(60f, 160f, e -> { color(e.color); stroke(e.fout() * 5f); @@ -1698,6 +1718,21 @@ public class Fx{ } }), + neoplasiaSmoke = new Effect(280f, e -> { + color(Pal.neoplasmMid); + alpha(0.6f); + + rand.setSeed(e.id); + for(int i = 0; i < 6; i++){ + float len = rand.random(10f), rot = rand.range(120f) + e.rotation; + + e.scaled(e.lifetime * rand.random(0.3f, 1f), b -> { + v.trns(rot, len * b.finpow()); + Fill.circle(e.x + v.x, e.y + v.y, 3.3f * b.fslope() + 0.2f); + }); + } + }), + heatReactorSmoke = new Effect(180f, e -> { color(Color.gray); diff --git a/core/src/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java index 90c194294a..d0189e9a9a 100644 --- a/core/src/mindustry/content/Liquids.java +++ b/core/src/mindustry/content/Liquids.java @@ -50,9 +50,9 @@ public class Liquids{ viscosity = 0.85f; flammability = 0f; capPuddles = false; - hidden = true; spreadTarget = Liquids.water; moveThroughBlocks = true; + incinerable = true; colorFrom = Color.valueOf("e8803f"); colorTo = Color.valueOf("8c1225"); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 3e33b3231c..0f3a658652 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -47,7 +47,7 @@ public class Rules{ public boolean schematicsAllowed = true; /** Whether friendly explosions can occur and set fire/damage other blocks. */ public boolean damageExplosions = true; - /** Whether fire is enabled. */ + /** Whether fire (and neoplasm spread) is enabled. */ public boolean fire = true; /** Whether units use and require ammo. */ public boolean unitAmmo = false; diff --git a/core/src/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java index b10065fa90..2929741cf1 100644 --- a/core/src/mindustry/graphics/Pal.java +++ b/core/src/mindustry/graphics/Pal.java @@ -112,6 +112,7 @@ public class Pal{ neoplasmOutline = Color.valueOf("2e191d"), neoplasm1 = Color.valueOf("f98f4a"), + neoplasmMid = Color.valueOf("e05438"), neoplasm2 = Color.valueOf("9e172c"), logicBlocks = Color.valueOf("d4816b"), diff --git a/core/src/mindustry/type/CellLiquid.java b/core/src/mindustry/type/CellLiquid.java index 220953c3c0..0eb19b01fd 100644 --- a/core/src/mindustry/type/CellLiquid.java +++ b/core/src/mindustry/type/CellLiquid.java @@ -5,6 +5,7 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; import arc.util.*; +import mindustry.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -18,7 +19,7 @@ public class CellLiquid extends Liquid{ public int cells = 8; public @Nullable Liquid spreadTarget; - public float maxSpread = 0.5f, spreadConversion = 0.5f, spreadDamage = 0.1f; + public float maxSpread = 0.5f, spreadConversion = 1f, spreadDamage = 0.1f, removeScaling = 0.25f; public CellLiquid(String name, Color color){ super(name, color); @@ -30,20 +31,32 @@ public class CellLiquid extends Liquid{ @Override public void update(Puddle puddle){ + if(!Vars.state.rules.fire) return; + if(spreadTarget != null){ float scaling = Mathf.pow(Mathf.clamp(puddle.amount / maxLiquid), 2f); for(var point : Geometry.d4c){ Tile tile = puddle.tile.nearby(point); - if(tile != null && tile.build != null && tile.build.liquids != null && tile.build.liquids.get(spreadTarget) > 0){ + if(tile != null && tile.build != null && tile.build.liquids != null && tile.build.liquids.get(spreadTarget) > 0.0001f){ float amount = Math.min(tile.build.liquids.get(spreadTarget), maxSpread * Time.delta * scaling); - tile.build.liquids.remove(spreadTarget, amount); + tile.build.liquids.remove(spreadTarget, amount * removeScaling); Puddles.deposit(tile, this, amount * spreadConversion); } } //damage thing it is on - if(spreadDamage > 0 && puddle.tile.build != null && puddle.tile.build.liquids != null && puddle.tile.build.liquids.get(spreadTarget) > 0){ + if(spreadDamage > 0 && puddle.tile.build != null && puddle.tile.build.liquids != null && puddle.tile.build.liquids.get(spreadTarget) > 0.0001f){ + + //spread in 4 adjacent directions around thing it is on + float amountSpread = Math.min(puddle.tile.build.liquids.get(spreadTarget) * spreadConversion, maxSpread * Time.delta) / 2f; + for(var dir : Geometry.d4){ + Tile other = puddle.tile.nearby(dir); + if(other != null){ + Puddles.deposit(puddle.tile, other, puddle.liquid, amountSpread); + } + } + puddle.tile.build.damage(spreadDamage * Time.delta * scaling); } @@ -79,7 +92,7 @@ public class CellLiquid extends Liquid{ public void drawPuddle(Puddle puddle){ super.drawPuddle(puddle); - float baseLayer = puddle.tile != null && puddle.tile.build != null ? Layer.blockOver : Layer.debris - 0.5f; + float baseLayer = puddle.tile != null && puddle.tile.block().solid || puddle.tile.build != null ? Layer.blockOver : Layer.debris - 0.5f; int id = puddle.id; float amount = puddle.amount, x = puddle.x, y = puddle.y; diff --git a/core/src/mindustry/type/Liquid.java b/core/src/mindustry/type/Liquid.java index b76a595dda..9fb9259b64 100644 --- a/core/src/mindustry/type/Liquid.java +++ b/core/src/mindustry/type/Liquid.java @@ -47,6 +47,8 @@ public class Liquid extends UnlockableContent implements Senseable{ public boolean coolant = true; /** if true, this liquid can move through blocks as a puddle. */ public boolean moveThroughBlocks = false; + /** if true, this liquid can be incinerated in the incinerator block. */ + public boolean incinerable = true; /** The associated status effect. */ public StatusEffect effect = StatusEffects.none; /** Effect shown in puddles. */ diff --git a/core/src/mindustry/world/blocks/power/HeaterGenerator.java b/core/src/mindustry/world/blocks/power/HeaterGenerator.java new file mode 100644 index 0000000000..53350f9fd5 --- /dev/null +++ b/core/src/mindustry/world/blocks/power/HeaterGenerator.java @@ -0,0 +1,77 @@ +package mindustry.world.blocks.power; + +import arc.math.*; +import arc.util.io.*; +import mindustry.graphics.*; +import mindustry.ui.*; +import mindustry.world.blocks.heat.*; +import mindustry.world.draw.*; +import mindustry.world.meta.*; + +public class HeaterGenerator extends ConsumeGenerator{ + public float heatOutput = 10f; + public float warmupRate = 0.15f; + + public HeaterGenerator(String name){ + super(name); + + drawer = new DrawMulti(new DrawDefault(), new DrawHeatOutput()); + rotateDraw = false; + rotate = true; + canOverdrive = false; + drawArrow = true; + } + + @Override + public void setStats(){ + super.setStats(); + + stats.add(Stat.output, heatOutput, StatUnit.heatUnits); + } + + @Override + public boolean rotatedOutput(int x, int y){ + return false; + } + + @Override + public void setBars(){ + super.setBars(); + + addBar("heat", (HeaterGeneratorBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat / heatOutput)); + } + + public class HeaterGeneratorBuild extends ConsumeGeneratorBuild implements HeatBlock{ + public float heat; + + @Override + public void updateTile(){ + super.updateTile(); + + //heat approaches target at the same speed regardless of efficiency + heat = Mathf.approachDelta(heat, heatOutput * efficiency, warmupRate * delta()); + } + + @Override + public float heatFrac(){ + return heat / heatOutput; + } + + @Override + public float heat(){ + return heat; + } + + @Override + public void write(Writes write){ + super.write(write); + write.f(heat); + } + + @Override + public void read(Reads read, byte revision){ + super.read(read, revision); + heat = read.f(); + } + } +} diff --git a/core/src/mindustry/world/blocks/power/PowerGenerator.java b/core/src/mindustry/world/blocks/power/PowerGenerator.java index 9500de8030..4b23baae9f 100644 --- a/core/src/mindustry/world/blocks/power/PowerGenerator.java +++ b/core/src/mindustry/world/blocks/power/PowerGenerator.java @@ -35,6 +35,7 @@ public class PowerGenerator extends PowerDistributor{ public float explosionPuddleRange = tilesize * 2f; public float explosionPuddleAmount = 100f; public @Nullable Liquid explosionPuddleLiquid; + public float explosionMinWarmup = 0f; public float explosionShake = 0f, explosionShakeDuration = 6f; @@ -110,23 +111,25 @@ public class PowerGenerator extends PowerDistributor{ } public void createExplosion(){ - if(explosionDamage > 0){ - Damage.damage(x, y, explosionRadius * tilesize, explosionDamage); - } - - explodeEffect.at(this); - explodeSound.at(this); - - if(explosionPuddleLiquid != null){ - for(int i = 0; i < explosionPuddles; i++){ - Tmp.v1.trns(Mathf.random(360f), Mathf.random(explosionPuddleRange)); - Tile tile = world.tileWorld(x + Tmp.v1.x, y + Tmp.v1.y); - Puddles.deposit(tile, explosionPuddleLiquid, explosionPuddleAmount); + if(warmup() >= explosionMinWarmup){ + if(explosionDamage > 0){ + Damage.damage(x, y, explosionRadius * tilesize, explosionDamage); } - } - if(explosionShake > 0){ - Effect.shake(explosionShake, explosionShakeDuration, this); + explodeEffect.at(this); + explodeSound.at(this); + + if(explosionPuddleLiquid != null){ + for(int i = 0; i < explosionPuddles; i++){ + Tmp.v1.trns(Mathf.random(360f), Mathf.random(explosionPuddleRange)); + Tile tile = world.tileWorld(x + Tmp.v1.x, y + Tmp.v1.y); + Puddles.deposit(tile, explosionPuddleLiquid, explosionPuddleAmount); + } + } + + if(explosionShake > 0){ + Effect.shake(explosionShake, explosionShakeDuration, this); + } } } diff --git a/core/src/mindustry/world/blocks/production/Incinerator.java b/core/src/mindustry/world/blocks/production/Incinerator.java index 84b2a144f5..62f8fc573e 100644 --- a/core/src/mindustry/world/blocks/production/Incinerator.java +++ b/core/src/mindustry/world/blocks/production/Incinerator.java @@ -76,7 +76,7 @@ public class Incinerator extends Block{ @Override public boolean acceptLiquid(Building source, Liquid liquid){ - return heat > 0.5f; + return heat > 0.5f && liquid.incinerable; } } } diff --git a/core/src/mindustry/world/draw/DrawCells.java b/core/src/mindustry/world/draw/DrawCells.java index 9b08604c72..28e6b4078c 100644 --- a/core/src/mindustry/world/draw/DrawCells.java +++ b/core/src/mindustry/world/draw/DrawCells.java @@ -11,9 +11,10 @@ import mindustry.world.*; public class DrawCells extends DrawBlock{ public TextureRegion middle; + public Color color = Color.white.cpy(), particleColorFrom = Color.black.cpy(), particleColorTo = Color.black.cpy(); public int particles = 12; - public float range = 4f, recurrence = 6f, radius = 3f, lifetime = 60f; + public float range = 4f, recurrence = 2f, radius = 1.8f, lifetime = 60f * 3f; @Override public void draw(Building build){ @@ -38,7 +39,6 @@ public class DrawCells extends DrawBlock{ } Draw.color(); - Draw.rect(build.block.region, build.x, build.y); } @Override