From 5103c95f2e8f3096fcce22383682209625db6608 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 4 Dec 2021 14:08:50 -0500 Subject: [PATCH] Unfinished titan turret --- .../{ => sublimate}/sublimate-back-heat.png | Bin .../{ => sublimate}/sublimate-back1.png | Bin .../{ => sublimate}/sublimate-back2.png | Bin .../{ => sublimate}/sublimate-front-heat.png | Bin .../{ => sublimate}/sublimate-front1.png | Bin .../{ => sublimate}/sublimate-front2.png | Bin .../{ => sublimate}/sublimate-heat.png | Bin .../{ => sublimate}/sublimate-liquid.png | Bin .../{ => sublimate}/sublimate-nozzle-heat.png | Bin .../{ => sublimate}/sublimate-nozzle1.png | Bin .../{ => sublimate}/sublimate-nozzle2.png | Bin .../turrets/{ => sublimate}/sublimate-top.png | Bin .../turrets/{ => sublimate}/sublimate.png | Bin .../turrets/titan/titan-barrel-heat.png | Bin 0 -> 9258 bytes .../turrets/titan/titan-barrel-heat_full.png | Bin 0 -> 3970 bytes .../blocks/turrets/titan/titan-barrel.png | Bin 0 -> 899 bytes .../blocks/turrets/titan/titan-preview.png | Bin 0 -> 1357 bytes .../blocks/turrets/titan/titan-side-heat.png | Bin 0 -> 7560 bytes .../blocks/turrets/titan/titan-side1.png | Bin 0 -> 566 bytes .../blocks/turrets/titan/titan-side2.png | Bin 0 -> 600 bytes .../sprites/blocks/turrets/titan/titan.png | Bin 0 -> 629 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3674 -> 3681 bytes core/src/mindustry/content/Blocks.java | 109 ++++++++++++++++-- core/src/mindustry/content/Fx.java | 46 ++++++++ .../mindustry/entities/bullet/BulletType.java | 3 +- .../blocks/defense/turrets/ReloadTurret.java | 2 +- .../world/blocks/defense/turrets/Turret.java | 1 + core/src/mindustry/world/draw/DrawTurret.java | 31 ++--- 29 files changed, 168 insertions(+), 25 deletions(-) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-back-heat.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-back1.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-back2.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-front-heat.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-front1.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-front2.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-heat.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-liquid.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-nozzle-heat.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-nozzle1.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-nozzle2.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate-top.png (100%) rename core/assets-raw/sprites/blocks/turrets/{ => sublimate}/sublimate.png (100%) create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat_full.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-barrel.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-preview.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-side-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-side1.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan-side2.png create mode 100644 core/assets-raw/sprites/blocks/turrets/titan/titan.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-back-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-back-heat.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-back1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back1.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-back1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back1.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-back2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-back2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-front-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-front-heat.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-front1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-front1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-front2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-front2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-heat.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-liquid.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-liquid.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-liquid.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-liquid.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-nozzle-heat.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle1.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-nozzle1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle1.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle2.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-nozzle2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle2.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-top.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-top.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate-top.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-top.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate.png diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..3d091801055b2a88372508c073fd09ddca1601d1 GIT binary patch literal 9258 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat_full.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-barrel-heat_full.png new file mode 100644 index 0000000000000000000000000000000000000000..fe2f78d50de55e1572dc88927da3968c4965e6b0 GIT binary patch literal 3970 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-preview.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f293f3dba731f83ed8764e69ff4873b5551c9262 GIT binary patch literal 1357 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z{>9F z;uumf=j~j}JW)r1Hg3O!=hHmia9Dm8lu@uZD(2;x!%)n0AconfhogqY$fZTt`^h&> ziA9szD)(Nw7HeAee^Tm8-M?A?@~c+Ao5?64B_$)pp7&7l zdxmGLX8Ifc{`LL*qu*0zT?$^vFy)BlLmWURRh@#>IW$P)$e*hazLdto|-8Mb3m-YTxdkd{#24CjTG%g<~~SL|INRT;s`m z!=~Qw?0@g8mujYnG0nvOR+$H9eqU*c8VFA;H+c~E;1R3W{_272oQCReIg{h+e zV@Hl%maf1JhHD9SS-b)f3{kWGzdE~n?WXc|c~_st)!(vn$vZV$S&zl2!E{!C7f&Ng zL-N17AM-9_bEq+RX|nhgPnq<*%7L>-v}MB0fGZLF1z_A9&;Q|y)HPD;B75MHO#tg|MqV%T!?%+jp4MckhQO*yU|PUE_gw?6M%QaJu z9VqzSWb(;CUNo`yhG@g`pBnibp$uz}9TGg_zO~6gGFFsvi_!e51Gd+hqvi^ja@>6J zuKDMR69SVa-c|n`7^qnCx<&WQ^*ry7Z4-jT8K$Mz8D4ep3}tD)U?+WR!A(!cgjh#m zj;7x(JPy~MomcEww;*%F`Cz5*8YZ&u`qk?n+&mim@w>7^L9avdzde-~e3tA{-0}C< z#k2E%>|VJolKJ89oBAKiw+b;|kmyLCyX38&-VF|gg!n}(d!-syNhvgLSo2ASV@e<= z`=KHe)y4&DZC|N%Fe_fa7oGktt=NT!Q%8N=my*nv;Q|bZhLX}f< z4jZqX5d3nZ=20~brIxKLznz(tC2yc`!nHCXV29t2g_BNtB#6xtCSDc^nQ}d!wQ%QV4$Y(|ohAqE~H6A&AFp4kUv+9MCW5nX03@!{ycQ&LJ z>^y&6q2SDOGv!N<7u%Vb{8X%2bTMeD_1q^-KY#ptdoBNp9!q{{`I@MmE1!!z*W0ko zK)&H7OJTOtsXv!quMo>j?EJa&`r0$>0$&(II7}y3J5881zv}*_8iq7slkk<6kDl~z zIXm%N8MEo<=UE?5lo&F2XDWE)$1)r+-apmp%-LuY_iTgu3@|tm_@7}Szstn5<$-G% Q7#J8lUHx3vIVCg!0HB*_V*mgE literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-side-heat.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-side-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc10cb5b871393688e4deaefaa45ba98f1b5377 GIT binary patch literal 7560 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-side1.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-side1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb18619f7117b2cd3d2002db751f99677ff732f4 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1%$_ z#WAE}&fB{O1DOmZ+8+96NA{U8xxbpQk;SWEi{$SD8&BOwN8c>S+jR5n{69UF^Cz<> z&Uw$upBAga00jlzef`V3uNL2pv<=i>cf7vNO7y*Z1M9N5pGyVbdCT>Dig#x*2oP#y zaJ%NF(6G={kRu@{lZ7c{g9;O)(c5qBr$2m{`SND+wFUj^*SdsGZ?Qs&aa~^ zppcmL=YSRy;~c>Qk`Tg(clO$I`rnEL6%KE>*%u$}u5h5|^+)E@94sC)r0h3zIW%yb zZvHO9jDPF_VQd zjHvm%L&a68L1q6(Ri+s||Ep@^|K3=~T+y#zD)T_>*mNu20`14%bJ;XfP4~Gll(Q7L zF{HB;xHY&XeHT}CU|uu{<&AiJis-$3#xU*@&G`M=*O9q74X9}(T7FQ{<(JxADM wZFVdQ&MBb@0Dlk44ofy`glX=O&z$E19 z;uumf=j~lbJr+lawukw18uqGsTf1*CD!b$SjKxS@;QNM@=VH^0rPUv>*`|IL>pV|LEPYXBq{a&iaIUPETFI;|If5g7A6bj24e`}aw{*c^v9>Xe}$X^iMuQR*4?&ZVstAx zo*(I^;NWoohwf?)7Kwz?XVz^DwpqRUf(hk44ofy`glX=O&z@+c# z;uumf=j|QaAdx_c)`yoLF_rKtHNG}DbfI*`1}1j%1rD#ocubATnAzA4b8$GBJIt;) z{b_l_%vaUt%Dca>R9d?GT=Zqz%RY*X3{xk(_qNo6Pd|FCn{*FwJT^baF^xgF_x=v05`Ke6KYEp&Zn_JW zvoaonI!{ochar)LqnqVMZQ)dlH(U4F*GgEfvvoN7akdLfcEhR1=I=PRF(~)kw@{8? z>M^N%+;zeBK*wYAK8`)Syvhy|AcMp>3(BI_|871%ed6O=(^pv3P3}mDT?}%9)Bk)| zn<`_^R`(5K0kLSlvuU45`A)?Ew?>JRy$+78& zzBh0QPI~Okns?|V$IFjPnHZP&v~WFUW@uP2Kbqx$Ps;t)d{A6_y85}Sb4q9e0RJEZ A>;M1& literal 0 HcmV?d00001 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 149661ff3c..a52d7d830c 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -473,3 +473,4 @@ 63233=pyrolysis-generator|block-pyrolysis-generator-ui 63232=wall-ore-tungsten|block-wall-ore-tungsten-ui 63231=regen-projector|block-regen-projector-ui +63230=titan|block-titan-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 4a6e6d215c0376c3fa27169429a7caa17610a569..d315bbe10349a4f00fcb29533ae74744dcdcf0fa 100644 GIT binary patch delta 23 fcmca5^H7F~;p9f9E8J|XC7C6Od7H0tw=w|$X(0%f delta 16 YcmaDTb4!Ma;lxI!E8Ls!a Math.max(Mathf.slope(v), 0.8f); + shrinkX = 0.2f; + shrinkY = 0.1f; + }} + ); + + targetAir = false; + shootShake = 4f; + recoilAmount = 1f; + reloadTime = 60f * 2f; + shootLength = 7f; + rotateSpeed = 2.5f; + + acceptCoolant = false; + + draw = new DrawTurret("reinforced-"){{ + Color heatc = Color.valueOf("f03b0e"); + Interp in = Interp.pow2In; + + parts.addAll( + new RegionPart("-barrel"){{ + moveY = -5f; + heatColor = heatc; + mirror = false; + interp = in; + }}, + new RegionPart("-side"){{ + moveY = -1f; + rotMove = -40f; + moveX = 2f; + useReload = false; + under = true; + heatColor = Pal.berylShot.cpy().mul(1.1f); + useProgressHeat = true; + interp = Interp.pow2Out; + }} + ); + }}; + + restitution = 0.02f; + shootWarmupSpeed = 0.08f; + + outlineColor = Pal.darkOutline; + + consumes.liquids(LiquidStack.with(Liquids.hydrogen, 1f / 60f)); + + range = 360f; + size = 3; + }}; + //endregion //region units diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 37cadd68d8..6deb1ec7de 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -339,6 +339,34 @@ public class Fx{ Lines.spikes(e.x, e.y, 1f + e.fin() * 6f, e.fout() * 4f, 6); }), + titanExplosion = new Effect(30f, 160f, e -> { + color(Pal.berylShot); + stroke(e.fout() * 3f); + float circleRad = 6f + e.finpow() * 60f; + Lines.circle(e.x, e.y, circleRad); + Lines.spikes(e.x, e.y, circleRad + 6f, 32f * e.foutpow(), 10); + }), + + titanSmoke = new Effect(300f, 300f, b -> { + float intensity = 3f; + + color(Pal.berylShot, 0.7f); + 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), 22f * 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, Pal.berylShot, 0.5f); + }); + }); + } + }).layer(Layer.bullet - 4f), + greenBomb = new Effect(40f, 100f, e -> { color(Pal.heal); stroke(e.fout() * 2f); @@ -1337,6 +1365,13 @@ public class Fx{ Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f); }), + shootTitan = new Effect(10, e -> { + color(Pal.lightOrange, Pal.berylShot, e.fin()); + float w = 1.3f + 10 * e.fout(); + Drawf.tri(e.x, e.y, w, 35f * e.fout(), e.rotation); + Drawf.tri(e.x, e.y, w, 6f * e.fout(), e.rotation + 180f); + }), + shootBigSmoke = new Effect(17f, e -> { color(Pal.lighterOrange, Color.lightGray, Color.gray, e.fin()); @@ -1353,6 +1388,17 @@ public class Fx{ }); }), + shootSmokeTitan = new Effect(70f, e -> { + rand.setSeed(e.id); + for(int i = 0; i < 13; i++){ + v.trns(e.rotation + rand.range(30f), rand.random(e.finpow() * 40f)); + e.scaled(e.lifetime * rand.random(0.3f, 1f), b -> { + color(Pal.berylShot, Pal.lightishGray, b.fin()); + Fill.circle(e.x + v.x, e.y + v.y, b.fout() * 3.4f + 0.3f); + }); + } + }), + regenParticle = new Effect(100f, e -> { color(Pal.accent); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 2637373ef0..db914c7a34 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -140,6 +140,7 @@ public class BulletType extends Content implements Cloneable{ /** Any value <= 0 disables the trail. */ public int trailLength = -1; public float trailWidth = 2f; + public float trailSinMag = 0f, trailSinScl = 3f; /** Use a negative value to disable splash damage. */ public float splashDamageRadius = -1f; @@ -396,7 +397,7 @@ public class BulletType extends Content implements Cloneable{ b.trail = new Trail(trailLength); } b.trail.length = trailLength; - b.trail.update(b.x, b.y, trailInterp.apply(b.fin())); + b.trail.update(b.x, b.y, trailInterp.apply(b.fin()) * (1f + (trailSinMag > 0 ? Mathf.absin(Time.time, trailSinScl, trailSinMag) : 0f))); } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java index f429ca1f4c..729ecb3035 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java @@ -35,7 +35,7 @@ public class ReloadTurret extends BaseTurret{ } protected void updateCooling(){ - if(reload < reloadTime){ + if(reload < reloadTime && acceptCoolant){ float maxUsed = consumes.get(ConsumeType.liquid).amount; Liquid liquid = liquids.current(); diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 0db60ba4ef..3aca805667 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -296,6 +296,7 @@ public class Turret extends ReloadTurret{ wasShooting = false; + //TODO do not lerp recoil = Mathf.lerpDelta(recoil, 0f, restitution); heat = Mathf.lerpDelta(heat, 0f, cooldown); diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index fdaa579b93..b4abef4048 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -124,15 +124,18 @@ public class DrawTurret extends DrawBlock{ public TextureRegion[] outlines; /** If true, turret reload is used as the measure of progress. Otherwise, warmup is used. */ - public boolean useReload = false; + public boolean useReload = true; /** If true, parts are mirrored across the turret. Requires -1 and -2 regions. */ public boolean mirror = true; /** If true, an outline is drawn under the part. */ public boolean outline = true; /** If true, the layer is overridden to be under the turret itself. */ public boolean under = false; + /** If true, the base + outline regions are drawn. Set to false for heat-only regions. */ + public boolean drawRegion = true; /** If true, progress is inverted. */ public boolean invert = false; + public boolean useProgressHeat = false; public Interp interp = Interp.linear; public float layer = -1; public float outlineLayerOffset = -0.01f; @@ -176,18 +179,18 @@ public class DrawTurret extends DrawBlock{ Draw.xscl = i == 0 ? 1 : -1; - if(outline){ + if(outline && drawRegion){ Draw.z(prevZ + outlineLayerOffset); Draw.rect(outlines[i], rx, ry, rot); Draw.z(prevZ); } - if(region.found()){ + if(drawRegion && region.found()){ Draw.rect(region, rx, ry, rot); } if(heat.found()){ - Drawf.additive(heat, heatColor.write(Tmp.c1).a(build.heat), rx, ry, rot, Layer.turretHeat); + Drawf.additive(heat, heatColor.write(Tmp.c1).a(useProgressHeat ? build.warmup() : build.heat), rx, ry, rot, Layer.turretHeat); } Draw.xscl = 1f; @@ -200,19 +203,21 @@ public class DrawTurret extends DrawBlock{ public void load(Block block){ if(under) layer = Layer.turret - 0.0001f; - if(mirror){ - regions = new TextureRegion[]{ + if(drawRegion){ + if(mirror){ + regions = new TextureRegion[]{ Core.atlas.find(block.name + suffix + "1"), Core.atlas.find(block.name + suffix + "2") - }; + }; - outlines = new TextureRegion[]{ + outlines = new TextureRegion[]{ Core.atlas.find(block.name + suffix + "1-outline"), Core.atlas.find(block.name + suffix + "2-outline") - }; - }else{ - regions = new TextureRegion[]{Core.atlas.find(block.name + suffix)}; - outlines = new TextureRegion[]{Core.atlas.find(block.name + suffix + "-outline")}; + }; + }else{ + regions = new TextureRegion[]{Core.atlas.find(block.name + suffix)}; + outlines = new TextureRegion[]{Core.atlas.find(block.name + suffix + "-outline")}; + } } heat = Core.atlas.find(block.name + suffix + "-heat"); @@ -220,7 +225,7 @@ public class DrawTurret extends DrawBlock{ @Override public void getOutlines(Seq out){ - if(outline){ + if(outline && drawRegion){ out.addAll(regions); } }