From 211c0b2e714c563498e57aee8c2713a35c6e0c83 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 24 Nov 2021 12:30:01 -0500 Subject: [PATCH] Sublimate visuals, damage/length still broken --- .../blocks/turrets/sublimate-back-heat.png | Bin 0 -> 7711 bytes .../blocks/turrets/sublimate-back1.png | Bin 356 -> 417 bytes .../blocks/turrets/sublimate-back2.png | Bin 344 -> 423 bytes .../blocks/turrets/sublimate-front-heat.png | Bin 0 -> 5674 bytes .../blocks/turrets/sublimate-front1.png | Bin 0 -> 330 bytes .../blocks/turrets/sublimate-front2.png | Bin 0 -> 340 bytes .../sprites/blocks/turrets/sublimate-heat.png | Bin 0 -> 16729 bytes .../blocks/turrets/sublimate-liquid.png | Bin 0 -> 232 bytes .../blocks/turrets/sublimate-nozzle-heat.png | Bin 0 -> 4768 bytes .../blocks/turrets/sublimate-nozzle1.png | Bin 0 -> 542 bytes .../blocks/turrets/sublimate-nozzle2.png | Bin 0 -> 550 bytes .../blocks/turrets/sublimate-preview.png | Bin 1704 -> 1771 bytes .../sprites/blocks/turrets/sublimate-top.png | Bin 0 -> 220 bytes .../sprites/blocks/turrets/sublimate.png | Bin 1503 -> 1058 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3501 -> 3523 bytes core/src/mindustry/content/Blocks.java | 32 +++++-- .../mindustry/entities/bullet/BulletType.java | 2 + .../entities/bullet/ContinuousBulletType.java | 1 + .../bullet/ContinuousFlameBulletType.java | 38 ++++++-- .../mindustry/entities/comp/BuildingComp.java | 4 + core/src/mindustry/graphics/Drawf.java | 11 +++ core/src/mindustry/graphics/Layer.java | 3 + .../defense/turrets/ContinuousTurret.java | 22 ++--- .../blocks/defense/turrets/LaserTurret.java | 15 +-- .../world/blocks/defense/turrets/Turret.java | 13 ++- .../blocks/production/GenericCrafter.java | 9 +- core/src/mindustry/world/draw/DrawBlock.java | 2 +- core/src/mindustry/world/draw/DrawMulti.java | 4 +- core/src/mindustry/world/draw/DrawTurret.java | 87 ++++++++++++------ gradle.properties | 2 +- tools/src/mindustry/tools/Generators.java | 3 +- 32 files changed, 177 insertions(+), 72 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-back-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-front-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-front1.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-front2.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-liquid.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-nozzle-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-nozzle1.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-nozzle2.png create mode 100644 core/assets-raw/sprites/blocks/turrets/sublimate-top.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-back-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate-back-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b9981be3de170347ffd653d289b77c48a860d7 GIT binary patch literal 7711 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 KxvX_luNvxRH zZrc-^qj#9LzfsgToW5YX3M;>1)d9`OK3zB7G|$^UhEWP`vPqqRO$OZB&Szu}EDqk# z6}z#HL-=*K*YsOD@?F<;lU7z|X?*$fGpHu*RFKcmUrMolBJWKbyU_0u-%IO@a;J4Ja#?*tC-|4d^CLR3 zuCqh}#D7=Z7oVU1HY{jqL$Kj$0Rv{u2jM-6EN5J}R+P)FY=)XpEB>VTch{Y{%jHh0|SGntDnm{r-UW|GpVwX literal 344 zcmeAS@N?(olHy`uVBq!ia0y~yU{D8P4mJh`hMvWNrVI=WjKx9jP7LeL$-HD>U=;Fn zaSVxQeS6)OugO7x^}+I~=^HMeI_+>)*2kvV-9Y8u!KkeDk4-le3bT~W*v~8W`Bv-G z({B#xIH(A9{)u0;>*d~Ow<>&D{v6u%{IJb->AZDGVGFqXqP(~-^gMoJsC%Jha!ws@ zf%aZSRrcL)&M$hsa)s9M#;xyvzu7y9tE+HQS7f8ooDxk&=?T4;4+L#-xW=8>nEA{% za?KpkX{)6+#8?&;_)0iDxYovasNX>R+S|CFh6l_2?kaBL|9^<@_~jCx8;4vhvQ{=^ z9&K~*%`dH1T(LAK|GLp~A-)YPJPBnSToGJs7F*Wu?B&0a*bw|!p4m2`;qgRG#=Qv* zpA#=XE-#Synv%T0{LGwHc~$4_|9Gf4Jz+Mk?Bq_I@y?rpfq}u()z4*}Q$iB}#DtS; diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-front-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate-front-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..6bdb42bc14c17bf5acb87d4ee17dadc12046bf14 GIT binary patch literal 5674 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..c63475814721e954cf96a63755c28f5720fbb567 GIT binary patch literal 16729 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-liquid.png b/core/assets-raw/sprites/blocks/turrets/sublimate-liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..0315dae8fbc2906f5fc4277a4144d594e2b03274 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_7^E z#WAE}&fA-we9Z;|EDmS>|K}0k;nEdRG$V8QE7sgwMsd?v88E?&^JOc}ee4dDeX#aC zzx}Ze8Sj)A`J3%Fw(K|%?(G-F8JPHf-FHvbBP_MQHv4KSDm}S9*UyPFyR@Nxc|#JH z#xf}Jc6+A!^9Hs#Ez$+zR~l|#U`wmy?=U;uEdjI9V7{zIt_?@hPGdumkf*Dk%Q~lo FCII5dO%DJ7 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle-heat.png b/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0339a8e151c9145a34180d786f4bfe9239ad43 GIT binary patch literal 4768 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle1.png b/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle1.png new file mode 100644 index 0000000000000000000000000000000000000000..3005da0a34ebb048546f08d62f0a6002b6fc4261 GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z<9&c z#WAE}&fD8(eVGD9+8**-Gn$(uNbWK-+@@fbaOl|HTTBZXR~If_`ruHE@vA@0#pmXH zw$t{B=y{%+@J@CD0|Ns?%H|Dr4Z%D2?6M2_AGhw>{r>oQ+w%UOH-61Ly&5eWzUvlh$)+GJDi1E#X!8*&$$d;P~(8_0J>SIiwwCxwCB7 zK4Mt6zODP!svW&YyDUQ(GV25nu}*jqKX zecL@*-d}zp(-qCb`O+J%ept%Fxat*Ku4Rp8B*V++2iCUht8xUCmu|lKK87dWOTfYE zozUm~=8q4tWb9(nI_5GX$=b@LVckP)!w6dsHPK@vJZ|yPf!I z_9sPVo$%M^!YgB0y4Npl;SRW4CLwh2Rk+DQJLXy6YIfPxh>Jf@E9NL>+mgFu>s-!h zho>{KM6A2ExZHYeyFM$2fs1KV`$O-OOdj!qdwAl#Bo5rpZwqGqU{<3U$k2b79Tfc7 bu)zU!y{WSbd=E0;07-kg`njxgN@xNAVl3Ek literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle2.png b/core/assets-raw/sprites/blocks/turrets/sublimate-nozzle2.png new file mode 100644 index 0000000000000000000000000000000000000000..87052d3082103bf099c8d7616c239f38c793f5aa GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1%z^ z#WAE}&fD9zeuo1DTpx0uUeMg-8=!b9U^Dv?4etcriAoz;vTpdST5?+Ig;QgaWWk^5 z4`!Md@8fEjcxH~ur|M%u3=9knIeKgSAH+QCo?iR+_uI7C+P@$FJ^S{4&lbBz%`$Fu(9(7~!4PCAc!+JnsSW|Fh9~w;KNu#x=U8~1 zQI$jf!Hw1R-zwMty!!dd^3U!s7;+D61ja*k*S1tzg3I}YxooIu(e!E9 z#=CtR2mku=W#URl*>B`sTU>6vwq2iT!1F7(I^>bP0l+XkKlOW}H literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate-preview.png b/core/assets-raw/sprites/blocks/turrets/sublimate-preview.png index f0974e30b46eb5e2175cc698066d323c59dc1fd2..11b2d43d75fcc81d5ed5d573ee254ede48940a2b 100644 GIT binary patch delta 1742 zcmZ3%`wX*-N^(hyO()KOxJfl)>dV~n(D2gm`iSfQpOk!ibLPkY*RT3l z$w?<Llkr7ipU=w!8c{rZE(5$+xlYRT16A)fJ-%33>`9<6t36A zu9X)=?NgIJb=zuit#i96I3fGrYXAN1m%ppKp5t|xy}jujGBJKd(Oh;PpmE>u1c{H5+;wre!{wF{J)8iFes8x#}zP1>U5c(QnV|2WklMDLLH!6#UzNPvtw? zmoamNXC0P2v-h~>wGO^Meix@}^$K&WD_Ru_5{g8PtghBf5o=oi!b#^llc8?;>c6I5 zv-+*}@490?C+2ftjB`(Hb8o|?XN#xp4!uy*{kr{(<^EkJ#`aHtt@B_Ileb$wCxg>| z`RXka?K@tJM|UK0dp8Og+ndPtuJs63SnyMI_c0}gKOe3+OxRW<-ee-Xpz*=>KSA{Z zXBY!&SF<#!*)o3MXf(Dred|zat*W51eDU<%qB{3qMSVAkS6Qm=cYpqbmz-XAPJMrL z^z@T0&HRb8^b?Aw+MQEzZKxK$<*3Etvq|e(O!_SSMVseLNVJ@U(&5+-E4an zRad^mw0@TU8TlW^bK8>CLS--csa)|owsZ!6!hY{VI!sQPZ>}^(E}j&9eP?!rYZE8K zx;6z{~M?sxF(jF{9$X!?FwgHi`M_yed*qVeFWx-xyHzbY}6p89%QHTxs60>}j;Gre^TJ zy6?{)|Gu2QYX9Y~RjXQ;$j%5AT=2HcBvkj+jTt`~7;eAae=xazg~x>yy_Lypl^l5- zviE(d{Vwr8qVuPQW=ll4kX6|4eQZq}4y%3&{d|7lfA$&oqY6LTBHwVHZ53dhkZotq z_oT#niq3B3%szW|Chi5TKc}cXTdct`CCVuv|J>WVHCHw|1e|SJa;&iO-xQ^usX?cv zXk>m1v0gXheV4=M;OzZNr`88+Ut6|8HHfi8^2zoZaVP#~i%kUn9JFS0jGm*;xMQhX z_>{nq?USQ^>#m&>Wyq?ST6)H!1&Z@SN?GZ=ALRw@=6_05`=HLvLZ>)rK>xP@O`RCya>GG)PJn^i0y>i7R# zx8wMHr%7s0k2D*IaxSc!^r|dr;(=b)__;NQ?=Mi+vgQ(a|J(T)bBnU#^%{n!Ivz}l z*PaIpsN9xS6;N53$;Fgvcd9iZ(azzJRYSAF-5F1}mz?FZ;A>i@_rQ6ApS=0&*)ym9 zWa#AHD8Rziqc7uqp=90dh1-_3D+D|%-o2#$V#%NISqFI}=k9V=%8urmwbC?RsXWZ( z?3N@^!|OF?nLM-9m`>lE7xeZ!bI@7$K!FwOw61*eb~q9GIse>O*R||B)KhB$@A{qA zf4bm`Xv2*pA11|ba|QM~zTj$5QD0JPcOZQ2^X8>lYz=cxsXCo7y#FZjL5L}1L)ufP z8~5%XG^vlDG2=d$Qz^r~NK1hwleYa46IjI zsHtLs?%hYLHB49CW8KbdEPY>!d+vdyQZXER{~XE+w@*JU z`d0Jv*7L=TN4)z@ue!1L%U delta 1675 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 G&;$T7k>KP2 delta 1473 zcmZ3)ai4pFK|SkCPZ!6KiaBrR+U8Am6lgo%(PVt#rpZ1AS=lX|x*Sg#I657A1r%I( zH>MOeXmIKJam&hzFJQEq->4^&u_kq|_3q8~#>wgP*;M=f)Yi@ad;c%bfdm5y9=7I# z2?jf|eE!78#KmRZai4JbH@~^L@!YfjtKUBPyPA{XK+320$};sbc0b-9ySqQWreg0` z%e4i*zuA&@JiPwt%gt=-rKb)rX_)pho+mZWk9FvMHL#{X6`Y``q4HJ9)yRypshKh>S)89XMaxrlF_h$jB z3tWGA@NYxpLFY&Z%_`6^#*VrqBL;i;WSv|aUPFtl>DA-%$#ibARg6ml3KXF;}jY(7N_0wlkwujyO&ik3O zE;p-b(dt;4J;8KA`HvGxdwJUKKl-(>pzplj?AG|A+UYAA#N_v-S#MnWXV$V!uJ$gm z`)|AOct>=$g#1|eFeA$?N{R9C`gCab16zKRcyk=XE%qt?`$W71g)? zA+&6>Wz3wZ-;G^O5A5a4Qx_GQW~}`zCf#bby1V7V16g+7FIQw`XT|K=bLwr*$HUKB z{9}*v=f3uwbw;&Aj8&7p-g1$r{DxmOb`SI9{nCreelV2O2P_OI%3?DA(|vWh=j!A0 zRRlO|30@{4Wd51O80pOW$%Zlk3m36>5LN zN@lWOxx%vYs0H^!=8`&}snNn-%l_K-uT$Q8i2cPL^)o9ub+5$~J@j}jY1eRISxq0y z$qy4{IQJfA7qAj_^sK+YA-_xEuF0V-)_kvb^$x_C)ZlU z9{%1^;eYZ2qX=Kx+&%TCnzs5=f)51?C3y>9z8Pav!{FSnk@&-qbIvnWHO9mJo;x=6 zYy4dJ+kU&m>)#8bCocHc5wzxr_Z!aW2?}ZlVz)Ri@rw;;QSqodI5|VO{)v}HWS3s+ zW=rM2Z=#c4&qul?(9+VOC^N~o~j{{MI02Tn-)(P7G& z#H7>GA2CTm=|Iqr4pGim@i$l&7|UF((L3Yna$s+N`J~0%UQVy)ZkqF9shdlZsYB4A zbuIh~cUYFHEcw+W!@06_ama0bTk(2<_smH`Mb=604z3X}%C?^pR{vISlvmg#cBGQ!8t?o`Q>5*dx4eIvm67>l;r!wg zcN;k4>gB&P7iDgAJbbs|;*lv0Atx+_f)t}CCwMiqUJb~+!g9pQzxOZ0*~^t$Oa?Wc z^_(j|Y*p#t{@^@)!i4BgrYartx;k28KTl;_dgRc*zpszionvNr5qxQq(27ZQs^{8{ z#Z8`&pjpGP)XzfAaS?By=QR#_heC;0-WO_IJhf{Wo_0!jakSq5oulD(fk*zp0UwJi zGGA{j;rG12Cx4)Uq2Z75V#{LYtd)+Rc`|r{|IfA3Ev?fKtNXIswbRwSckOWrwJe69 m-SKadGVhneN>PJj@z0*wZrt6r@Bjk?1B0ilpUXO@geCw7DzQ=k diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 56bdb1495a..e260614319 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -458,3 +458,4 @@ 63248=slag-incinerator|block-slag-incinerator-ui 63247=phase-synthesizer|block-phase-synthesizer-ui 63246=sublimate|block-sublimate-ui +63245=reinforced-container|block-reinforced-container-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 1cc8dad67afe888d291d811ccdc44c4ad44227d6..6012e9a17194a2de725609adb07e894e14d21b11 100644 GIT binary patch delta 38 tcmZ20eOQ`_;m}4VYi?1IqSVa1wEUvv)D+$1{JfIH%)Hd1%{JVHOaS?_4GRDO delta 16 XcmX>sy;hou;owFlYwpd#+yzVkE b.lifetime - fadeTime ? 1f - (b.time - (lifetime - fadeTime)) / fadeTime : 1f); - float baseLen = realLength * fout; + float mult = b.fslope(); + float maxLength = length * mult; + float realLength = Damage.findLaserLength(b, maxLength); float sin = Mathf.sin(Time.time, oscScl, oscMag); for(int i = 0; i < colors.length; i++){ Draw.color(colors[i].write(Tmp.c1).mul(0.9f).mul(1f + Mathf.absin(Time.time, 1f, 0.1f))); Drawf.flame(b.x, b.y, divisions, b.rotation(), - baseLen * lengthWidthPanOffsets[i * 4] * (1f - sin), - width * lengthWidthPanOffsets[i * 4 + 1] * fout * (1f + sin), + realLength * lengthWidthPanOffsets[i * 4] * (1f - sin), + width * lengthWidthPanOffsets[i * 4 + 1] * mult * (1f + sin), lengthWidthPanOffsets[i * 4 + 2], - baseLen * lengthWidthPanOffsets[i * 4 + 3] + realLength * lengthWidthPanOffsets[i * 4 + 3] ); } + if(drawFlare){ + color(flareColor); + Draw.z(flareLayer); + + float angle = Time.time * flareRotSpeed + (rotateFlare ? b.rotation() : 0f); + + for(int i = 0; i < 4; i++){ + Drawf.tri(b.x, b.y, flareWidth, flareLength * (mult + sin), i*90 + 45 + angle); + } + + color(); + for(int i = 0; i < 4; i++){ + Drawf.tri(b.x, b.y, flareWidth * flareInnerScl, flareLength * flareInnerLenScl * (mult + sin), i*90 + 45 + angle); + } + } + Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, lightStroke, lightColor, 0.7f); Draw.reset(); } diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 96051008b5..cc4bb003b6 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -414,6 +414,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, return Time.time; } + public float progress(){ + return 0f; + } + public BlockStatus status(){ return cons.status(); } diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index 500f8c8b69..ff909a329f 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -62,6 +62,17 @@ public class Drawf{ points.add(Tmp.v1.x + baseX, Tmp.v1.y + baseY); } + public static void additive(TextureRegion region, Color color, float x, float y, float rotation, float layer){ + float pz = Draw.z(); + Draw.z(layer); + Draw.color(color); + Draw.blend(Blending.additive); + Draw.rect(region, x, y, rotation); + Draw.blend(); + Draw.color(); + Draw.z(pz); + } + public static void dashLine(Color color, float x, float y, float x2, float y2){ int segments = (int)(Math.max(Math.abs(x - x2), Math.abs(y - y2)) / tilesize * 2); Lines.stroke(3f, Pal.gray); diff --git a/core/src/mindustry/graphics/Layer.java b/core/src/mindustry/graphics/Layer.java index 59d4808945..cb8dd93618 100644 --- a/core/src/mindustry/graphics/Layer.java +++ b/core/src/mindustry/graphics/Layer.java @@ -38,6 +38,9 @@ public class Layer{ //turrets turret = 50, + //special layer for turret additive blending heat stuff + turretHeat = 50.1f, + //ground units groundUnit = 60, diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java index 6f0611a133..0bab669759 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java @@ -55,19 +55,19 @@ public class ContinuousTurret extends Turret{ super.updateTile(); if(bullet != null){ - wasShooting = true; - bullet.rotation(rotation); - bullet.set(x + bulletOffset.x, y + bulletOffset.y); - heat = 1f; - recoil = recoilAmount; - - if(isShooting()){ - bullet.time = 0f; - } - //check to see if bullet despawned - if(bullet.owner != this || !bullet.isAdded()){ + if(bullet.owner != this || !bullet.isAdded() || bullet.type == null){ bullet = null; + }else{ + wasShooting = true; + bullet.rotation(rotation); + bullet.set(x + bulletOffset.x, y + bulletOffset.y); + heat = 1f; + recoil = recoilAmount; + + if(isShooting()){ + bullet.time = bullet.lifetime * bullet.type.optimalLifeFract * shootWarmup; + } } } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java index 6fa20f60d1..1bf6e1e1cb 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -4,14 +4,13 @@ import arc.math.*; import arc.util.*; import mindustry.entities.bullet.*; import mindustry.gen.*; -import mindustry.logic.*; import mindustry.type.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; import static mindustry.Vars.*; -/** A turret that fires a continuous beam with a delay between shots. Liquid coolant is required. */ +/** A turret that fires a continuous beam with a delay between shots. Liquid coolant is required. Yes, this class name is awful. */ public class LaserTurret extends PowerTurret{ public float firingMoveFract = 0.25f; public float shootDuration = 100f; @@ -56,11 +55,15 @@ public class LaserTurret extends PowerTurret{ public void updateTile(){ super.updateTile(); + if(!bullet.isAdded() || bullet.type == null){ + bullet = null; + } + if(bulletLife > 0 && bullet != null){ wasShooting = true; bullet.rotation(rotation); bullet.set(x + bulletOffset.x, y + bulletOffset.y); - bullet.time = 0f; + bullet.time = bullet.type.lifetime * bullet.type.optimalLifeFract; heat = 1f; recoil = recoilAmount; bulletLife -= Time.delta / Math.max(efficiency(), 0.00001f); @@ -83,10 +86,8 @@ public class LaserTurret extends PowerTurret{ } @Override - public double sense(LAccess sensor){ - //reload reversed for laser turrets - if(sensor == LAccess.progress) return Mathf.clamp(1f - reload / reloadTime); - return super.sense(sensor); + public float progress(){ + return 1f - Mathf.clamp(reload / reloadTime); } @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 30de73a628..793003b928 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -48,7 +48,7 @@ public class Turret extends ReloadTurret{ public float ammoEjectBack = 1f; public float inaccuracy = 0f; public float velocityInaccuracy = 0f; - public float shootWarmupSpeed = 3f / 60f; + public float shootWarmupSpeed = 0.1f; public int shots = 1; public float spread = 4f; public float recoilAmount = 1f; @@ -152,7 +152,7 @@ public class Turret extends ReloadTurret{ @Override public void getRegionsToOutline(Seq out){ - draw.getRegionsToOutline(out); + draw.getRegionsToOutline(this, out); } public static abstract class AmmoEntry{ @@ -233,11 +233,16 @@ public class Turret extends ReloadTurret{ case shootX -> World.conv(targetPos.x); case shootY -> World.conv(targetPos.y); case shooting -> isShooting() ? 1 : 0; - case progress -> Mathf.clamp(reload / reloadTime); + case progress -> progress(); default -> super.sense(sensor); }; } + @Override + public float progress(){ + return Mathf.clamp(reload / reloadTime); + } + public boolean isShooting(){ return (isControlled() ? unit.isShooting() : logicControlled() ? logicShooting : target != null); } @@ -286,7 +291,7 @@ public class Turret extends ReloadTurret{ if(!validateTarget()) target = null; //TODO can be lerp instead, that's smoother - shootWarmup = Mathf.approachDelta(shootWarmup, isActive() ? 1f : 0f, shootWarmupSpeed); + shootWarmup = Mathf.lerpDelta(shootWarmup, isShooting() ? 1f : 0f, shootWarmupSpeed); wasShooting = false; diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 1a127ec3c4..65134a9104 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -140,7 +140,7 @@ public class GenericCrafter extends Block{ @Override public void getRegionsToOutline(Seq out){ - drawer.getRegionsToOutline(out); + drawer.getRegionsToOutline(this, out); } public class GenericCrafterBuild extends Building{ @@ -254,12 +254,17 @@ public class GenericCrafter extends Block{ @Override public double sense(LAccess sensor){ - if(sensor == LAccess.progress) return Mathf.clamp(progress); + if(sensor == LAccess.progress) return progress(); //attempt to prevent wild total liquid fluctuation, at least for crafters if(sensor == LAccess.totalLiquids && outputLiquid != null) return liquids.get(outputLiquid.liquid); return super.sense(sensor); } + @Override + public float progress(){ + return Mathf.clamp(progress); + } + @Override public int getMaximumAccepted(Item item){ return itemCapacity; diff --git a/core/src/mindustry/world/draw/DrawBlock.java b/core/src/mindustry/world/draw/DrawBlock.java index 9b6e16c3e1..c500c3a309 100644 --- a/core/src/mindustry/world/draw/DrawBlock.java +++ b/core/src/mindustry/world/draw/DrawBlock.java @@ -23,7 +23,7 @@ public class DrawBlock{ @Deprecated public void drawLight(GenericCrafterBuild build){} - public void getRegionsToOutline(Seq out){ + public void getRegionsToOutline(Block block, Seq out){ } diff --git a/core/src/mindustry/world/draw/DrawMulti.java b/core/src/mindustry/world/draw/DrawMulti.java index 2d35189fd8..51867d5eeb 100644 --- a/core/src/mindustry/world/draw/DrawMulti.java +++ b/core/src/mindustry/world/draw/DrawMulti.java @@ -25,9 +25,9 @@ public class DrawMulti extends DrawBlock{ } @Override - public void getRegionsToOutline(Seq out){ + public void getRegionsToOutline(Block block, Seq out){ for(var draw : drawers){ - draw.getRegionsToOutline(out); + draw.getRegionsToOutline(block, out); } } diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index 6784ab9bf2..20dcadf33a 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -8,6 +8,7 @@ import arc.struct.*; import arc.util.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.defense.turrets.*; import mindustry.world.blocks.defense.turrets.Turret.*; @@ -18,7 +19,9 @@ public class DrawTurret extends DrawBlock{ public Seq parts = new Seq<>(); public String basePrefix = ""; - public TextureRegion base, liquid, top, heat, preview; + /** Overrides the liquid to draw in the liquid region. */ + public @Nullable Liquid liquidDraw; + public TextureRegion base, liquid, top, heat, preview, outline; public DrawTurret(String basePrefix){ this.basePrefix = basePrefix; @@ -28,10 +31,13 @@ public class DrawTurret extends DrawBlock{ } @Override - public void getRegionsToOutline(Seq out){ + public void getRegionsToOutline(Block block, Seq out){ for(var part : parts){ part.getOutlines(out); } + if(preview.found()){ + out.add(block.region); + } } @Override @@ -42,14 +48,22 @@ public class DrawTurret extends DrawBlock{ Draw.rect(base, build.x, build.y); Draw.color(); - Draw.z(Layer.turret); + Draw.z(Layer.turret - 0.02f); - Drawf.shadow(build.block.region, build.x + tb.recoilOffset.x - turret.elevation, build.y + tb.recoilOffset.y - turret.elevation, tb.drawrot()); + Drawf.shadow(preview, build.x + tb.recoilOffset.x - turret.elevation, build.y + tb.recoilOffset.y - turret.elevation, tb.drawrot()); + + Draw.z(Layer.turret); drawTurret(turret, tb); drawHeat(turret, tb); if(parts.size > 0){ + if(outline.found()){ + Draw.z(Layer.turret - 0.01f); + Draw.rect(outline, build.x + tb.recoilOffset.x, build.y + tb.recoilOffset.y, tb.drawrot()); + Draw.z(Layer.turret); + } + for(var part : parts){ part.draw(tb); } @@ -60,7 +74,8 @@ public class DrawTurret extends DrawBlock{ Draw.rect(block.region, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.drawrot()); if(liquid.found()){ - Drawf.liquid(liquid, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.liquids.currentAmount() / block.liquidCapacity, build.liquids.current().color, build.drawrot()); + Liquid toDraw = liquidDraw == null ? build.liquids.current() : liquidDraw; + Drawf.liquid(liquid, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.liquids.get(toDraw) / block.liquidCapacity, toDraw.color.write(Tmp.c1).a(1f), build.drawrot()); } if(top.found()){ @@ -71,11 +86,7 @@ public class DrawTurret extends DrawBlock{ public void drawHeat(Turret block, TurretBuild build){ if(build.heat <= 0.00001f || !heat.found()) return; - Draw.color(block.heatColor, build.heat); - Draw.blend(Blending.additive); - Draw.rect(heat, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.drawrot()); - Draw.blend(); - Draw.color(); + Drawf.additive(heat, block.heatColor.write(Tmp.c1).a(build.heat), build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.drawrot(), Layer.turretHeat); } /** Load any relevant texture regions. */ @@ -84,6 +95,7 @@ public class DrawTurret extends DrawBlock{ if(!(block instanceof Turret)) throw new ClassCastException("This drawer can only be used on turrets."); preview = Core.atlas.find(block.name + "-preview", block.region); + outline = Core.atlas.find(block.name + "-outline"); liquid = Core.atlas.find(block.name + "-liquid"); top = Core.atlas.find(block.name + "-top"); heat = Core.atlas.find(block.name + "-heat"); @@ -107,16 +119,25 @@ public class DrawTurret extends DrawBlock{ public static class RegionPart extends TurretPart{ public String suffix = ""; - public boolean mirror = true; + public TextureRegion heat; public TextureRegion[] regions; public TextureRegion[] outlines; - public boolean outline = false; + /** If true, turret reload is used as the measure of progress. Otherwise, warmup is used. */ + public boolean useReload = false; + /** 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; public float layer = -1; public float outlineLayerOffset = -0.01f; public float rotation, rotMove; - public float originX, originY; - public float offsetX, offsetY, offsetMoveX, offsetMoveY; + public float x, y, moveX, moveY; + public float oscMag = 0f, oscScl = 7f; + public boolean oscAbs = false; + public Color heatColor = Pal.turretHeat.cpy(); public RegionPart(String region){ this.suffix = region; @@ -133,32 +154,38 @@ public class DrawTurret extends DrawBlock{ } float prevZ = layer > 0 ? layer : z; - float progress = build.warmup(); + float progress = useReload ? build.progress() : build.warmup(); + if(oscMag > 0){ + progress += oscAbs ? Mathf.absin(oscScl, oscMag) : Mathf.sin(oscScl, oscMag); + } for(int i = 0; i < regions.length; i++){ var region = regions[i]; float sign = i == 1 ? -1 : 1; - Tmp.v1.set((offsetX + offsetMoveX * progress) * sign, offsetY + offsetMoveY*progress).rotate(build.rotation - 90); + Tmp.v1.set((x + moveX * progress) * sign, y + moveY * progress).rotate((build.rotation - 90)); float - x = build.x + Tmp.v1.x, - y = build.y + Tmp.v1.y, - rot = (i == 0 ? rotation : 180f - rotation) + rotMove * progress * sign + build.rotation, - ox = originX + region.width * Draw.scl/2f, oy = originY + region.height * Draw.scl/2f; + rx = build.x + Tmp.v1.x + build.recoilOffset.x, + ry = build.y + Tmp.v1.y + build.recoilOffset.y, + rot = i * sign + rotMove * progress * sign + build.rotation - 90; + + Draw.xscl = i == 0 ? 1 : -1; if(outline){ Draw.z(prevZ + outlineLayerOffset); - - Draw.rect(outlines[i], - x, y, region.width * Draw.scl, region.height * Draw.scl, - ox, oy, rot); - + Draw.rect(outlines[i], rx, ry, rot); Draw.z(prevZ); } - Draw.rect(region, - x, y, region.width * Draw.scl, region.height * Draw.scl, - ox, oy, rot); + if(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); + } + + Draw.xscl = 1f; } Draw.z(z); @@ -166,6 +193,8 @@ public class DrawTurret extends DrawBlock{ @Override public void load(Block block){ + if(under) layer = Layer.turret - 0.0001f; + if(mirror){ regions = new TextureRegion[]{ Core.atlas.find(block.name + suffix + "1"), @@ -180,6 +209,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")}; } + + heat = Core.atlas.find(block.name + suffix + "-heat"); } @Override diff --git a/gradle.properties b/gradle.properties index 664e856997..0c4458242a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=f106eee2 +archash=916c5a77 diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index 6468b8aaed..fe2ac4056c 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -288,7 +288,8 @@ public class Generators{ region.path.delete(); - save(out, block.name); + // + save(out, region.name); } if(!regions[0].found()){