From 61bb4d2dac246d2c00e8bbacd4317487dbe936b4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 3 Dec 2021 12:28:13 -0500 Subject: [PATCH] Breach turret done / DrawTurret & reload fixes --- .../sprites/blocks/turrets/breach.png | Bin 787 -> 787 bytes .../sprites/blocks/turrets/fracture.png | Bin 1066 -> 1017 bytes core/assets/logicids.dat | Bin 3681 -> 3657 bytes core/src/mindustry/content/Blocks.java | 18 ++++++++++++++++-- core/src/mindustry/content/Fx.java | 10 ++++++++++ core/src/mindustry/graphics/Pal.java | 1 + .../defense/turrets/ContinuousTurret.java | 7 ++++++- .../blocks/defense/turrets/LaserTurret.java | 5 +++++ .../blocks/defense/turrets/ReloadTurret.java | 7 +++++++ .../world/blocks/defense/turrets/Turret.java | 12 +++++++++++- core/src/mindustry/world/draw/DrawTurret.java | 13 +++++++++---- 11 files changed, 65 insertions(+), 8 deletions(-) diff --git a/core/assets-raw/sprites/blocks/turrets/breach.png b/core/assets-raw/sprites/blocks/turrets/breach.png index ead01466cd07abd914818f64e5e76c7dfe6b800b..03284ae8d3a3da5dba187bd308c0505a03853638 100644 GIT binary patch delta 734 zcmV<40wMjA29pMmL4S)l0JJm|I2FnTprt@@lqM-S0F)SWf*3B4kd$120vbf9XzA!& z+M+_VZ~}&Eq>Z)n_Pu$3Y{&bP-0XV2^L?IuGoD=oLxv35*XbFG&{R9d`jW@Hr6@Tz>_O4^Pwplj+P=f|~#f z_#96OE&?p!bG#&&3-Ex?@sMCDz!N^lT0+P$xXIah0k=y#q%*y3&Cd4#cLB@Ay!zPD z-o9Z=x)ag^Y9vI!1A&)-L_!oi5L^Q|5+dP&p$N(atS(?|dqe^<{7sS|5|AfHH))b2 z5->hINeAQO)PMD(r?m2;DQcyn*|kzMna)yvNzTC*K>gC|TlT7v&^KaG%ViP?ECCw$ z9Ek+(oWVjuuK)}99F7F(tWhh06krMO8I6RZfXkn!8w04#qqFBl7P1FCy?AKfn&AAn z|BKw;TLZRPLLWT990j&f0tX%t%mcPb0v8?-&IH>MG=D2S)@cu~5_o_R@Zt0C&h48f zfdl{S=w9)7vIlIs1T8$kxCBZP+L1`0CQy>w;hb4zA3VUU0U8Ni+q)!m!IvPd-~mAq zunSQE6Cu$oACfOtwQrG&@lFN#I!&bL3}ljXD_+fp>} zqnH1R`+p`6-WEB@9`JqozIdSZQkTcl89>7Wj7vZ(;qQ~Xo!gg-IhKn#Mtl3^YEOKt z?awKt4<2CF051ttBH#f*5sZ`&1rG>Efd~na@Ib{dNJ-#?lE8tdB83MkZ;pCMSO+{n zJR{_tEMat{1J`D_Jzjg@>U00=jOM=usvf|RpjVkPFE9I>r~PAv`V#Px5CIPu)c|V= zQSg9a5wwyJ2@engnx-LNUAg-5Q6+%`e{nuDExzW%V6B98zz-QRWXR6vKRV!107*qoM6N<$f`R!>4FCWD delta 734 zcmV<40wMjA29pMmL4QUZ09qOfoC@Uv&{9NklqM-S0F)SWf|y(&At`f#6iE{$RJ3$- zE^SdES~x*A)kqs_XXd?mf7VXsC#BidX7>BM`)2&s3)IxqJmw5yJDR3Z9q99yuMGfv zJ36>G=3sFD6t+iu4FG(j4(?S@E&MjZMWf z>5j`4P$Izt9&o$`I1;?z0p}V(k>Cjr)FQ|iu-w2{_pk&6_=hBcB_OoPwA*EUh9zLM zv)^ow_L{CQJ%6#zkEE!@ie^`*XgrxV;g2&0SwQNWUasv`A|W?pq}pX12_yj$_z;c+ z>Y71ALRNqVd*b&1 z{%j3cX9+oYfH(`RqXY^(z*q;YlLRU}z+4HoB}h6w+J9+JuN-(FA>jP#Z|C+^lR$xg zzxyJ3eDVrdbqP{Az)F@Lj3L_t(|ob8%BZWKWfhHEVX4giu5fFr~ah@5#%WDekvXjvk# zWQj#W0!J)Fgd6}z*v^Q21c&PbAbbHwGy&Am^wzUqSZIF9l6PiycK)xcyQ{hfVAQBl zqZ(;vx))~iMfg|Ww`hYp7(yui+nMeS4?deO0(Tv!^!rs^M}Hy#lxn*Bc0d*WgcaLK$%CifKU~HWF7$Ea&@8JhKj;0foR5V`<}%}*v1(|3A7XbvE4`PqCCI0$JH z)B{3O09@E3gnt+WmjSkhaI59bFIN{L1iVI4>#1bR2r)EHu^FwU&rXjglKJ^p_2+C6z(KhC{Eayj(Y%y0 zV~Xo(QLc|$%mX;OKnfwpJc@!4=l1|*5Ul0_6aeXHix52Kxtbw{keWxi=JVeWQuA8b z%ua(+jemOb*#y8+Fx|PY=MvWRRx>&Y zr7uEwRpZ48>bjyu(b898ylV04O!2C43?Vizbm>aIL<7zEYRUG*MHU zwVPVhd|#j>54*hv~Kr6C^hd{W?KV56(DH72ZUPYDF{?DL`FcI z>3^lBtq^MN?O9tiy)ORj$^-#^LEudEgpg}KKF*m3P{shR)|W`9YPBz5jZAG#K^+8B z2oh;dwReWBk!e{vGtB}BK?}!P5K8WY=dJ68Y&lHHx(zNpWExTFKBSc8Ss_Y&K9wsG zvaSPgEvT&@0`M)@!aP7mCYTGsVjh)3XisGxATt&ALhzVJA%vFZ0SamXD})^LDCYnVrICQHqa8Z~OvPrxfZ(}3l#TmS$707*qoM6N<$ Ef`*>IcmMzZ delta 1032 zcmV+j1o!*-2dW5=F@NMqL_t(|ob8&wZWBQe#>Wv4;It?b1x|(1QIR$UvJs6bcmOCd z<^{m;0twD*gf2!DegwLRDyBf9cb4Fpi`$# zohoTK8oSAK=5Fi%HQJ*NI_I+ghNJQ3#V6C5VH~6s16`(`N?$VI0#`8 z)B-|P09@E31b-g{R{_?BaHrp z-#7;$X1<0>K@b5@hQnjWXD^$ZN6o*#&3-luKni(0hvsii_M;CfT?r0e{Q`h|2qXYa zwHCI#1R-TWlOUjZR1SosEb!>`h5CUxqq$|^OogB;%zr%%M`K5|_QM|sDbG)?6CTeW z?B45q59VhxlP6OIV7b~~uD6b-n$OXf$+xZFtMflrtl2>gAPjqia2w`P2m#HbEZso` z0L_P?pKD&4D`*u)f;Bsk{lz)A$pqAZ*I%y57yo$rZgaob9su@zyiaT__`LYExi>X) z92_3)WPb+$fXV$2;+VijfOC!=?PKPt-@YibQY851so&f^0pgKhPJ>j~b7raIVtywe zP-eN~VRz6-1fUu1rIrrQf4%oJ`a*tsb(@cijr&1KPit|@`3dBRQvXv_oTe+Xe! zi4P~J>#`O_b3cW#s>Y`?*{i}n1m8TBIa1}1=%qiNDzY)cwR(TKRxOuFqSBeRn`%^j zUwFugJ C@!Mzs diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 00ce8adfa64d420737526011b6f363a5cdd4542a..cf2427f6568a37111b4045cf2938ebac4d22cb4c 100644 GIT binary patch delta 16 YcmaDTb5e$h;rK?T9UPl4arCnS05^{YKmY&$ delta 40 wcmX>p^H7F~;lxI!9US6f$*DOxy2X`wB^jy3nZ>%v8Hu?`sYRQ2a!g { + color(Color.white, Pal.tungstenShot, e.fin()); + stroke(e.fout() * 1.1f + 0.5f); + + randLenVectors(e.id, 5, 28f * e.fin(), e.rotation, 10f, (x, y) -> { + lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 5f + 0.5f); + }); + }), + shootPayloadDriver = new Effect(30f, e -> { color(Pal.accent); Lines.stroke(0.5f + 0.5f*e.fout()); diff --git a/core/src/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java index 02b1571bd3..58ebf19794 100644 --- a/core/src/mindustry/graphics/Pal.java +++ b/core/src/mindustry/graphics/Pal.java @@ -117,6 +117,7 @@ public class Pal{ logicUnits = Color.valueOf("c7b59d"), berylShot = Color.valueOf("b1dd7e"), + tungstenShot = Color.valueOf("768a9a"), plasticBurn = Color.valueOf("e9ead3"), diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java index 2109961335..d52fca935c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java @@ -95,13 +95,18 @@ public class ContinuousTurret extends Turret{ return super.sense(sensor); } + @Override + protected void updateReload(){ + //continuous turrets don't have a concept of reload, they are always firing when possible + } + @Override protected void updateShooting(){ if(bullet != null){ return; } - if(reload <= 0 && (consValid() || cheating()) && !charging){ + if((consValid() || cheating()) && !charging){ BulletType type = peekAmmo(); shoot(type); } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java index a337c2381e..0699556826 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -90,6 +90,11 @@ public class LaserTurret extends PowerTurret{ return 1f - Mathf.clamp(reload / reloadTime); } + @Override + protected void updateReload(){ + //updated in updateTile() depending on coolant + } + @Override protected void updateShooting(){ if(bulletLife > 0 && bullet != null){ diff --git a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java index a4bb4b7d8f..f429ca1f4c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java @@ -27,6 +27,13 @@ public class ReloadTurret extends BaseTurret{ public class ReloadTurretBuild extends BaseTurretBuild{ public float reload; + @Override + public void created(){ + super.created(); + //for visual reasons, the turret does not need reloading when placed + reload = reloadTime; + } + protected void updateCooling(){ if(reload < reloadTime){ float maxUsed = consumes.get(ConsumeType.liquid).amount; diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index a80fa06722..3e152ccd6d 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -309,6 +309,9 @@ public class Turret extends ReloadTurret{ logicControlTime -= Time.delta; } + //turret always reloads regardless of whether it's targeting something + updateReload(); + if(hasAmmo()){ if(Float.isNaN(reload)) rotation = 0; @@ -412,8 +415,15 @@ public class Turret extends ReloadTurret{ return ammo.size > 0 && ammo.peek().amount >= ammoPerShot; } + protected void updateReload(){ + float multiplier = hasAmmo() ? peekAmmo().reloadMultiplier : 1f; + reload += delta() * multiplier * baseReloadSpeed(); + + //cap reload for visual reasons + reload = Math.min(reload, reloadTime); + } + protected void updateShooting(){ - reload += delta() * peekAmmo().reloadMultiplier * baseReloadSpeed(); if(reload >= reloadTime && !charging){ BulletType type = peekAmmo(); diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index 20dcadf33a..fdaa579b93 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -131,6 +131,9 @@ public class DrawTurret extends DrawBlock{ public boolean outline = true; /** If true, the layer is overridden to be under the turret itself. */ public boolean under = false; + /** If true, progress is inverted. */ + public boolean invert = false; + public Interp interp = Interp.linear; public float layer = -1; public float outlineLayerOffset = -0.01f; public float rotation, rotMove; @@ -154,10 +157,12 @@ public class DrawTurret extends DrawBlock{ } float prevZ = layer > 0 ? layer : z; - float progress = useReload ? build.progress() : build.warmup(); - if(oscMag > 0){ - progress += oscAbs ? Mathf.absin(oscScl, oscMag) : Mathf.sin(oscScl, oscMag); - } + float progress = useReload ? 1f - build.progress() : build.warmup(); + + if(oscMag > 0) progress += oscAbs ? Mathf.absin(oscScl, oscMag) : Mathf.sin(oscScl, oscMag); + if(invert) progress = 1f - progress; + + progress = interp.apply(progress); for(int i = 0; i < regions.length; i++){ var region = regions[i];