From 4e181d715fd65617a8ac7f14796ca5c11cdd2552 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 2 Dec 2021 17:00:49 -0500 Subject: [PATCH] Pyrolysis generator + generation tweaks --- .../power/pyrolysis-generator-bottom.png | Bin 0 -> 462 bytes .../blocks/power/pyrolysis-generator-glow.png | Bin 0 -> 6357 bytes .../blocks/power/pyrolysis-generator-mid.png | Bin 0 -> 245 bytes .../power/pyrolysis-generator-piston-t.png | Bin 0 -> 253 bytes .../power/pyrolysis-generator-piston.png | Bin 0 -> 229 bytes .../power/pyrolysis-generator-piston1.png | Bin 0 -> 229 bytes .../blocks/power/pyrolysis-generator.png | Bin 0 -> 1628 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3660 -> 3681 bytes core/src/mindustry/content/Blocks.java | 47 +++++--- .../maps/planet/ErekirPlanetGenerator.java | 8 +- .../world/blocks/power/ConsumeGenerator.java | 112 ++++++++++++++++++ .../blocks/power/ItemLiquidGenerator.java | 9 +- .../world/blocks/power/PowerGraph.java | 3 +- .../blocks/power/SingleTypeGenerator.java | 2 + .../src/mindustry/world/draw/DrawPistons.java | 24 +++- .../src/mindustry/world/draw/DrawRotator.java | 8 ++ 17 files changed, 183 insertions(+), 31 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-bottom.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-glow.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-mid.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston-t.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston1.png create mode 100644 core/assets-raw/sprites/blocks/power/pyrolysis-generator.png create mode 100644 core/src/mindustry/world/blocks/power/ConsumeGenerator.java diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator-bottom.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4b6a2b8fa10ba52de5f54471a2bd0c9083c362 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z}VsG z;uumf=k49yg@+A9STAymr>MW%&!n2-T*lI$`ng$s;vI)-rOuW#lX7kc?~A{WKM((E zzCLAM-rAylB{x1E4^iTgFZna;B8PLk%zr~=!7_e}f5qRFa`u({NzQSNsD1e3cvSa> z9~VBJ-zf6%KJ#(=>-Raz<7NI!?N|O&Q}8GID~E1j%_*C^QN=aar2n$V&1FnrYmj6} zW0)}*8I=>IGv?);UCpCd9xhqtw&U2N)Om9S&uy)oo15NJ%oF?Kj^x9LrP^n$m1UB1 z|D>opB(~+ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator-glow.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..f49f17b58eb548552ce9402b67c6d5f842ec07c7 GIT binary patch literal 6357 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 X(GG7<-P+5*z`)??>gTe~DWM4fgK+oC literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator-mid.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator-mid.png new file mode 100644 index 0000000000000000000000000000000000000000..828dec466d8c88feebc79971b17e6e383d582047 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_8xa z#WAE}&fA+C1rIq0FgrLqPPkCds&YZVWjfQbd6u$omieVr$fEOIVy*y{KE z^y90af4{YQHP@}RHoR`8$)Onw=1+@X)?=Xb!RyCIqxiDToz zZ(948^cB3}`|zIU!Wo9M2tsLpZ@2tLhCU@GiyrO=7FG@1Ga2@msd6IQ%3yF=*hj=f T#@0a803`0|>gTe~DWM4fH=k44ofy`glX=O&z_8uZ z#WAE}&fCk5TulxV4Hq@7x^i3ef&yHgm#h@$yz?YBOI-Dwl1#e6z35jKeE*j#GN6J3 zvvR!T6Eu%se*5$EudMnRd+co9Z9ac#t8dA<+c$Ur@4T@fIWb7^fpaGZQ_qt=g##^f z1X(n4!hbP%TgI>3Jn#K)#hd$LZ@awz$;>63;PmG8`qx@Nce6;GwEQE$@?%o<4@Hg- gVM#ww?PSR literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston.png new file mode 100644 index 0000000000000000000000000000000000000000..79f0f319085a7ba0109e57d3df5b43085916fd54 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z%bv_ z#WAE}&fDu7c@G(gxL%Y`TX@Q6rJ%Cnt20x&Vi!0k++^kY7`~|Z)QPS&<=XBHsNldn zo}1z~PQA6WueaQ<)Boywq0Rbzr@tDRmfNlU_uFwxTVCr=aYnlo7l8#AteY4_ZIwAD z_%x(2sR%DfI&JRg+2C~kqcY2nOVxik81ES!V@EZ;;cq45J_C7)bC#RlgJe8i{an^L HB{Ts5Giprz literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston1.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator-piston1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b62ced4a83563c7843701e12c6bc25f6f5607f GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z%bv_ z#WAE}&fDu7c@G(gxL%Y`Q&jDCI5}rZilEmGRx6fiu`Y`LxU81AIiG)j4EXzR$9=K;sk`E4S-%(i|JQ#@TVCr=QAWEI7l8#AteY4_ZIwAD z_%x(2sR%DfI&1Fe+2C~kqcY2nOVxik81ES!V@EZ;;cX=&SA@L8mK~-4K{B4MelF{r G5}E+IU`&+& literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/power/pyrolysis-generator.png b/core/assets-raw/sprites/blocks/power/pyrolysis-generator.png new file mode 100644 index 0000000000000000000000000000000000000000..356a2f0fb66052118cffd2681cd3154ebfa3ee48 GIT binary patch literal 1628 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^Tsls#P>Ln`LHo#Vakng>s7 zq_}rOAa|$e7m2T2QG1zH+&TN;864n#JU&#s>9sPk{RgZDKV#TFdmUmx{+X|`#aT=G}@rv5v=qCyW8S8&N!<``_8F|#J5 z`IE)!X&YP_KHYFga{aJa@~_suPZrKI9hkJ%%x}-?VbOPA&af?BQtety#ujm=2+q|X zjg%BmT~u{=8{XE*dS9f$>w}uEoWYV6e2jtjeCkDitZVRa`jI27u(F}-h?~lW56+C! zT6AheuiSmS>4PGpHfJbPL`3+p5EcdR=Mx$t4{0@OH87Ti?g_mkDlKNGn&9^&H(^8T z!VBvvx4$MI<96$FTI-Itwd!*^d<(qFq+DU0yrz%K%#!gzTG=zb z4-D_D?sr8VeAe2qbFv4Me&DlI8OJ+?c_R9U)1D>k9aH2C>)hmgiEF~#57TQVN&kKJ zwoAoAebp@Sl!kW=|E1?Q_14*QZfuORw2XF4h|d#MmRtXK+e+oUFYQbdRL=a`&ehaf zKkWkR|D)$-RTMhiuHg8i$9d|8m9bRvgT*zMn8G}btQ~o3Qp;BM9TWM%F<*%Bxr*rR zLY|tirb+tD_K$+q9BzINQR%tU#bO%2EY;#9)20u)8pZ#*tl7_AS3UT)-+b@8Hhc5c z2HzsrJ$X50LKOEc*88{qNVYEgpv?K%W?{6`$)r1aKc=yW?NdECYfY(VgV^H>Q!f+* zYBHX<{U`9@dCOJlr;WdKgzs$F+@hnPov!xo=Zbln{fC?O`yM#YzJdTdzkJ| zUhpJYp}NM4CFWyf7gN2eP%eexIjfA4? zefJzbzVmSnYn__D(!#Hg@5CQv;0*H?7X5IZX+p)-orf<YUtXsW5OXaGmQun(i<+9ZcA7!=(rE>Kw2;~a+{bDaWn|RnE-MTf*jA6PC zFPDEcnzz$HNbmnnDUq;thHdLFKFR5eRbuem!hA*c(IzGV&gp+sB)L}xGYCmX&f1XV z%`~A^W9y0+Hri!w4%_x0|0$_9g+XQFF733l9OoD8Vo_*V#I1aoMd-kRbk&H%*Cd0M zH-x@f5kHNk^&~gr#m%~2EnXkg@{AYcF+TqhxPL;#OzzEJwl9wSvDk2<$PckCE8@2c zPMG>YR5Lea@`vyX7hI3}{g~3w)52l5d+*HJoE6^3uYSm6oGNt1Htp%ghX>uw{jDB& zGij-;kp3(9N7RO;ZcFVA)_Ac7j}7ON&3-*U6v4>z=b{m)JXz#7^TS+S8~+0uJ%R~) zOYW+jYkjtVA&ZRr(iQ|QW4G+RSR_Lq= zKH$eG@~5ZeRnsokHxm>NhO3l_Y;ty3-Xc;HcIaxtJGBKYcFGU449bN9xa6l6n9kVE ekuc*Q`#Xlht!E0|eHa)R7(8A5T-G@yGywn@z1d;_ literal 0 HcmV?d00001 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index c9171b1526..58f2e2dcf2 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -470,3 +470,4 @@ 63236=chemical-combustion-chamber|block-chemical-combustion-chamber-ui 63235=arkyic-stone|block-arkyic-stone-ui 63234=yellow-stone-boulder|block-yellow-stone-boulder-ui +63233=pyrolysis-generator|block-pyrolysis-generator-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 44fd6af0494e2c88cf121455d7febbea4dfe0fdb..00ce8adfa64d420737526011b6f363a5cdd4542a 100644 GIT binary patch delta 36 scmX>j^H7F~;lxI!W8A{R1(iklIhDnk#k%RKd8tK-CHb3=aknu60R3ML<^TWy delta 16 YcmaDTb4G@V;rK?TW89nXa 0.67f && block == Blocks.carbonWall){ + if(noise(x + 78, y, 4, 0.7f, 35f, 1f) > 0.6f && block == Blocks.carbonWall){ block = Blocks.graphiticWall; - }else if(noise(x + 782, y, 4, 0.8f, 40f, 1f) > 0.7f && block != Blocks.carbonWall){ + }else if(noise(x + 782, y, 4, 0.8f, 38f, 1f) > 0.68f && block != Blocks.carbonWall){ ore = Blocks.wallOreBeryl; } } }else if(!nearWall(x, y)){ - if(noise(x + 150, y + x*2 + 100, 4, 0.8f, 40f, 1f) > 0.71f/* && floor == Blocks.yellowStone*/){ + if(noise(x + 150, y + x*2 + 100, 4, 0.8f, 60f, 1f) > 0.76f/* && floor == Blocks.yellowStone*/){ ore = Blocks.oreTungsten; } //TODO design ore generation so it doesn't overlap - if(noise(x + 999, y + 600, 4, 0.63f, 37f, 1f) < 0.25f/* && floor == Blocks.yellowStone*/){ + if(noise(x + 999, y + 600, 4, 0.63f, 50f, 1f) < 0.22f/* && floor == Blocks.yellowStone*/){ ore = Blocks.oreThorium; } } diff --git a/core/src/mindustry/world/blocks/power/ConsumeGenerator.java b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java new file mode 100644 index 0000000000..464e8e1d08 --- /dev/null +++ b/core/src/mindustry/world/blocks/power/ConsumeGenerator.java @@ -0,0 +1,112 @@ +package mindustry.world.blocks.power; + +import arc.graphics.*; +import arc.math.*; +import arc.util.*; +import mindustry.content.*; +import mindustry.entities.*; +import mindustry.graphics.*; +import mindustry.type.*; +import mindustry.world.meta.*; + +/** + * A generator that just takes in certain items or liquids. Basically SingleTypeGenerator, but not unreliable garbage. + * TODO at the moment, these generators require at least one item in their inventory to work, meaning they cannot be "kickstarted" with only one item. + */ +public class ConsumeGenerator extends PowerGenerator{ + /** The time in number of ticks during which a single item will produce power. */ + public float itemDuration = 120f; + + public float effectChance = 0.01f; + public Effect generateEffect = Fx.none; + public float generateEffectRange = 3f; + + public @Nullable LiquidStack liquidOutput; + + public ConsumeGenerator(String name){ + super(name); + } + + @Override + public void setBars(){ + super.setBars(); + + if(liquidOutput != null){ + addLiquidBar(liquidOutput.liquid); + } + } + + @Override + public void init(){ + if(liquidOutput != null){ + outputsLiquid = true; + hasLiquids = true; + } + emitLight = true; + lightRadius = 65f * size; + super.init(); + } + + @Override + public void setStats(){ + super.setStats(); + + if(hasItems){ + stats.add(Stat.productionTime, itemDuration / 60f, StatUnit.seconds); + } + + if(liquidOutput != null){ + stats.add(Stat.output, StatValues.liquid(liquidOutput.liquid, liquidOutput.amount * 60f, true)); + } + } + + public class ConsumeGeneratorBuild extends GeneratorBuild{ + public float warmup, totalTime; + + @Override + public void updateTile(){ + boolean valid = consValid(); + + warmup = Mathf.lerpDelta(warmup, enabled && valid ? 1f : 0f, 0.05f); + + productionEfficiency = valid ? 1f : 0f; + totalTime += warmup * Time.delta; + + //generation time always goes down + generateTime -= Math.min(1f / itemDuration * delta(), generateTime); + + //randomly produce the effect + if(valid && Mathf.chanceDelta(effectChance)){ + generateEffect.at(x + Mathf.range(generateEffectRange), y + Mathf.range(generateEffectRange)); + } + + //take in items periodically + if(hasItems && valid && generateTime <= 0f && items.any()){ + cons.trigger(); + generateTime = 1f; + } + + if(liquidOutput != null){ + float added = Math.min(productionEfficiency * delta() * liquidOutput.amount, liquidCapacity - liquids.get(liquidOutput.liquid)); + liquids.add(liquidOutput.liquid, added); + dumpLiquid(liquidOutput.liquid); + } + } + + @Override + public float warmup(){ + return warmup; + } + + @Override + public float totalProgress(){ + return totalTime; + } + + @Override + public void drawLight(){ + //TODO + Drawf.light(team, x, y, (60f + Mathf.absin(10f, 5f)) * size, Color.orange, 0.5f * warmup); + } + } +} diff --git a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java index 1b14dd78d8..5c7daab1bd 100644 --- a/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -25,6 +25,7 @@ public class ItemLiquidGenerator extends PowerGenerator{ /** The time in number of ticks during which a single item will produce power. */ public float itemDuration = 70f; + /** Minimum liquid efficiency for a generator to accept it. */ public float minLiquidEfficiency = 0.2f; /** Maximum liquid used per frame. */ public float maxLiquidGenerate = 0.4f; @@ -36,6 +37,7 @@ public class ItemLiquidGenerator extends PowerGenerator{ public boolean defaults = false; /** @deprecated unused, use a custom drawer instead */ + @Deprecated public Color heatColor = Color.valueOf("ff9b59"); /** @deprecated unused, use a custom drawer instead */ @Deprecated @@ -129,14 +131,17 @@ public class ItemLiquidGenerator extends PowerGenerator{ totalTime += heat * Time.delta; //liquid takes priority over solids + //TODO several issues with this! - it does not work correctly, consumption should not be handled here, why am I re-implementing consumes + //TODO what an awful class if(hasLiquids && liquid != null && liquids.get(liquid) >= 0.001f){ float baseLiquidEfficiency = getLiquidEfficiency(liquid); float maximumPossible = maxLiquidGenerate * calculationDelta; float used = Math.min(liquids.get(liquid) * calculationDelta, maximumPossible); - liquids.remove(liquid, used * power.graph.getUsageFraction()); + liquids.remove(liquid, used); productionEfficiency = baseLiquidEfficiency * used / maximumPossible; + //TODO this aggressively spams the generate effect why would anyone want this why is this here if(used > 0.001f && (generateTime -= delta()) <= 0f){ generateEffect.at(x + Mathf.range(generateEffectRnd), y + Mathf.range(generateEffectRnd)); generateTime = 1f; @@ -152,7 +157,7 @@ public class ItemLiquidGenerator extends PowerGenerator{ } if(generateTime > 0f){ - generateTime -= Math.min(1f / itemDuration * delta() * power.graph.getUsageFraction(), generateTime); + generateTime -= Math.min(1f / itemDuration * delta(), generateTime); if(randomlyExplode && state.rules.reactorExplosions && Mathf.chance(delta() * 0.06 * Mathf.clamp(explosiveness - 0.5f))){ //this block is run last so that in the event of a block destruction, no code relies on the block type diff --git a/core/src/mindustry/world/blocks/power/PowerGraph.java b/core/src/mindustry/world/blocks/power/PowerGraph.java index 735af932ec..33f552f186 100644 --- a/core/src/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/mindustry/world/blocks/power/PowerGraph.java @@ -83,7 +83,8 @@ public class PowerGraph{ return Mathf.clamp(lastPowerProduced / lastPowerNeeded); } - /** @return multiplier of speed at which resources should be consumed for power generation. */ + /** @deprecated unused mechanic that always returns 1, I really don't know why you would use this outside of copy-pasted code */ + @Deprecated public float getUsageFraction(){ return 1f; } diff --git a/core/src/mindustry/world/blocks/power/SingleTypeGenerator.java b/core/src/mindustry/world/blocks/power/SingleTypeGenerator.java index 95919f105b..549251c44a 100644 --- a/core/src/mindustry/world/blocks/power/SingleTypeGenerator.java +++ b/core/src/mindustry/world/blocks/power/SingleTypeGenerator.java @@ -2,6 +2,8 @@ package mindustry.world.blocks.power; import mindustry.type.*; +/** @deprecated use ConsumeGenerator instead, this class does not have a sane implementation. */ +@Deprecated public class SingleTypeGenerator extends ItemLiquidGenerator{ public boolean useItems = true; diff --git a/core/src/mindustry/world/draw/DrawPistons.java b/core/src/mindustry/world/draw/DrawPistons.java index 4e47945c91..d4e550e43a 100644 --- a/core/src/mindustry/world/draw/DrawPistons.java +++ b/core/src/mindustry/world/draw/DrawPistons.java @@ -3,7 +3,6 @@ package mindustry.world.draw; import arc.*; import arc.graphics.g2d.*; import arc.math.*; -import arc.math.geom.*; import arc.util.*; import mindustry.entities.units.*; import mindustry.gen.*; @@ -11,7 +10,8 @@ import mindustry.world.*; public class DrawPistons extends DrawBlock{ public float sinMag = 4f, sinScl = 6f, sinOffset = 50f, sideOffset = 0f, lenOffset = -1f; - public TextureRegion region1, region2; + public int sides = 4; + public TextureRegion region1, region2, regiont; @Override public void drawPlan(Block block, BuildPlan plan, Eachable list){ @@ -20,9 +20,20 @@ public class DrawPistons extends DrawBlock{ @Override public void drawBase(Building build){ - for(int i = 0; i < 4; i++){ + for(int i = 0; i < sides; i++){ float len = Mathf.absin(build.totalProgress() + sinOffset + sideOffset * sinScl * i, sinScl, sinMag) + lenOffset; - Draw.rect(i >= 2 ? region2 : region1, build.x + Geometry.d4[i].x * len, build.y + Geometry.d4[i].y * len, i * 90); + float angle = i * 360f / sides; + TextureRegion reg = + regiont.found() && (Mathf.equal(angle, 315) || Mathf.equal(angle, 135)) ? regiont : + angle >= 135 && angle < 315 ? region2 : region1; + + if(Mathf.equal(angle, 315)){ + Draw.yscl = -1f; + } + + Draw.rect(reg, build.x + Angles.trnsx(angle, len), build.y + Angles.trnsy(angle, len), angle); + + Draw.yscl = 1f; } } @@ -30,7 +41,8 @@ public class DrawPistons extends DrawBlock{ public void load(Block block){ super.load(block); - region1 = Core.atlas.find(block.name + "-piston0"); - region2 = Core.atlas.find(block.name + "-piston1"); + region1 = Core.atlas.find(block.name + "-piston0", block.name + "-piston"); + region2 = Core.atlas.find(block.name + "-piston1", block.name + "-piston"); + regiont = Core.atlas.find(block.name + "-piston-t"); } } diff --git a/core/src/mindustry/world/draw/DrawRotator.java b/core/src/mindustry/world/draw/DrawRotator.java index 13ea1f3eb6..6c2b55a66b 100644 --- a/core/src/mindustry/world/draw/DrawRotator.java +++ b/core/src/mindustry/world/draw/DrawRotator.java @@ -11,6 +11,14 @@ public class DrawRotator extends DrawBlock{ public boolean drawSpinSprite = false; public float spinSpeed = 2f; + public DrawRotator(boolean drawSpinSprite, float spinSpeed){ + this.drawSpinSprite = drawSpinSprite; + this.spinSpeed = spinSpeed; + } + + public DrawRotator(){ + } + @Override public void drawBase(Building build){ Draw.rect(build.block.region, build.x, build.y);