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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zJ3L(+Ln`LH zy}P^cuz?8cMQ-sF^>_Q3R8ySGSo%{xH>*#)<4~>C*^*{b&h6lR@%QoP;a|e9!N<8uTI-#&7Yj_?uGBzLG!5Ij#}44}Tnw>fZ3gK1X@H%zvr<%71DK{$zjU&@HSvWpg*GxaOMlU-r1Uj0tQFk_>4KGX^80 za-wv`yu7okc@)dTCCl7)9D9^HZ?53Et(9|g(_4ypVqe^md>FA*`>eIHOmgm@6m^HB zmh{}-`8+HhJs(!={W$p`L#N;>w`2ZXj6%viQnL1%Y#u!umK)Vgs$rhID9Pen<}G0S PFfe$!`njxgN@xNAtYD$; 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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 Xge)sphh?>m00000NkvXXu0mjfgK+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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|)_b}*hE&XX zdvl}UAqN3w2WQ6#7wTD6E(o|xXF4{|QufUKfe0; z_gkx1bKP2N!|P_69GbCU{Zi`+}fXnlemExRtp2TK}tDaMmNjJC`{mO#x|8hm39%OJ}R*si^ zg68qdZ-1Wtl~q4ukDblC&F3#|^({Gf`{wTdoi`RFCk6>VaPH(_>Uq+qaG+(5Ad5y$ z_%8-;%lLJh=e_@}cynLuZI|~ynYn}$oZh@%|61$kZWf7?mVX3TeoU(Vp~&$eEa?Zb cjX?GWJN>T)s?!=df@DB4p00i_>zopr0NUkS#Q*>R 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|=6kw0hE&XX zdwnDCAp;TDi}Gm;Px-7AR91X-W=dD=0_TLAtXv<%7Zsm6(Y2;r+a0I_8623$b5s1r zske6a^_Kf}`d@u7v{}FJ^j9O(a=W$vemiby%WM59&S;n7BCz0sbrXZAtun_1pN14B z72yR*r_CKb8=TI6RA%{csrnBG<2|Ee?8s&_Ff{zFWZY*UFLBOt(|eGNr>mdKI;Vst E05fV#{Qv*} 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|=6kw0hE&XX zdwnDCAp;TDi}GoTs@)DJ=S)cv^t!=n#WF3{Me!e()$*P-C#tp=u>f@-gPfBSY8$u8 z_&=kxE60e}DPxG#1;bywUh>-S>+|N3uf%WM59%4nD3BCz0sbrXZAtun_1pN14B z72yR*XU!cw8=TI6RA%{csrnBG<2|Ee?8s&_Ff_caWaNsFm)NqS^gl?()78&qol`;+ E0J>mIl>h($ 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 zcmV-i2BZ0jP)G2803&=4ie zKP5p))KO5kfNuDbgm>>h{P^_OKdFROg>?$p1)q{|z#nawgtwpn{F%#YDts^Ik#i?} zNWvNZE(r&S(JCcG@JHJT-<7a}k4hMYu@cT8DkY%sBMEA~v;+@+Bw;QPm9PR4NqGD5 z52!KlEeR3)G6@KLOM+EsB*6n=NjUPO0!Cj^__G8Qeu)G|z*&NKn|qx?K+FP0ZbrZ? z0nN+8&q|;LtgbGr&FB4sB*0e$&=MBsGxct}15)q<30@3DLe%F7{%#5MJD>!!=%uE&OjF9|^QQPlz?cspaPjtVw80pMnK<}UC6?mFL!S;6LofVq=M0xwbK zWgJ1=ac&eZ!)E4VF2*4VR*AAh(h88B@Rxj&8~x_(iX=EEs+t#MfbM|*8=r!Wem@DZ zfnGT|TR~u7ZWSXQul=^EBX0DE0+1xk`nL*#g@2aN1^>m)ns{+S+jt24E(yxmIx`w$ z;G=xf0#->fJ3$P5Wp=5K#uWGnpArG*Bo*6n4189Ck}m^4;!`F-+4EE+jNFO@HD9J> zILQLC@GU5F{)#&X&DSNt?Tf5I8HJ(nBMI|7p<6=9 zV%#qHmIM~QCBd4kbxD90L zkHdn$O~B6p1;Qcw9FG98h>F<9@dyx$sEBAB%EO=d8*(;%h5`}T^llrgjEfh zd|CLfc1zM~(IeBUL(P|kUn*edrn~~*lc3~dAbWgD1YGf1iUNNnLCMETX#FhZ$`7*? z_-6@9K2}2OhgnyDns}V23Q%)05?Vh^yu-)2<9r2vCNCnP_2b-M#Q+IbOA{6F&jOHm z)w#pb7|6!sbL)T5P~z>7ps+Fdz(YMC!JH&hcm`yrgbbVIA|~~01rm%TnS!&AvW`b# zI2r@l$ji~^L}AdxQSmP6dLLD=Neeixgs!WVBX+BR@f@@gWeSX-RSHo1 z=)DI97goY8eyjrlRxLp3r}Z+PxiAtg|G63zR)+w#uhHaej$I-ENwfph9pbVA5DAz4 zWEl&oQvebhS(>n7O9GIED7C2QJS%oaK(@cf`57jZ03?yRD`w3I&!D;lAb_F^Bf|s| zz`$oESi{yCQm24b?5JOs1ck{90nxK9N`y-ACT=sJZUN``QNNH_nG3V@x1(A3qcO1* z_!hLNU$+sEmEaXAZDf=1SJ2Q!#ZLH?fQ*C)KD)h{eQc;p$JOv@0hJQeJ!a*x;lW2Y zPdeaB0xBe^8~qXd6+8rfw0+nGUlxE!u+C#P`scz}0Sx@nGWBk|1ENlu@SQC@PrxXQ z5n#P^-6qb3=D(o?97m;u5I!KmDijr9osYn0C0Kt0!yiY51Q@;}!Mn}Ty$d%603VeQ zF@fP%NTA^_BvinsB?!y$%!LWV?~nikD~1nC0OM3jh-UI-5*ScbaXMpHNPys1NT@8V zQ@~CM6#R^Y>Vmoj?2sVAS0r>4vO_?pgcN*M!qs5zCZGg9BjIW=cM?zvAC+)5n7asI anEnUu0CBaj^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);