From a84a99aed6480d3c6d7893560e9268c91a579071 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 7 Jan 2025 20:35:35 -0500 Subject: [PATCH] Large cliff crusher block / Erekir ammo tweaks / Android file chooser fixes --- .../mindustry/android/AndroidLauncher.java | 1 + .../blocks/drills/cliff-crusher-top.png | Bin 352 -> 360 bytes .../large-cliff-crusher-rotator-bottom.png | Bin 0 -> 230 bytes .../drills/large-cliff-crusher-rotator.png | Bin 0 -> 338 bytes .../blocks/drills/large-cliff-crusher-top.png | Bin 0 -> 435 bytes .../blocks/drills/large-cliff-crusher.png | Bin 0 -> 2004 bytes core/assets/bundles/bundle.properties | 4 +- core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4673 -> 4694 bytes core/src/mindustry/content/Blocks.java | 71 +++++++++++++++--- core/src/mindustry/content/Fx.java | 40 +++++++++- .../entities/bullet/ArtilleryBulletType.java | 1 - .../world/blocks/defense/turrets/Turret.java | 15 ++++ .../world/blocks/production/WallCrafter.java | 49 +++++++++++- .../world/consumers/ConsumeLiquid.java | 5 ++ .../world/consumers/ConsumeLiquidBase.java | 3 + .../world/consumers/ConsumeLiquidFilter.java | 7 +- 17 files changed, 178 insertions(+), 19 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator-bottom.png create mode 100644 core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator.png create mode 100644 core/assets-raw/sprites/blocks/drills/large-cliff-crusher-top.png create mode 100644 core/assets-raw/sprites/blocks/drills/large-cliff-crusher.png diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index 1a3126234f..548f1b6078 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -110,6 +110,7 @@ public class AndroidLauncher extends AndroidApplication{ Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(extension.equals("zip") && !open && extensions.length == 1 ? "application/zip" : "*/*"); + intent.putExtra(Intent.EXTRA_TITLE, "export." + extension); addResultListener(i -> startActivityForResult(intent, i), (code, in) -> { if(code == Activity.RESULT_OK && in != null && in.getData() != null){ diff --git a/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png b/core/assets-raw/sprites/blocks/drills/cliff-crusher-top.png index 3541f6e3966d9b5186e7433b1e6bbad8b4ec09ef..11b6823dcd4d866ae3db5a97302749cecc9eed22 100644 GIT binary patch delta 320 zcmaFB^nz)EVZD;4i(^Q|oVPc3^Byt~X?-Z|a@uLl0j`ycLplVFm=-x*S#y9(=Lo|E zC6>PC+L}KW@tqDQ{}#%yo^gSIRom=+&Y!;?HYeEg{p}Ceyc*&UM{_gA9FBg=_^fUF zE#@Bq4Bt36ti8x?5x;Kp^~8?C7rQ5%cMfN$`XO<=fz_klu!d&>!&0974%>v2A9kO; z`?_}fakD2==5+1g{?Yb}-Sohud@<3+eM~n5UoiH_D0VZj-Fp$UiSxiDUxp`s?>pb9IJ?w~Nwn|#Tq~Dw_t!ngFozfYBAN&F8iSM^zBh;n zI`uRD_ci!FHQ-1rgQX|q4fO+Ir45%0XWgw|#g`x_xQahvp7ugcyZY(f9U$Pr9k=(S WkJ~g2jk^pC3=E#GelF{r5}E)o*N~$C delta 312 zcmaFC^nhuCVZD^6i(^Q|oVPc3^Byt~X?-Z{a@uLl0j`ycLplVFm=<-dh-?&%=wMvn z-tacU{P``r_)eA||4todbZ`NKC0WNWfB99DdpLsQ@b-s|ZcKlq^3<@#}e=#`RnRuaP#{Sc;5U;W3_t^Wnt?_!`&A`CG N;OXk;vd$@?2>?U*i2wiq diff --git a/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator-bottom.png b/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6799ee0e87897e62dd38bf9baa24730358e6ea6a GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z_7s6 z#WAE}&fDt;d7BM*SOab~3Mv~oU2T1-DXzjYV~5w2@9+MdU{X(;#Q*|Yv!<8Mo?iMp z{BG>}GaqW1@1L)FS$T0+$Cd|+x0he@*`lYV`sK}K+bp%H?=D{ttS;W2uNL+F%I>s? z{vL<72a;YmZ+P)g%IEqoC6)=RzB(8D$iAR7MbPSt)|>nd#%>GB5)8j6MtmvYU6x%d e$ON+Q*eB+eim8uRegFIw#PxLbb6Mw<&;$VIlwi~V literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator.png b/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-rotator.png new file mode 100644 index 0000000000000000000000000000000000000000..a63c5c351a237250a2331f777749b80b811cdf55 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z{un2 z;uumf=j{zcz9s{aV;^5dCMZ5sGTLM%-JdciR`#osnog1UoOy~IPP~7$9{!hB{7@n9 z>s`pl00A51W=pvGKli>|{-@%`>G|$)1uH5S^EpQ4tf^eg;~18a_1R7IP*`9}_!QsJ zt8v$Vuzg$oK=Xaqr@J1Lp6Q(yTL0R)zh!}WzIpyF#TzRmxK&d)4(8ptzQ^;@pT`kv z1XPL-i0msq67z)d%idaH<(B=Dj2lldubAI|uy~*L5t&6j4f%>IPEJ2)Hk)5(!ov40 zu6oUBIxXw+IJ*A{80~LcaD)GZne#ryJNe-!H+ybB9PAum`aY&bUMX2oV|KaTCH;*H i1+JWBhWLcx+A~(JF9C&zemhBlL_A&nT-G@yGywo?nulKi literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-top.png b/core/assets-raw/sprites/blocks/drills/large-cliff-crusher-top.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9526ac5d649d4ac277f4ffa99ec7718ed4c076 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z?kdl z;uumf=j|Oszas_$4uOYlEyNcscY0*v5%Q&@xKLmRL)4oi=PKTOe-+7u-oDrWSL64pUWEe=rh+UIZ}xLA#XJaOVQk_Q@M%b3Vi8uD!Elg8;=#|i zuh*4DGqSA&snm66V&3ZGo>@}%+={idK&^>ku1v3jgS)#D$A!pjxaK(}-}1s6_|CZq zED$c9?>XbQL$}HEweQbQU*-J!;Y-`IJT(#U|?YIc_F?wz22?q?T39J NuBWS?%Q~loCII@+rVaoA literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/large-cliff-crusher.png b/core/assets-raw/sprites/blocks/drills/large-cliff-crusher.png new file mode 100644 index 0000000000000000000000000000000000000000..508f4e7f22c9a40705cdd26c75029c11d5456364 GIT binary patch literal 2004 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^TsXM4IhhEy=Vox3+HCS2gS z`zFIBH%_hP77S|@zt-x#x8a}?r=P<533^W$gPwFIy?LOdzrd)K^|h0?$3(NKT+SN` z5++Bcoj-SGrls-oJ6jjo$85>YK0kNn{hu>FZwz<8|Nq0~<42SDY)kBRE4(k+yVFkj zec4mZcCFPuYv-)!n>WAyb79@CmK=_od{v4m({FMgVq;)%P-}_ni#+`{aM|{l)!P^p zIGys_vz~s}n5-pzh>wB8N#bco$$YugqEjs!*cqf0eeO;%HfiP8VJL8lSbOcmlV`F& z#Uu0I+ur-rQ&xI2YVEbz^X2S~Y6KV?1ev7x*d81HSmE60P|L7fK2Sb{A)qlpim&Tq z>W9E!=LaffB)HaY27?3R!nBHRH)jhG`7;a;>^Uac z=spRaa@AhHCHd2?$UDC7*I&&0^yB&3iZq6xxBGn?ziBZyaUO{Mkm{;9<5Ga%>($=n zU9%M5$0&PmJ$21WEkr$O&b9FAx3A9=xq2zdq~P97v*jJUwhAk}1?OaZc=`TXP)PS< zjq@!2K_!PwxR|&fylnnn@F`>4a~AQMDeA6UPi#J-sJSa;0_($*XRRyBzDj><)F;!q2 z!;S}wO*r-jUrA5rcMflhQphk|EMUg4qHP_ot#w~*{G7&HaFc1twHaIsrY&MBJixu|_(l<}{#f0=^&Ae_9|AcR zn(Ps8x%OajmBR#vkn2s04j%vioM)Ta^LbfYPcxkqvKDo4`>@c+bGA@Z+512N7lvz& z+tqY`w69xpYT?mItRHUQpFgp@cIrgctyxd@E-lRDXJEU3X=}uism7@v0%!3?eoM5J zX_>3jvHIs$y(3(!be3z9ZnG*;N{ zUXkw^R4A}1>cpRtOg-Ae6=Fnu_jP?kvt(SH!&qo-Oyj{4|ie<;>H`R}2+4 zKbt0ClbU`jP^CY}EGEK-e!fX6zPtaA>)ouJi-m3r z9Bwe5)!H2@DX_z~Lx4H7p0j$#t3As zs;gFMasKo%VVY8cK+8(u<{);~2me=CGYG%tJ8;BGgW(=?sBTuIkck;{+3S@LcjUNF1y6Ah2{Qk`R=W| z$_nRCR@gE}@KnnLCWWBS#(nJ(M;tq3E}Uu-V4HC9?G}dvwNZO?76};n9Zz-ekY!f- zi*>^qTy<-4$Rl2nbxXQ-xppctl|AZ`TnFYd=IX@yJXEd z<;`ZEO=1yS=4@(x$9w2SO8>0)KlcY-$~lq88T0)_nxnG$y5%hfpYC0{p|WgYWO`kd zp8uCHw|V?iBUXK8;BI+gVW_&`MR{p38(e-oawIxdg8J4+p<=t}gmdWm$FHBuHZRRF1<6Yabi0XXBLrVCBD08a=kw9Qh_zh`Xvnw^Sg7J9;Yuhb8&h5+%IB@&7Rp> z$q#$A4_g~QKj50XAhjYmWaZHg;f>d%WOF$$y|0XF`m#GvdPV-FIwtkCySe@{vipXm z?_IUE#bf$X&(#rklr00dZanm-{D_4wYvPuuzgu{&T-~a0w&AwWgAS#G?B`c@SabaD zVw2xe>>$O+g=IYiL#%)cAlMwrq*&bh6-WN)MY`ZecagPLz^FbT>RxA z*Fs5#drPKFQS&C!D4}?Tp|Rky39 ao}qigtO}u=>a7e63=E#GelF{r5}E*GKA$H5 literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index ec7ce269f4..ccadd6d8be 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1889,8 +1889,9 @@ block.chemical-combustion-chamber.name = Chemical Combustion Chamber block.pyrolysis-generator.name = Pyrolysis Generator block.vent-condenser.name = Vent Condenser block.cliff-crusher.name = Cliff Crusher +block.large-cliff-crusher.name = Advanced Cliff Crusher block.plasma-bore.name = Plasma Bore -block.large-plasma-bore.name = Large Plasma Bore +block.large-plasma-bore.name = Advanced Plasma Bore block.impact-drill.name = Impact Drill block.eruption-drill.name = Eruption Drill block.core-bastion.name = Core: Bastion @@ -2269,6 +2270,7 @@ block.vent-condenser.description = Condenses vent gases into water. Consumes pow block.plasma-bore.description = When placed facing an ore wall, outputs items indefinitely. Requires small amounts of power.\nOptionally uses hydrogen to boost efficiency. block.large-plasma-bore.description = A larger plasma bore. Capable of mining tungsten and thorium. Requires hydrogen and power.\nOptionally uses nitrogen to boost efficiency. block.cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power. Efficiency varies based on type of wall. +block.large-cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power and ozone. Efficiency varies based on type of wall. Optionally consumes tungsten to increase efficiency. block.impact-drill.description = When placed on ore, outputs items in bursts indefinitely. Requires power and water. block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 15a8b4a508..0767ed44da 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -591,3 +591,4 @@ 63091=remove-wall|block-remove-wall-ui 63090=remove-ore|block-remove-ore-ui 63089=small-heat-redirector|block-small-heat-redirector-ui +63088=large-cliff-crusher|block-large-cliff-crusher-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 848b6adda2f4932606a6bc0bfb0694f346c6a3b5..2145ea1672e78ad50bebb8c008fadce2f92dc6f2 100644 GIT binary patch delta 36 rcmX@8a!rMak#Qqa2EVXyPGV7ds%~;lW?GtVa#3k Math.max(Mathf.slope(v), 0.8f); + shrinkX = 0.2f; + shrinkY = 0.1f; + buildingDamageMultiplier = 0.25f; }} ); @@ -4633,7 +4687,6 @@ public class Blocks{ range = 250f; scaledHealth = 210; - //TODO is this a good idea to begin with? unitSort = UnitSorts.strongest; consumeLiquid(Liquids.nitrogen, 6f / 60f); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 1e8579f4b7..9fdbe7ac4d 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -28,7 +28,7 @@ public class Fx{ public static final Effect none = new Effect(0, 0f, e -> {}), - + blockCrash = new Effect(90f, e -> { if(!(e.data instanceof Block block)) return; @@ -445,6 +445,20 @@ public class Fx{ } }), + titanExplosionLarge = new Effect(45f, 220f, e -> { + color(e.color); + stroke(e.fout() * 3f); + float circleRad = 6f + e.finpow() * 110f; + Lines.circle(e.x, e.y, circleRad); + + rand.setSeed(e.id); + for(int i = 0; i < 21; i++){ + float angle = rand.random(360f); + float lenRand = rand.random(0.5f, 1f); + Lines.lineAngle(e.x, e.y, angle, e.foutpow() * 50f * rand.random(1f, 0.6f) + 2f, e.finpow() * 100f * lenRand + 6f); + } + }), + titanSmoke = new Effect(300f, 300f, b -> { float intensity = 3f; @@ -465,6 +479,26 @@ public class Fx{ } }), + titanSmokeLarge = new Effect(400f, 400f, b -> { + float intensity = 4f; + + color(b.color, 0.65f); + 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)(2.9f * intensity), 26f * intensity, (x, y, in, out) -> { + float fout = e.fout(Interp.pow5Out) * rand.random(0.5f, 1f); + float rad = fout * ((2f + intensity) * 2.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); + }); + }); + } + }), + missileTrailSmoke = new Effect(180f, 300f, b -> { float intensity = 2f; @@ -761,7 +795,7 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, e.fout() * 2f); }); }), - + hitLaserBlast = new Effect(12, e -> { color(e.color); stroke(e.fout() * 1.5f); @@ -1114,7 +1148,7 @@ public class Fx{ stroke(2f * e.fout()); Lines.circle(e.x, e.y, 5f * e.fout()); }), - + forceShrink = new Effect(20, e -> { color(e.color, e.fout()); if(renderer.animateShields){ diff --git a/core/src/mindustry/entities/bullet/ArtilleryBulletType.java b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java index d232d016c3..69e6afbd97 100644 --- a/core/src/mindustry/entities/bullet/ArtilleryBulletType.java +++ b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java @@ -13,7 +13,6 @@ public class ArtilleryBulletType extends BasicBulletType{ collides = false; collidesAir = false; scaleLife = true; - trailRotation = false; hitShake = 1f; hitSound = Sounds.explosion; hitEffect = Fx.flakExplosion; diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 4636fee9fe..426d038912 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -239,6 +239,8 @@ public class Turret extends ReloadTurret{ public float heatReq; public float[] sideHeat = new float[4]; + float lastRangeChange; + @Override public float estimateDps(){ if(!hasAmmo()) return 0f; @@ -316,6 +318,11 @@ public class Turret extends ReloadTurret{ }; } + @Override + public float fogRadius(){ + return (range + (hasAmmo() ? peekAmmo().rangeChange : 0f)) / tilesize * fogRadiusMultiplier; + } + @Override public float progress(){ return Mathf.clamp(reloadCounter / reload); @@ -415,6 +422,14 @@ public class Turret extends ReloadTurret{ //turret always reloads regardless of whether it's targeting something updateReload(); + if(state.rules.fog){ + float newRange = hasAmmo() ? peekAmmo().rangeChange : 0f; + if(newRange != lastRangeChange){ + lastRangeChange = newRange; + fogControl.forceUpdate(team, this); + } + } + if(hasAmmo()){ if(Float.isNaN(reloadCounter)) reloadCounter = 0; diff --git a/core/src/mindustry/world/blocks/production/WallCrafter.java b/core/src/mindustry/world/blocks/production/WallCrafter.java index d499f2cfe3..22f621c613 100644 --- a/core/src/mindustry/world/blocks/production/WallCrafter.java +++ b/core/src/mindustry/world/blocks/production/WallCrafter.java @@ -17,6 +17,7 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.consumers.*; import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -30,6 +31,8 @@ public class WallCrafter extends Block{ /** Time to produce one item at 100% efficiency. */ public float drillTime = 150f; + /** How many times faster the drill will progress when boosted by liquid. */ + public float liquidBoostIntensity = 1.6f; /** Effect randomly played while drilling. */ public Effect updateEffect = Fx.mineWallSmall; public float updateEffectChance = 0.02f; @@ -39,6 +42,14 @@ public class WallCrafter extends Block{ public Item output = Items.sand; + public float boostItemUseTime = 120f; + /** How many times faster the drill will progress when boosted by items. Note: Using item and liquid boosters at once is not supported. */ + public float itemBoostIntensity = 1.6f; + public @Nullable Consume itemConsumer; + public boolean hasLiquidBooster; + + public final int timerUse = timers ++; + public WallCrafter(String name){ super(name); @@ -67,6 +78,31 @@ public class WallCrafter extends Block{ stats.add(Stat.output, output); stats.add(Stat.tiles, StatValues.blocks(attribute, floating, 1f, true, false)); stats.add(Stat.drillSpeed, 60f / drillTime * size, StatUnit.itemsSecond); + + boolean consItems = itemConsumer != null; + + if(consItems) stats.timePeriod = boostItemUseTime; + + if(consItems && itemConsumer instanceof ConsumeItems coni){ + stats.remove(Stat.booster); + stats.add(Stat.booster, StatValues.itemBoosters("{0}" + StatUnit.timesSpeed.localized(), stats.timePeriod, itemBoostIntensity, 0f, coni.items, i -> Structs.contains(coni.items, s -> s.item == i))); + } + + if(liquidBoostIntensity != 1 && findConsumer(f -> f instanceof ConsumeLiquidBase && f.booster) instanceof ConsumeLiquidBase consBase){ + stats.remove(Stat.booster); + stats.add(Stat.booster, + StatValues.speedBoosters("{0}" + StatUnit.timesSpeed.localized(), + consBase.amount, + liquidBoostIntensity, false, consBase::consumes) + ); + } + } + + @Override + public void init(){ + super.init(); + + hasLiquidBooster = findConsumer(f -> f instanceof ConsumeLiquidBase && f.booster) != null; } @Override @@ -151,6 +187,7 @@ public class WallCrafter extends Block{ super.updateTile(); boolean cons = shouldConsume(); + boolean itemValid = itemConsumer != null && itemConsumer.efficiency(this) > 0; warmup = Mathf.approachDelta(warmup, Mathf.num(efficiency > 0), 1f / 40f); float dx = Geometry.d4x(rotation) * 0.5f, dy = Geometry.d4y(rotation) * 0.5f; @@ -164,7 +201,11 @@ public class WallCrafter extends Block{ dest.block().mapColor ); } - }, null); + }, null) * Mathf.lerp(1f, liquidBoostIntensity, hasLiquidBooster ? optionalEfficiency : 0f) * (itemValid ? itemBoostIntensity : 1f); + + if(itemValid && eff * efficiency > 0 && timer(timerUse, boostItemUseTime)){ + consume(); + } lastEfficiency = eff * timeScale * efficiency; @@ -173,16 +214,16 @@ public class WallCrafter extends Block{ time %= drillTime; } - totalTime += edelta() * warmup; + totalTime += edelta() * warmup * (eff <= 0f ? 0f : 1f); if(timer(timerDump, dumpTime)){ - dump(); + dump(output); } } @Override public boolean shouldConsume(){ - return items.total() < itemCapacity; + return items.get(output) < itemCapacity; } @Override diff --git a/core/src/mindustry/world/consumers/ConsumeLiquid.java b/core/src/mindustry/world/consumers/ConsumeLiquid.java index 3581a4f3fa..a4a3ebc460 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquid.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquid.java @@ -50,4 +50,9 @@ public class ConsumeLiquid extends ConsumeLiquidBase{ public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, liquid, amount * 60f, true); } + + @Override + public boolean consumes(Liquid liquid){ + return liquid == this.liquid; + } } diff --git a/core/src/mindustry/world/consumers/ConsumeLiquidBase.java b/core/src/mindustry/world/consumers/ConsumeLiquidBase.java index 1a55711416..9a74338434 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquidBase.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquidBase.java @@ -1,5 +1,6 @@ package mindustry.world.consumers; +import mindustry.type.*; import mindustry.world.*; public abstract class ConsumeLiquidBase extends Consume{ @@ -16,4 +17,6 @@ public abstract class ConsumeLiquidBase extends Consume{ public void apply(Block block){ block.hasLiquids = true; } + + public abstract boolean consumes(Liquid liquid); } diff --git a/core/src/mindustry/world/consumers/ConsumeLiquidFilter.java b/core/src/mindustry/world/consumers/ConsumeLiquidFilter.java index 7dbaab7043..94e049c260 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquidFilter.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquidFilter.java @@ -53,7 +53,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{ if(ed <= 0.00000001f) return 0f; return liq != null ? Math.min(build.liquids.get(liq) / (amount * ed * multiplier.get(build)), 1f) : 0f; } - + public @Nullable Liquid getConsumed(Building build){ if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){ return build.liquids.current(); @@ -74,4 +74,9 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{ public void display(Stats stats){ stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(filter, amount * 60f, true)); } + + @Override + public boolean consumes(Liquid liquid){ + return filter.get(liquid); + } }