From 57e5acdbd775c4d99a06b7387b65018e0aa34325 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Dec 2021 17:16:32 -0500 Subject: [PATCH] Vent condenser block --- .../pressure-turbine-rotator-blur-green.png | Bin 12575 -> 0 bytes .../blocks/production/electric-heater.png | Bin 0 -> 1045 bytes ...eater-heat.png => eletric-heater-heat.png} | Bin .../blocks/production/slag-heater-bottom.png | Bin 223 -> 0 bytes .../sprites/blocks/production/slag-heater.png | Bin 1113 -> 0 bytes .../vent-condenser-rotator-blur.png | Bin 0 -> 11923 bytes .../production/vent-condenser-rotator.png | Bin 0 -> 825 bytes .../blocks/production/vent-condenser.png | Bin 0 -> 2371 bytes .../turrets/fracture/fracture-glow-heat.png | Bin 0 -> 7932 bytes .../blocks/turrets/fracture/fracture-heat.png | Bin 0 -> 3606 bytes .../turrets/{ => fracture}/fracture.png | Bin .../sprites/effects/square-shadow.png | Bin 0 -> 2220 bytes core/assets/icons/icons.properties | 3 + core/assets/logicids.dat | Bin 3728 -> 3748 bytes core/src/mindustry/content/Blocks.java | 118 +++++++++++------- .../src/mindustry/content/ErekirTechTree.java | 30 ++--- core/src/mindustry/content/TechTree.java | 8 ++ core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/type/UnitType.java | 9 +- .../mindustry/ui/dialogs/ResearchDialog.java | 2 +- .../world/blocks/heat/HeatConductor.java | 80 ++++++++++++ .../world/blocks/power/ThermalGenerator.java | 16 +-- .../blocks/production/AttributeCrafter.java | 17 ++- .../blocks/production/GenericCrafter.java | 7 +- core/src/mindustry/world/draw/DrawRegion.java | 2 + core/src/mindustry/world/draw/DrawTurret.java | 3 + 26 files changed, 222 insertions(+), 75 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/power/pressure-turbine-rotator-blur-green.png create mode 100644 core/assets-raw/sprites/blocks/production/electric-heater.png rename core/assets-raw/sprites/blocks/production/{slag-heater-heat.png => eletric-heater-heat.png} (100%) delete mode 100644 core/assets-raw/sprites/blocks/production/slag-heater-bottom.png delete mode 100644 core/assets-raw/sprites/blocks/production/slag-heater.png create mode 100644 core/assets-raw/sprites/blocks/production/vent-condenser-rotator-blur.png create mode 100644 core/assets-raw/sprites/blocks/production/vent-condenser-rotator.png create mode 100644 core/assets-raw/sprites/blocks/production/vent-condenser.png create mode 100644 core/assets-raw/sprites/blocks/turrets/fracture/fracture-glow-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/fracture/fracture-heat.png rename core/assets-raw/sprites/blocks/turrets/{ => fracture}/fracture.png (100%) create mode 100644 core/assets-raw/sprites/effects/square-shadow.png create mode 100644 core/src/mindustry/world/blocks/heat/HeatConductor.java diff --git a/core/assets-raw/sprites/blocks/power/pressure-turbine-rotator-blur-green.png b/core/assets-raw/sprites/blocks/power/pressure-turbine-rotator-blur-green.png deleted file mode 100644 index 448225de089e6cc21025f4344b3d5b4ffd4dc8d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12575 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 E06&h=BLDyZ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/slag-heater-heat.png b/core/assets-raw/sprites/blocks/production/eletric-heater-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/production/slag-heater-heat.png rename to core/assets-raw/sprites/blocks/production/eletric-heater-heat.png diff --git a/core/assets-raw/sprites/blocks/production/slag-heater-bottom.png b/core/assets-raw/sprites/blocks/production/slag-heater-bottom.png deleted file mode 100644 index 16e718a939271a4350c5a544997bb855ed8e2a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z%bL( z#WAE}&f5!)f(H~B4j4EH)O^U#J#iwrw<+$q-FIpGZ6yuY7-SciIk44ofy`glX=O&z#{DF z;uumf=WMjKpNykG?Ovsa93Fh_DJnIb=?aZGGFEPVI!}auu$)l5HA6%(tm#Bd(^QW# zCzU=23qGI6^X{#Bx9-*Xcc;tjuKv9j5*}KA?T^KO({HuylPqpatL=ZTZ}ofWn-&A< zFmD@M-jC|W4}@2K?PD`$xM3z3HIe-u3&S?|mT6BI-5C--D{WEZXR!X)nz)sP;YVYj z%9*&h{#zv6mdcu8F0KZUA2U1zV@O=e>F?|Ol+bCOa zc(5zb+T+-*iApD#oiYu#=S*|B)!miqq>age1AmEj~O{B5xTDT7B@jZIU~YpTip^ZR^H?EZeNP^Q=L*}r$QVwX=*N;Tg4YSjkr={D^% z)UP-gGuB8X&zi`Sn9Rg*Tk((^E5kCS9H$9sOfl!y-#CzVFQI-qSCeMMX{HdzEgDyD zJpGf^!+Lnqla+7F?2UbF9D;d^9u$?I5Y~Ght{j?_t?n*T6L^nR!}Fe#Qq$gNVLc9! zpTyR2Jp1sXq-WyuYpg-bk4gzmsNi$TwgZrmi~M%xeHS_>6*o#`_@(=b|O+> z=8eEL>`%HT6m3(`XqZxy)2rah@?Y}gzGgR;GEX0?cd?(O_&X1ZPcN>{w7H>}UVlh5 z?*Gpzt&?Ir#NE%!XI$K*?Rc^;@THko&b|(o2{l(I$ti49J|QNPqX-NH539FE^+uT)S7k;e?&SM&9>9N+#9{ zfxl$e@`kf?x_2ZwtU0i9tLwYlQ&W~m95Gzr`tb55{x|Dv zc73O=MUib#fk(5mhA&&YLtdcs#QQD10*eeCw4F}&W#{s)PTk_C5ybU-#mB2l%z{rp zdt#y?lxY4pkh7>wCEU#Xz7+Rd#}$PhhgqL;`m%Z`-iT^RWAf diff --git a/core/assets-raw/sprites/blocks/production/vent-condenser-rotator-blur.png b/core/assets-raw/sprites/blocks/production/vent-condenser-rotator-blur.png new file mode 100644 index 0000000000000000000000000000000000000000..c0121f90bfca2ceb9c906fd51d2bff485ac9449d GIT binary patch literal 11923 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 S%UT8o1_n=8KbLh*2~7aDw&W%N literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/vent-condenser-rotator.png b/core/assets-raw/sprites/blocks/production/vent-condenser-rotator.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ec07df8b73e82138b81e5bd832313d382d2f1e GIT binary patch literal 825 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^S>89ZGaLn`LHoe}GIR6)Qk zcDnZk_2frJJ=zBA4yr%ie7i{ZdV-Ual*BXsWv%a3Y_>i&sg7S($rfK!vdk#q{Cj9ijdHC_?w_o2L zR^4!=f63Qh(RH?-51&6%JQ&>YC3n}H7NZ({&NwEMhw*++z6|b6qVw7tYI36)r?kX1 zgfSj}eVc2A=Yy6E!3(?6qZya7wX3uJG zc_HH)amau2cCH6C&onqM{@l5M*WTRw$KKX?zwW-c6LYa`{nP`Rr7Q3EpUdXB_I{&k zO=ruCIc-k9b2cY$YdJqrVD5R56(3ffm0G^#={)OP>AE(q{o5iRx2>NlFxQl+z!uhXiE~_?*7mFN zKQ@_?&+wHkQf14!+vMT-DC+rj(L{%}j3KI`b5DzysHWVEN?rXV z*sWL5YW~76T7C0c;(o|*&Jmk?SwMv`;?Q!Hg8KTEM#c*{4+_=!HmUqsnpJz+{-RKw zrlasbAt4=ik)4sO5r_6~VexZSjuhGXJ!{^>Dcd$?ay@K0KXt!M=?tYu|MdkvBhU%4HTeviSzvxYjW?Z@T z*B5~UveDj$W^7@5C|P&No1r|%opawypF`SzT9z}syRnI7zDd&uj`_FGci81_w&#=+ zmQg&AoiqJ_)xkg}n`7Hpm020s1O#|k<}kF>GYQzCBwL1c$K>l3dmCOKo<0jC;pyt< Jvd$@?2>=qCWOM)k literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/vent-condenser.png b/core/assets-raw/sprites/blocks/production/vent-condenser.png new file mode 100644 index 0000000000000000000000000000000000000000..c663d143630e3c42df715bf2b8ed9cdbceac4d22 GIT binary patch literal 2371 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/fracture/fracture-glow-heat.png b/core/assets-raw/sprites/blocks/turrets/fracture/fracture-glow-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..8e58dcdf6d9c252962eb4a088e3df988ab4b7e5a GIT binary patch literal 7932 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 af5tm=g7^QJ%smg(A@_9kb6Mw<&;$U#Vm!D2 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/fracture/fracture-heat.png b/core/assets-raw/sprites/blocks/turrets/fracture/fracture-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..07c199f4ac7708858b002ca2de4a20a5009e9182 GIT binary patch literal 3606 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/fracture.png b/core/assets-raw/sprites/blocks/turrets/fracture/fracture.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/fracture.png rename to core/assets-raw/sprites/blocks/turrets/fracture/fracture.png diff --git a/core/assets-raw/sprites/effects/square-shadow.png b/core/assets-raw/sprites/effects/square-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..035ab4abaec5f3dab62e26b4162ad799733fa3f0 GIT binary patch literal 2220 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2zyC8|OqN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsH`<9zE%f7Ejy#NY`l%DlG|?F{{t8T?QHktv;oi1OzG1-mRj!iB{ zVy5&8{Ya+nGrnS9Hc0uJoxG%~s3;ZWs_@kE?#I?`clW$C_1bWUGkWHNoTnH5n|+_@ zyFa^lU6fMM^0XIBXIAq(Jf^h0Du-Ecmimfa%zrZ0b5g3n?g=lP{Pp$Ur5Xpe9g-AM_%P8$bCP+QvXg=^gXpJD)dE(=pr?H5mK`n|90d<- zIc)7#t*;$lRHN$Xq}tW!JB=wqQRCBbCnr8pQQlQjS4}dn38}KRb9G;Q^y`k8F!wUC zvpSL6CaJV8(Ny!+d>Ueue(-vP@hQXQbBZ-LL@wCr624)-L(ony-q7qdVZmp&nk@0> z_KnWD7Ib=T$-7H|$8F1AuY4ZI#=GPahx6Tz!){WQQ#xa28y&tPx%{ljXC3pc&R^TV zv0r%+@Ypx&?dI81OVX~tDBI_7GKnoohT}-Cpo7!rq-Vmd2fFVhJu_acHRa(FJ+rwr z3r`&MlsIDbGVS}^JMx9ahJU6>*H4=h{o>!GJI|iA*%kig+`6xB+ikV7(1%?s#Y5!3 ziTI`d4Ov{=fAW4`zAG~PzfNi9kH?Jv19#;+FWz0Z`ygc^_~k|d)SZvttfwA_?=H6OLbXf?&F4Kx6_Q|gfGtw z-S}8kv1B3tffZ+TlKmzLeUOd+&hg=^-l@%h&i}Qny0YeILxYFSX`ah!_Y~&c+roS9 z_mRY~389aQ9~n;8^Z0Y3^yp*rbCuIs=Si9cpR9ajuyICy;?ma0gI7A1cPOt~7QAo5 zw}_{Ejz(&SMm(PPr*+|)eVfjd&T{TZ7WAH=;N-~aIwe8bYqeijtIFHsHGi7d#VbvB zTBjsoDHhPicJpiV|AX)I*4}y2GF_yL@vVN}XG5NnH%wnwJ+6_r_WR4iVaFU^bvb?= zqw)MD;j^QjaJ;z7rnhePtWE4O?--c<+j35=6Ir79r0BqJ$=YDH7yDUvUEgz0>bFHL zL(rAbM{E`rEN-8s?0xt7-MMS`{@GrB@t)mCyr}mF*EbUe1_rhyZ+91l{~)+v@AAnE z3=EtF9+AZi40_5S%viD1zKnr^fxX1j*OmP#52p~be7DkSBL)Tr$r9Iy66gHf+|;}h z2Ir#G#FEq$h4Rdj3A_XJ_Q*-!|ZB@!xjIB)d!O@BjLu z=(tx$CVgv_%Hz@0j1D-%pm=2CQ+M@SR$5bn9NZ0VCCq96eA~L~^X`Bbuelgp*w=}F zKd^Oy7qbzA#zsbS$%TsU4qLTMHwpflC%|jLHp}(tO~$v5Q3X6x7}i{3<2JD>5Y1V9 z>t-WQ^W{|s!x+Llr@lK~^f#YXvOsJBZ-cI@t-1G?qD!ZCx)g{rbhGeRq9tEtC#NAN)7 zg9?SCvmULA6FD&Vz+Ue?LMdlY&g=SfVOGBAJN4RUM!xpUNiGM=8RS`ZPX3?l?z;A# z*3UAr9lbHrU9L)Po-^C6=tFDBABGQV&$lf}3b15(oV(_g?xMKX-CQ36Z_Rexe(#Yw z>rb@>)ycD}xjua{y5o8Fgm3-Y_X^JMSW5IaPX7OnanFU%>lR7vFS!`S^CjwxR@D8& zT&EYyvCet=XVt#78^7Lswf3m7=YGY|?MoiqVf2}@xKkv1t)Js_1sPR!<`8#&gA3fk zE7z}NEMKh9b2Pp=>cU#lr56sxTfO6$cfO~uN^Zqd-e~?=9!D=WEKfMC**`0C{rdf8 zdxZCW`{32}pY6lD$Ez8;AB)~q{^u+jX2t(P)HOB5<>JdL+C^*H)6&(}R2MB@rLB7) z?rW;3P2;-!wJIl9KH4Lx!4n~sy(09Zkt`>{efm*O;2urMCK4) { - node(electrolyzer, () -> { - node(oxidationChamber, () -> { - node(atmosphericConcentrator, () -> { - node(cyanogenSynthesizer, () -> { + node(ventCondenser, () -> { + node(siliconArcFurnace, () -> { + node(electrolyzer, () -> { + node(oxidationChamber, () -> { + node(electricHeater, () -> { + node(atmosphericConcentrator, () -> { + node(cyanogenSynthesizer, () -> { - }); - }); + }); + }); - node(carbideCrucible, () -> { - node(surgeCrucible, () -> { - node(phaseSynthesizer, () -> { + node(carbideCrucible, () -> { + node(surgeCrucible, () -> { + node(phaseSynthesizer, () -> { + }); + }); }); }); }); - }); - node(slagIncinerator, () -> { - //when is this actually needed? - node(slagHeater, () -> { + node(slagIncinerator, () -> { + node(slagCentrifuge, () -> { }); diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index c77e786b32..0621e511d9 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -1,10 +1,12 @@ package mindustry.content; import arc.*; +import arc.scene.style.*; import arc.struct.*; import arc.util.*; import mindustry.ctype.*; import mindustry.game.Objectives.*; +import mindustry.gen.*; import mindustry.type.*; /** Class for storing a list of TechNodes with some utility tree builder methods; context dependent. See {@link SerpuloTechTree#load} source for example usage. */ @@ -75,6 +77,8 @@ public class TechTree{ public static class TechNode{ /** Depth in tech tree. */ public int depth; + /** Icon displayed in tech tree selector. */ + public @Nullable Drawable icon; /** Name for root node - used in tech tree selector. */ public @Nullable String name; /** Requirement node. */ @@ -111,6 +115,10 @@ public class TechTree{ all.add(this); } + public Drawable icon(){ + return icon == null ? Icon.tree : icon; + } + public String localizedName(){ return Core.bundle.get("techtree." + name); } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 9b01e985ef..df994eac68 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -995,7 +995,7 @@ public class UnitTypes{ accel = 0.08f; drag = 0.016f; flying = true; - hitSize = 9f; + hitSize = 10f; targetAir = false; engineOffset = 7.8f; range = 140f; diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index c43b820824..f8a9e780a7 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -71,6 +71,7 @@ public class UnitType extends UnlockableContent{ public boolean createWreck = true; public boolean useUnitCap = true; public boolean destructibleWreck = true; + public boolean squareShadow = false; public float groundLayer = Layer.groundUnit; public float payloadCapacity = 8; public float aimDst = -1f; @@ -496,7 +497,13 @@ public class UnitType extends UnlockableContent{ legBaseRegion = Core.atlas.find(name + "-leg-base", name + "-leg"); baseRegion = Core.atlas.find(name + "-base"); cellRegion = Core.atlas.find(name + "-cell", Core.atlas.find("power-cell")); - softShadowRegion = Core.atlas.find("circle-shadow"); + //when linear filtering is on, it's acceptable to use the relatively low-res 'particle' region + softShadowRegion = + squareShadow ? Core.atlas.find("square-shadow") : + hitSize <= 10f || (Core.settings != null && Core.settings.getBool("linear", true)) ? + Core.atlas.find("particle") : + Core.atlas.find("circle-shadow"); + outlineRegion = Core.atlas.find(name + "-outline"); shadowRegion = fullIcon; diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index fab74aa679..7d3d095994 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -48,7 +48,7 @@ public class ResearchDialog extends BaseDialog{ titleTable.clear(); titleTable.button(b -> { //TODO custom icon here. - b.image(Icon.tree).padRight(8).size(iconMed); + b.imageDraw(() -> root.node.icon()).padRight(8).size(iconMed); b.add().growX(); b.label(() -> root.node.localizedName()).color(Pal.accent); b.add().growX(); diff --git a/core/src/mindustry/world/blocks/heat/HeatConductor.java b/core/src/mindustry/world/blocks/heat/HeatConductor.java new file mode 100644 index 0000000000..67d8f6a75e --- /dev/null +++ b/core/src/mindustry/world/blocks/heat/HeatConductor.java @@ -0,0 +1,80 @@ +package mindustry.world.blocks.heat; + +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.ui.*; +import mindustry.world.*; +import mindustry.world.draw.*; + +public class HeatConductor extends Block{ + public float visualMaxHeat = 10f; + public DrawBlock drawer = new DrawBlock(); + + public HeatConductor(String name){ + super(name); + update = solid = rotate = true; + size = 3; + } + + @Override + public void setBars(){ + super.setBars(); + + bars.add("heat", (HeatConductorBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat / visualMaxHeat)); + } + + @Override + public void load(){ + super.load(); + + drawer.load(this); + } + + @Override + public void drawRequestRegion(BuildPlan plan, Eachable list){ + drawer.drawPlan(this, plan, list); + } + + @Override + public TextureRegion[] icons(){ + return drawer.finalIcons(this); + } + + public class HeatConductorBuild extends Building implements HeatBlock{ + public float heat = 0f; + + @Override + public void draw(){ + drawer.drawBase(this); + } + + @Override + public void drawLight(){ + super.drawLight(); + drawer.drawLights(this); + } + + @Override + public void updateTile(){ + heat = calculateHeat(null); + } + + @Override + public float warmup(){ + return heat; + } + + @Override + public float heat(){ + return heat; + } + + @Override + public float heatFrac(){ + return heat / visualMaxHeat; + } + } +} diff --git a/core/src/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/mindustry/world/blocks/power/ThermalGenerator.java index bb653323a3..422093d700 100644 --- a/core/src/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/mindustry/world/blocks/power/ThermalGenerator.java @@ -22,7 +22,7 @@ public class ThermalGenerator extends PowerGenerator{ public float displayEfficiencyScale = 1f; public boolean spinners = false; public boolean displayEfficiency = true; - public @Nullable LiquidStack liquidOutput; + public @Nullable LiquidStack outputLiquid; public Attribute attribute = Attribute.heat; public @Load("@-rotator") TextureRegion rotatorRegion; @@ -34,7 +34,7 @@ public class ThermalGenerator extends PowerGenerator{ @Override public void init(){ - if(liquidOutput != null){ + if(outputLiquid != null){ outputsLiquid = true; hasLiquids = true; } @@ -49,8 +49,8 @@ public class ThermalGenerator extends PowerGenerator{ stats.add(Stat.tiles, attribute, floating, size * size * displayEfficiencyScale, !displayEfficiency); - if(liquidOutput != null){ - stats.add(Stat.output, StatValues.liquid(liquidOutput.liquid, liquidOutput.amount * size * size * 60f, true)); + if(outputLiquid != null){ + stats.add(Stat.output, StatValues.liquid(outputLiquid.liquid, outputLiquid.amount * size * size * 60f, true)); } } @@ -88,10 +88,10 @@ public class ThermalGenerator extends PowerGenerator{ spinRotation += productionEfficiency * spinSpeed; - if(liquidOutput != null){ - float added = Math.min(productionEfficiency * delta() * liquidOutput.amount, liquidCapacity - liquids.get(liquidOutput.liquid)); - liquids.add(liquidOutput.liquid, added); - dumpLiquid(liquidOutput.liquid); + if(outputLiquid != null){ + float added = Math.min(productionEfficiency * delta() * outputLiquid.amount, liquidCapacity - liquids.get(outputLiquid.liquid)); + liquids.add(outputLiquid.liquid, added); + dumpLiquid(outputLiquid.liquid); } } diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index e11ba156ed..17a98870f6 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -1,8 +1,10 @@ package mindustry.world.blocks.production; import arc.*; +import mindustry.game.*; import mindustry.graphics.*; import mindustry.ui.*; +import mindustry.world.*; import mindustry.world.meta.*; /** A crafter that gains efficiency from attribute tiles. */ @@ -11,6 +13,9 @@ public class AttributeCrafter extends GenericCrafter{ public float baseEfficiency = 1f; public float boostScale = 1f; public float maxBoost = 1f; + public float minEfficiency = -1f; + public float displayEfficiencyScale = 1f; + public boolean displayEfficiency = true; public AttributeCrafter(String name){ super(name); @@ -18,6 +23,10 @@ public class AttributeCrafter extends GenericCrafter{ @Override public void drawPlace(int x, int y, int rotation, boolean valid){ + super.drawPlace(x, y, rotation, valid); + + if(!displayEfficiency) return; + drawPlaceText(Core.bundle.format("bar.efficiency", (int)((baseEfficiency + Math.min(maxBoost, boostScale * sumAttribute(attribute, x, y))) * 100f)), x, y, valid); } @@ -28,11 +37,17 @@ public class AttributeCrafter extends GenericCrafter{ bars.add("efficiency", (AttributeCrafterBuild entity) -> new Bar(() -> - Core.bundle.format("bar.efficiency", (int)(entity.efficiencyScale() * 100)), + Core.bundle.format("bar.efficiency", (int)(entity.efficiencyScale() * 100 * displayEfficiencyScale)), () -> Pal.lightOrange, entity::efficiencyScale)); } + @Override + public boolean canPlaceOn(Tile tile, Team team, int rotation){ + //make sure there's enough efficiency at this location + return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(attribute)) > minEfficiency; + } + @Override public void setStats(){ super.setStats(); diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 91599aa142..f04bbf1314 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -30,6 +30,7 @@ public class GenericCrafter extends Block{ /** if true, crafters with multiple liquid outputs will dump excess when there's still space for at least one liquid type */ public boolean dumpExtraLiquid = true; + public boolean ignoreLiquidFullness = false; public float craftTime = 80; public Effect craftEffect = Fx.none; public Effect updateEffect = Fx.none; @@ -115,10 +116,6 @@ public class GenericCrafter extends Block{ super.init(); } - public void drawPlanBase(BuildPlan req, Eachable list){ - super.drawRequestRegion(req, list); - } - @Override public void drawRequestRegion(BuildPlan plan, Eachable list){ drawer.drawPlan(this, plan, list); @@ -164,7 +161,7 @@ public class GenericCrafter extends Block{ } } } - if(outputLiquids != null){ + if(outputLiquids != null && !ignoreLiquidFullness){ boolean allFull = true; for(var output : outputLiquids){ if(liquids.get(output.liquid) >= liquidCapacity - 0.001f){ diff --git a/core/src/mindustry/world/draw/DrawRegion.java b/core/src/mindustry/world/draw/DrawRegion.java index b575cac450..d7b4b0aabb 100644 --- a/core/src/mindustry/world/draw/DrawRegion.java +++ b/core/src/mindustry/world/draw/DrawRegion.java @@ -13,6 +13,7 @@ public class DrawRegion extends DrawBlock{ public TextureRegion region; public String suffix = ""; public boolean spinSprite = false; + public boolean drawPlan = true; public float rotateSpeed, x, y; /** Any number <=0 disables layer changes. */ public float layer = -1; @@ -38,6 +39,7 @@ public class DrawRegion extends DrawBlock{ @Override public void drawPlan(Block block, BuildPlan plan, Eachable list){ + if(!drawPlan) return; Draw.rect(region, plan.drawx(), plan.drawy()); } diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index b4abef4048..d1c54930b0 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -168,6 +168,7 @@ public class DrawTurret extends DrawBlock{ progress = interp.apply(progress); for(int i = 0; i < regions.length; i++){ + //can be null if drawRegion == false var region = regions[i]; float sign = i == 1 ? -1 : 1; Tmp.v1.set((x + moveX * progress) * sign, y + moveY * progress).rotate((build.rotation - 90)); @@ -218,6 +219,8 @@ public class DrawTurret extends DrawBlock{ regions = new TextureRegion[]{Core.atlas.find(block.name + suffix)}; outlines = new TextureRegion[]{Core.atlas.find(block.name + suffix + "-outline")}; } + }else{ + regions = new TextureRegion[1]; } heat = Core.atlas.find(block.name + suffix + "-heat");