From 2f0daa6fc496c1a4d83fdefb0ab44260ed24cd1b Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 12 Nov 2021 20:09:27 -0500 Subject: [PATCH] Core cleanup / Turret draw class --- .../blocks/storage/core-aegis-team.png | Bin 2010 -> 0 bytes .../blocks/storage/core-aegis-thruster1.png | Bin 864 -> 0 bytes .../blocks/storage/core-aegis-thruster2.png | Bin 862 -> 0 bytes .../sprites/blocks/storage/core-aegis.png | Bin 1586 -> 0 bytes .../blocks/storage/core-bastion-team.png | Bin 1260 -> 2010 bytes .../blocks/storage/core-bastion-thruster1.png | Bin 514 -> 864 bytes .../blocks/storage/core-bastion-thruster2.png | Bin 512 -> 862 bytes .../sprites/blocks/storage/core-bastion.png | Bin 1358 -> 1586 bytes core/assets/icons/icons.properties | 3 +- core/assets/logicids.dat | Bin 3267 -> 3255 bytes core/src/mindustry/content/Blocks.java | 14 +--- core/src/mindustry/content/Loadouts.java | 6 +- .../maps/planet/ErekirPlanetGenerator.java | 2 +- .../world/blocks/defense/ForceProjector.java | 2 + .../blocks/defense/turrets/LaserTurret.java | 5 +- .../blocks/defense/turrets/LiquidTurret.java | 23 +----- .../world/blocks/defense/turrets/Turret.java | 78 ++++++++++-------- core/src/mindustry/world/draw/DrawBlock.java | 2 +- .../world/drawturret/DrawTurret.java | 37 +++++++++ 19 files changed, 92 insertions(+), 80 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/storage/core-aegis-team.png delete mode 100644 core/assets-raw/sprites/blocks/storage/core-aegis-thruster1.png delete mode 100644 core/assets-raw/sprites/blocks/storage/core-aegis-thruster2.png delete mode 100644 core/assets-raw/sprites/blocks/storage/core-aegis.png create mode 100644 core/src/mindustry/world/drawturret/DrawTurret.java diff --git a/core/assets-raw/sprites/blocks/storage/core-aegis-team.png b/core/assets-raw/sprites/blocks/storage/core-aegis-team.png deleted file mode 100644 index 6a34bde3943074819f8e4b6157430f6d9c3d9746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2010 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 diff --git a/core/assets-raw/sprites/blocks/storage/core-aegis-thruster1.png b/core/assets-raw/sprites/blocks/storage/core-aegis-thruster1.png deleted file mode 100644 index aaf48c0a64eb6a1adeb3175ca15d1e52a4a25904..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz>vkk#=yYvvq!F)fq{XsILO_JVcj{ImkbQd zQl2i3Ar*7p-nGq=c9dv%sITb0QMy@wl7o}SY^x_8$F|;1$nnri3P`?tbmcXP&A+zX z+CMYW)<1Qj{OSv*Gfb^F3o?Mgftx=Ae(@d%n7{u|h2_(a|Ns4)`RAt?hp&Zc-?=Lu zc7BycYZ7y01O?5vmoJ_#oyfAVDEQHjUvGcEzQ4czugup-agM9AwEND@@L+KgU3TO{ zT)fQOVC6y{r^4)`hHVZSudZ0=>8*FaYd*~(!%f^Fp2PcyprU}(N4tjY+oyLaD?PfL zw4TSf>m<&;aJ2n%bl6q!6;EL`LwL1l1RudJW#to6qZZnf7aFE-x($I+tH79*eX zE_+G8qQI)+7Zu5GEtF)M9lR7wlHce@26ME$dNY51(*HkKs_);L$kCE@RiM*hMbt|V z7N@UXZb|~P0({$ z+Y1MOMzJ`3<#U~McE@>F1(S!h9QpbBlAWN0;1n<5?W!cubxO?d>q(~wC85TEJ1Zxq z$jQHZUbV8LW5(OwgLnG=vdnpTd)JpMUtb6^Ei5W_HBtk|^2&)ly~<7sCP_Ie!TtFx nPR4${Dd(E&!KsgTe~DWM4fMTvKf diff --git a/core/assets-raw/sprites/blocks/storage/core-aegis-thruster2.png b/core/assets-raw/sprites/blocks/storage/core-aegis-thruster2.png deleted file mode 100644 index 23cee644e74c4ba0ce8fbbe20442e631bc150b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz>vkk#=yYvvq!F)fq{XsILO_JVcj{ImkbQd z5}q!OAr*7p-nGq=c9dv%sITZgQMyq-$=Ru3_N^Ztilw&%ggo?;0+R0@U1=t<@z=L_ z>&;d3PNk_XbkbjZ@!c6W1_%g$e)m>B!>?bz-u`|);kdnR-ON8f#W+GGq}-FURNgPQ zk!}@*UNeiVOg^(wg3SBr@ zf|wRs9H0LD+Qp>u;_8pzA4TbeUECV5DpK->*wHELqt+cw3VtT#S!TX{J7LwYXRMt1u;Q{?%g?JCTD$h^eu~LE&MPPT0h|(-L0w zy(uYKYiE5x*_3B7hq za08p5DBuA%%!VU;VdVU}a{2Xwf6uo|INq?i{qKO}w!e+WIlq~?g&`(89I6xuyZHT| zLbfs7!b52{zqPM6{KmI^+uy{`%kI6rw#`20TFmxFx!rI3e=iB1^Ni`x&i51L3~dCI zIgVPI-=86MT;dtXu~#L2dtVb_T4?e6uim%cv9C9JyDJHFg*vG)EzHOUF}J6wFfHWD zc2yEswLJyIY(H#hyDvnAX<2FH-@M%C5HO<$Fu1soN|g#5^CJAYvIHcySiUC*S%d^ zRJV()d9D7y=k~Rw&eLzZakLydD|&KoPYZvp$Yu0WE{nJ|opW4rLBeNvla` gEPt{?QuDeK_JPIXI}h-kj0OpKy85}Sb4q9e0IM%+e*gdg diff --git a/core/assets-raw/sprites/blocks/storage/core-aegis.png b/core/assets-raw/sprites/blocks/storage/core-aegis.png deleted file mode 100644 index d1fe947bab289cc7bed7443893f061538a758956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1586 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_Sne|ow&hE&XXJJ&l;#8JS- zQeI~#`y&n+=8ezhxy5a1af^-p*?Gd>SLy1h%b^oL#`VA5Xj}7h(U0%H&)@Io^ESSG zrvAo#YAg?F7+@j4Ap9Z~|{EI)LH=h|L@=iU36H^?p17;h_v6c3lk9!g&^ZztLeZN?yS*Rpo^igO##t1D{ZdNW;W_HHT8p zU7QC_xrrW7c6{n&{q*ZQ?n>DMN{&a3j8#uG=!-GvI&M|6_G-Ar{cSVDN|tF#s}6jB z=6JT@4dcJZ3Fo)^KU{s_`?HT;4euOv8$y{{{)RrN{v5G8;SP%$;})R>^M1YaI??q0 z?BcgAUwJab9Js_d|8M09xp*(z7&72Jr6h6JPFO}raTR>m zeY9#y&W{e6HD`2LBi?=vaWkuN;dA>|##Hg`R9pXv#(4{;GIZ?S^ia7-K{Z2}AxPzk zZ2O+s6Cd33YIw0*M3YhbK1TqHU2v0Ng9?L`op;lAAqL%pt8~Qv+>Mm{aG7;OME{Na zP$}tu@784e;NZ-#=S}exV3qvHBglCFHuux-j1fXH@~7K!rZ%wNS9bg%?Gm9{@i)RO zWi3n2k1)6C8a7^eFL96apI;M?#8j1l|MMATAFfyF_$LzJ+vNUZ zqL2&chy5&q@gbpN4lMs&7|Wi!GDfxBRPyXZe{36?d23IPny zq!`^A1QS>!kf;TV7&J8BJ?Ld{W!>@3)z%KnO9XlJi97(u8n_ULu{Hkr^@y4ruS1H%&_O}j@f-^@xy8ri%0#=yFCuHkExWHXm)q0HKI)=i79q z9$->u-WSQRo@HL`X2t62M9+lA_d*A>7?bv2-8ylC?azxs5f68>Uhry|l3AMjME2du z{z(Uz?L!#87r&4>pP9)1%z`mM$mRah z9vO`vZ&^NgP52tpd#R@%4rmuTp)2ajC z)A}bls4y)4(kJAS-ZvpZn_+cM+DsnKO`kTY7I0qJc%iS-R_FrDikLKa#t5MRmKAX+ z;fxYOQ-l;&9XZETp~4}2AgCav@h(MggS)1S@AG0<%fjO^^TSQaE!9d7R9wJ73&%B z>Oaqnqv9Ss^(q#{u|gdW`dQNTME_h?G2pfTJU_50`^U`v<(v~9rvIC#>d-#_XZ2JE f$$uAq{%72sy>7ye7tEau3=9mOu6{1-oD!Mk44ofy`glX=O&z&^#( z#WAE}&fB@Zd5^6GTD%Y5NqHu8Qq5aFg)ixef@R0_n>VI=oLjWL;zi@4fRN2U!+l>e zvwcw6c;}T?pvcK(>J|y}o>%_eoH=Wm+{T=TipK=}_cGs5o)V#7(J}WHgPhO~_TQEl zq#A4sH4Wx-FJ+t|oYwkvPTg0&1m9kl$o|M(!sh2cpSfnZB#SX({iI17<|gmIok%6Tc6(KR`$CK?=W)kYYJvLE4k)l z8k0Gj#>5+*oX%_3E|8k`XV3k~ZYTfk*%NT&y=mToKyCpg(~pafOLfYkz>JJzGl~}Q`XqQ+1nVqaz~`6XVdKnWx`02x zL-4`(&&CZ!-n&vn{ZBFUvwviCXJaT)6ZqH~BfMsML8i|G*O~(}85?$RUVFqHCY-bO ze)r4+lYcZgGczO#=XB~XnU#?LG3^A)y(8>%q!@nWHQ9b-UCX&eyL`IZ2aSEzcJIGi zvc4@0?yEeJzi{j{mB%X%mv~2w~qJzkb!dx38ZvJ*eTy>MaQ= zmTzpX{QMFNAi+ZfE(=6W~*>wr>*zi>oRs;T29Mx968wmuV-Q}~6SJUOwYyy@#+G4-(0=EjwcHFxqtkIC&ZI{$gi+$(}!u?}Zfr`zRi&;S4b_qVXOr#=;M zM;yPg>)nDMokx8(h{Y$EIeLF=omR?zwo7CC5%H`U3R52J)z-Npa^1l3R8rVNxBV+; z?Vhf7Ls-7UJ}%1dj?%t>Q!LZ8mZ|E#;#;N5Ik};_WB=3&-%H#79V^oAJi5+s@sXg< zohx6>a`1g%`DlOq`p>^IAN{SGYoE9MEX#494e1lMa+(}Iwo`4z-yJcvff;Y^&C~w( z>+7dde6m}Yx0=oiacH~Hq(P2Yub zUT*wfTRq#0=id@J=U)o@=g$w-J#_tXqM2jH*}1Kkp1#@mcvc=`m}0T~*EREZUssRd zo>%<(h3UJ5zjq$AX9~v_GpM(yt-F5u>G8?Ouf0w4|8e2H>00O4j|A8LI2y$e=JI0c zgQ$SdMKtY$WUoBYT(!>Vt14!d)lGXuP>fS zkYnG_$8;(q?xiV%lgEet+qygFIT{B{=}I#?@k_S-+QNij?g`rarp{UTe9AP1bgi9V zo?Y2$U;g9e1Ji2VgO@a3uY6)_C?`-joV5)YTx}TkJfecm^0}S z^V?IGR!J+AZJlP+xM!WA^-i-!j=ds#w)}A777o!bf3;D=ByHD}=mWoMRmE2@{hE4E zPrUV1XLi+nOI^o~wbLAgPhY$LMX3J0#ZI1B385@b9bJdji>9jPaXa7eI$UK}_0BLR zQzE)BV23kg>U#AhTn$;Eqzr+7wWsUN+ySZ-?OtYueZrrnxW{z5m& z<_^=elAB6urk<9wT^Qe*N2k1FX**H-#Cz@rFFE!TGvnS~eDj>+MpTW0zWcPBUY8vv z9A&Y6|MObVHmQvn8=jo93Y{Cee)(S6IkI-rw{AP0vua(lFu~Wmpex^f^6opXTK=Z9 zcU>&IE|>fLbLOmN>I=^O&D-+#tNZVN%rg)DE9ch8WNJ&>za)WY_grz=f3a)ge_UhN zNMvIB*eZ0$utQ%&@@IE#rpSbJCbf^P=YQ8ut2e!WxoeKh>hJ6uW;6u;3EcRkD*NWG zf<;HyMV-EWJi7m3>q4#Ol>P%zJv&bSG+>K(FBmcFsiC{kK>;?8wbmZ0C2InG9^7NN zwu@PJV{%Ud)AiXdnXmYC)I2KrAB(3gf3S_!W2N>YRWx?+fM> zFB@=4-Dmi)$MC6xv_$cunaSR*MjHH_-vk!3?P{=5y%xMCI)L@D;X=9OxJPAr3=ce1 zoOvt*&axdl_W63VflufE&!0Xm-nakRsU?#FBo*3H_un^NyN~y5_m76n(GGq|!D9JO zbiRC0v3qcap+Wbcn4|9dk7{-gE-)~pFOp2Y^xzVM`cn(uf&xEgnK_pk*q@smIJnTr z;r!g4Q3uQVLJo4wN-x;vQq?1=kj=<)%;o8!D!(ag3>Cs@jXz^Dco_=R{kVTy21qkJ h@K503-}s;XufV)jM`!D_FfcGMc)I$ztaD0e0swtas>J{R literal 1260 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_QHK z#WAE}&fB?X3m+Tsw94DQOS$Y)b2FLCQ&CF%kyFi=qnS$4+}}4a^M^0F(cAH?PATP6*q4BrQEE!)FBh$XVm;tt) ze}l#wu8vZ}oAZuEig zfA{UyzpB=G!}SIQB!;}X znE4_#QtsfNe?M;2KHPr!WTZ@i_m<;-E;Pr#f8T#TdB66&G{=QMR|;=u$p~HgY`tjo zy&wDzr~cTAE1cz6c(vw|)FI{ra-Y5ROoUnVK6@&*FbAa7on=iA?-gfx7?50dx-~tx zoBdw({XHTdPYGBQrAKmCxpKrZ(#%I%(d@ZxudB=IKFT?!j zpC2EP=XlCx>+RUV#BsKN?gZyqyL8?~B*o=ARxk+|+m}8P%WP0cwA0)zHpQs^JZqMT zP}7p1OH5nX8*HCVk6GcOtk7dHU&P6RDfQX)7=a5H?@n3q{m5a<=X<`#m6UB}U1$~= z<-c<6{fB+a-5y;&U3zKlv&lOYJp6aIpLwsDsrT7)t$^E~dx1ZhwXbe{(v=o`JVR%4 zhXW=UBN(vrIg-WA84V?)d9TlNwc@K3bXVbxv8)wEXZcA>}n{FBElk9YeVl z?ykE&eZ?L&k*y35e%>rurz)`I(zQiT-?2|&WccPBv3eI1=7#2WN9^ zyq3t=v?{^tez-En%5|RBET)ZH_UO!*oW`+=?P1)dKRuDW4Oe(pEUT!f_2F=bR4Z+t+p> zt1jDStI^*kx9sbS9IL>Y(q>aLjyy2`TO?`)5l=xI|ko|thcE9B%wx@Fznvff4N+ky!#6Yg&57il(F z{8NRKBf50uY;QrumYeK%zRDWju_3wY*6^q`?u}(WW>!Z$xs%OVG zNv&FGKV2yN+*yXWi#0;-@7kxOc7&VFzw)TD_?#@m%(q!-VZGvC5?0)9^WDsIfZ>1K z&4XK`|ztc?SU*S^xW>a;eYr!_dl#n+$>YH-xPQID{<4l6x z$vgKW&ZgL%JR`sJY=)humifd}7TM33iww)z6E4`eJpQFbz{bt};`&ThZ8Y!nxM7J(3DNCmOGEoEC69dM>ZYl|woC aAGdypmX74sA9f533=E#GelF{r5}E+@_(6C8 diff --git a/core/assets-raw/sprites/blocks/storage/core-bastion-thruster1.png b/core/assets-raw/sprites/blocks/storage/core-bastion-thruster1.png index 1e8d8f81902990dd79dc4cd13a403567fdf16bb4..aaf48c0a64eb6a1adeb3175ca15d1e52a4a25904 100644 GIT binary patch literal 864 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz>vkk#=yYvvq!F)fq{XsILO_JVcj{ImkbQd zQl2i3Ar*7p-nGq=c9dv%sITb0QMy@wl7o}SY^x_8$F|;1$nnri3P`?tbmcXP&A+zX z+CMYW)<1Qj{OSv*Gfb^F3o?Mgftx=Ae(@d%n7{u|h2_(a|Ns4)`RAt?hp&Zc-?=Lu zc7BycYZ7y01O?5vmoJ_#oyfAVDEQHjUvGcEzQ4czugup-agM9AwEND@@L+KgU3TO{ zT)fQOVC6y{r^4)`hHVZSudZ0=>8*FaYd*~(!%f^Fp2PcyprU}(N4tjY+oyLaD?PfL zw4TSf>m<&;aJ2n%bl6q!6;EL`LwL1l1RudJW#to6qZZnf7aFE-x($I+tH79*eX zE_+G8qQI)+7Zu5GEtF)M9lR7wlHce@26ME$dNY51(*HkKs_);L$kCE@RiM*hMbt|V z7N@UXZb|~P0({$ z+Y1MOMzJ`3<#U~McE@>F1(S!h9QpbBlAWN0;1n<5?W!cubxO?d>q(~wC85TEJ1Zxq z$jQHZUbV8LW5(OwgLnG=vdnpTd)JpMUtb6^Ei5W_HBtk|^2&)ly~<7sCP_Ie!TtFx nPR4${Dd(E&!KsgTe~DWM4fMTvKf literal 514 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qV6fp}V_;xdXSV4m0|NtNage(c!@6@aFBupZ z_jtNEhE&XXd)Lv6*-^yx;_@9+QiM*piHH=wiinwHQKq$MfwZ8JVRh%?CN<5~YnMcQ zes$m2XR^SL>1`%|FAF(Y|9r3CaClDqogA;@_V?y@8>=xSCm;6r5}dQ`x782t{j&cg zm<&RU|D0a^`cWa1!R4YKLW~iawl$p$IX;FpoeVlYrZt@mefOpup1x%BtMUgLPuuoK ztyT5p@AsGX+_iuA-JNm=Bo{C*eaOF5ppE0eot%AlDs|2Oq*yaC8H8E?Ns(Y=oNQR3JRdzQXJ2vl!;S_7(9z_P`U^fQ_wPjrm3_U)AjEplfWf}J~`CR>D^?%v)DFti>zopr0F`CXbN~PV diff --git a/core/assets-raw/sprites/blocks/storage/core-bastion-thruster2.png b/core/assets-raw/sprites/blocks/storage/core-bastion-thruster2.png index 9990ca0808afbf036ac41c7e06901e426f8992e9..23cee644e74c4ba0ce8fbbe20442e631bc150b03 100644 GIT binary patch literal 862 zcmeAS@N?(olHy`uVBq!ia0y~yU^v0Rz>vkk#=yYvvq!F)fq{XsILO_JVcj{ImkbQd z5}q!OAr*7p-nGq=c9dv%sITZgQMyq-$=Ru3_N^Ztilw&%ggo?;0+R0@U1=t<@z=L_ z>&;d3PNk_XbkbjZ@!c6W1_%g$e)m>B!>?bz-u`|);kdnR-ON8f#W+GGq}-FURNgPQ zk!}@*UNeiVOg^(wg3SBr@ zf|wRs9H0LD+Qp>u;_8pzA4TbeUECV5DpK->*wHELqt+cw3VtT#S!TX{J7LwYXRMt1u;Q{?%g?JCTD$h^eu~LE&MPPT0h|(-L0w zy(uYKYiE5x*_3B7hq za08p5DBuA%%!VU;VdVU}a{2Xwf6uo|INq?i{qKO}w!e+WIlq~?g&`(89I6xuyZHT| zLbfs7!b52{zqPM6{KmI^+uy{`%kI6rw#`20TFmxFx!rI3e=iB1^Ni`x&i51L3~dCI zIgVPI-=86MT;dtXu~#L2dtVb_T4?e6uim%cv9C9JyDJHFg*vG)EzHOUF}J6wFfHWD zc2yEswLJyIY(H#hyDvnAX<2FH-@M%C5HO<$Fu1soN|g#5^CJAYvIHcySiUC*S%d^ zRJV()d9D7y=k~Rw&eLzZakLydD|&KoPYZvp$Yu0WE{nJ|opW4rLBeNvla` gEPt{?QuDeK_JPIXI}h-kj0OpKy85}Sb4q9e0IM%+e*gdg literal 512 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qV6fp}V_;xdXSV4m0|NtNage(c!@6@aFBupZ zcX_%vhE&XXdv~K3v!h7s!^J-|Hgf(@;?zjW*0q}yal1?7MK{Oo8ReZ<4@{CxpPLd^ z{Ow=-OjX5#`fU>5)P$U@f4O24GQfmV|Y$&6=+l9riC%R$xfpdf5M$pg_aQ zJ0HF~GPFhU#w#&c>$d9)I#jSEr0t9``D?>u5YmE;E`vfAfwkhWm{&1auzenDckV@4OlnGKRH%Ro*H6BKCJ7{l_0jV)N3ad)F} zNoA>RMep4MGc!IqPkh5BCH?z&|GqnO6L=UUW*9Ls85oALuq32(ac~^)dCkFbAmB6y p$AJ)E7S%b-GpxV#D+}H+=hk1aOd)dRdIkmt22WQ%mvv4FO#t9#(8B-# diff --git a/core/assets-raw/sprites/blocks/storage/core-bastion.png b/core/assets-raw/sprites/blocks/storage/core-bastion.png index 67086867653b21272e917344b718a182d9064d9e..d1fe947bab289cc7bed7443893f061538a758956 100644 GIT binary patch literal 1586 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 Z|DM`RNzav``3wvU44$rjF6*2UngD0baWen_ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 1ac8ca077d..104337ba18 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -407,7 +407,6 @@ 63301=neoplasm|liquid-neoplasm-ui 63300=scuttler|unit-scuttler-ui 63299=breach|block-breach-ui -63298=core-bastion|block-core-bastion-ui 63297=plasma-bore|block-plasma-bore-ui 63296=steam-vent|block-steam-vent-ui 63295=pressure-turbine|block-pressure-turbine-ui @@ -432,7 +431,7 @@ 63276=einforced-liquid-tank|block-einforced-liquid-tank-ui 63275=reinforced-liquid-tank|block-reinforced-liquid-tank-ui 63274=reinforced-bridge-conduit|block-reinforced-bridge-conduit-ui -63273=core-aegis|block-core-aegis-ui 63272=core-citadel|block-core-citadel-ui 63271=core-acropolis|block-core-acropolis-ui 63270=heat-reactor|block-heat-reactor-ui +63269=core-bastion|block-core-bastion-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index a9c5b29ed36be08dfb11b0882702c681360af7d4..2f1b489b21a9f2cf4959b997d7f8f7f2750b97f4 100644 GIT binary patch delta 16 XcmX>sxm}WpVcSNgP_E6%TnS77F7*WY delta 28 jcmdlkd03K(Vf#j=P%dt+qT!~Bof+Psy diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 83314fe9ec..71bed3a426 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -96,7 +96,7 @@ public class Blocks implements ContentList{ //storage coreShard, coreFoundation, coreNucleus, vault, container, unloader, //storage - erekir - coreBastion, coreAegis, coreCitadel, coreAcropolis, + coreBastion, coreCitadel, coreAcropolis, //turrets duo, scatter, scorch, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, foreshadow, spectre, meltdown, segment, parallax, tsunami, @@ -1822,19 +1822,7 @@ public class Blocks implements ContentList{ researchCostMultiplier = 0.11f; }}; - //TODO remove - too small coreBastion = new CoreBlock("core-bastion"){{ - requirements(Category.effect, BuildVisibility.editorOnly, with(Items.beryllium, 1000, Items.graphite, 1000)); - - unitType = UnitTypes.evoke; - health = 3000; - itemCapacity = 3000; //TODO more or less? - size = 3; - - unitCapModifier = 10; - }}; - - coreAegis = new CoreBlock("core-aegis"){{ //TODO cost requirements(Category.effect, BuildVisibility.editorOnly, with(Items.beryllium, 2000, Items.graphite, 2000, Items.tungsten, 1000)); diff --git a/core/src/mindustry/content/Loadouts.java b/core/src/mindustry/content/Loadouts.java index d166cc43d3..2f964274c7 100644 --- a/core/src/mindustry/content/Loadouts.java +++ b/core/src/mindustry/content/Loadouts.java @@ -8,15 +8,13 @@ public class Loadouts implements ContentList{ basicShard, basicFoundation, basicNucleus, - basicBastion, - basicAegis; + basicBastion; @Override public void load(){ basicShard = Schematics.readBase64("bXNjaAB4nD2K2wqAIBiD5ymibnoRn6YnEP1BwUMoBL19FuJ2sbFvUFgYZDaJsLeQrkinN9UJHImsNzlYE7WrIUastuSbnlKx2VJJt+8IQGGKdfO/8J5yrGJSMegLg+YUIA=="); basicFoundation = Schematics.readBase64("bXNjaAB4nD1OSQ6DMBBzFhVu8BG+0X8MQyoiJTNSukj8nlCi2Adbtg/GA4OBF8oB00rvyE/9ykafqOIw58A7SWRKy1ZiShhZ5RcOLZhYS1hefQ1gRIeptH9jq/qW2lvc1d2tgWsOfVX/tOwE86AYBA=="); basicNucleus = Schematics.readBase64("bXNjaAB4nD2MUQqAIBBEJy0s6qOLdJXuYNtCgikYBd2+LNmdj308hkGHtkId7M4YFns4mk/yfB4a48602eDI+mlNznu0FMPFd0wYKCaewl8F0EOueqM+yKSLVfJrNKWnSw/FZGzEGXFG9sy/px4gEBW1"); - basicBastion = Schematics.readBase64("bXNjaAF4nGNgZmBmZmDJS8xNZWBNzMsEUtwpqcXJRZkFJZn5eQyClfmlCin5Cnn5JQqpFZnFJVwMbDmJSak5xQxM0bGMDDzJ+UWpukmJxWDVDAyMIAQkACJxFp8="); - basicAegis = Schematics.readBase64("bXNjaAF4nGNgYWBhZmDJS8xNZeDPyc/PVkhKzcjMS1GozC9l4E5JLU4uyiwoyczPY2BgYMtJTErNKWZgio5lZOBKzi9K1U1MTc8sBkoxghCQAAA85RNL"); + basicBastion = Schematics.readBase64("bXNjaAF4nGNgYWBhZmDJS8xNZWBNzMsEUtwpqcXJRZkFJZn5eQyClfmlCin5Cnn5JQqpFZnFJVwMbDmJSak5xQxM0bGMDDzJ+UWpukmJxWDVDAyMIAQkACMdFqE="); } } diff --git a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java index fe0584930e..1aa2a76d7a 100644 --- a/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/ErekirPlanetGenerator.java @@ -49,7 +49,7 @@ public class ErekirPlanetGenerator extends PlanetGenerator{ @Override public Schematic getDefaultLoadout(){ - return Loadouts.basicAegis; + return Loadouts.basicBastion; } float rawHeight(Vec3 position){ diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 41d56526fd..250d9e4921 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -196,9 +196,11 @@ public class ForceProjector extends Block{ if(buildup > 0f){ Draw.alpha(buildup / shieldHealth * 0.75f); + Draw.z(Layer.blockAdditive); Draw.blend(Blending.additive); Draw.rect(topRegion, x, y); Draw.blend(); + Draw.z(Layer.block); Draw.reset(); } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java index 1f80bb26fc..8dd7cb9d7b 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -52,9 +52,8 @@ public class LaserTurret extends PowerTurret{ if(bulletLife > 0 && bullet != null){ wasShooting = true; - tr.trns(rotation, shootLength, 0f); bullet.rotation(rotation); - bullet.set(x + tr.x, y + tr.y); + bullet.set(x + bulletOffset.x, y + bulletOffset.y); bullet.time(0f); heat = 1f; recoil = recoilAmount; @@ -106,7 +105,7 @@ public class LaserTurret extends PowerTurret{ @Override protected void bullet(BulletType type, float angle){ - bullet = type.create(this, team, x + tr.x, y + tr.y, angle); + bullet = type.create(this, team, x + bulletOffset.x, y + bulletOffset.y, angle); bulletLife = shootDuration; } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 72c0475aa2..5e02e195a5 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -30,7 +30,6 @@ public class LiquidTurret extends Turret{ shootSound = Sounds.none; smokeEffect = Fx.none; shootEffect = Fx.none; - outlinedIcon = 1; } /** Initializes accepted ammo map. Format: [liquid1, bullet1, liquid2, bullet2...] */ @@ -79,9 +78,9 @@ public class LiquidTurret extends Turret{ super.draw(); if(liquidRegion.found()){ - Drawf.liquid(liquidRegion, x + tr2.x, y + tr2.y, liquids.total() / liquidCapacity, liquids.current().color, rotation - 90); + Drawf.liquid(liquidRegion, x + recoilOffset.x, y + recoilOffset.y, liquids.total() / liquidCapacity, liquids.current().color, rotation - 90); } - if(topRegion.found()) Draw.rect(topRegion, x + tr2.x, y + tr2.y, rotation - 90); + if(topRegion.found()) Draw.rect(topRegion, x + recoilOffset.x, y + recoilOffset.y, rotation - 90); } @Override @@ -126,24 +125,6 @@ public class LiquidTurret extends Turret{ super.findTarget(); } - @Override - protected void effects(){ - BulletType type = peekAmmo(); - - Effect fshootEffect = shootEffect == Fx.none ? type.shootEffect : shootEffect; - Effect fsmokeEffect = smokeEffect == Fx.none ? type.smokeEffect : smokeEffect; - - fshootEffect.at(x + tr.x, y + tr.y, rotation, liquids.current().color); - fsmokeEffect.at(x + tr.x, y + tr.y, rotation, liquids.current().color); - shootSound.at(tile); - - if(shootShake > 0){ - Effect.shake(shootShake, shootShake, tile.build); - } - - recoil = recoilAmount; - } - @Override public BulletType useAmmo(){ if(cheating()) return ammoTypes.get(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 62183e155e..ceb1e49bd5 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -16,14 +16,15 @@ import mindustry.core.*; import mindustry.entities.*; import mindustry.entities.Units.*; import mindustry.entities.bullet.*; -import mindustry.game.*; import mindustry.game.EventType.*; +import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; import mindustry.world.blocks.*; import mindustry.world.consumers.*; +import mindustry.world.drawturret.*; import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -78,29 +79,31 @@ public class Turret extends ReloadTurret{ public Sortf unitSort = UnitSorts.closest; - protected Vec2 tr = new Vec2(); - protected Vec2 tr2 = new Vec2(); - public @Nullable String basePrefix; public @Load(value = "@-base", fallback = "block-@size") TextureRegion baseRegion; public @Load("@-heat") TextureRegion heatRegion; public float elevation = -1f; - public Cons drawer = tile -> Draw.rect(region, tile.x + tr2.x, tile.y + tr2.y, tile.rotation - 90); - public Cons heatDrawer = tile -> { - if(tile.heat <= 0.00001f) return; + public DrawTurret draw = new DrawTurret(); - Draw.color(heatColor, tile.heat); - Draw.blend(Blending.additive); - Draw.rect(heatRegion, tile.x + tr2.x, tile.y + tr2.y, tile.rotation - 90); - Draw.blend(); - Draw.color(); - }; + /** @deprecated use bulletOffset; this will always be zero. **/ + @Deprecated + protected Vec2 tr = new Vec2(); + /** @deprecated use recoilOffset; this will always be zero. **/ + @Deprecated + protected Vec2 tr2 = new Vec2(); + /** @deprecated set the draw field instead, this does nothing */ + @Deprecated + public Cons drawer = tile -> {}; + /** @deprecated set the draw field instead, this does nothing */ + @Deprecated + public Cons heatDrawer = tile -> {}; public Turret(String name){ super(name); liquidCapacity = 20f; quickRotate = false; + outlinedIcon = 1; } @Override @@ -136,6 +139,8 @@ public class Turret extends ReloadTurret{ public void load(){ super.load(); + draw.load(this); + if(basePrefix != null){ baseRegion = Core.atlas.find(basePrefix + "-block-" + size); } @@ -143,7 +148,7 @@ public class Turret extends ReloadTurret{ @Override public TextureRegion[] icons(){ - return new TextureRegion[]{baseRegion, region}; + return draw.icons(this); } public static abstract class AmmoEntry{ @@ -153,6 +158,12 @@ public class Turret extends ReloadTurret{ } public class TurretBuild extends ReloadTurretBuild implements ControlBlock{ + //TODO storing these as instance variables is bad design, but it's probably too late to change everything + /** Turret sprite offset, based on recoil. Updated every frame. */ + public Vec2 recoilOffset = new Vec2(); + /** Turret bullet position offset. Updated every frame. */ + public Vec2 bulletOffset = new Vec2(); + public Seq ammo = new Seq<>(); public int totalAmmo; public float recoil, heat, logicControlTime = -1; @@ -252,14 +263,10 @@ public class Turret extends ReloadTurret{ Draw.z(Layer.turret); - tr2.trns(rotation, -recoil); + Drawf.shadow(region, x + recoilOffset.x - elevation, y + recoilOffset.y - elevation, rotation - 90); - Drawf.shadow(region, x + tr2.x - elevation, y + tr2.y - elevation, rotation - 90); - drawer.get(this); - - if(heatRegion != Core.atlas.find("error")){ - heatDrawer.get(this); - } + draw.draw(Turret.this, this); + draw.drawHeat(Turret.this, this); } @Override @@ -274,6 +281,8 @@ public class Turret extends ReloadTurret{ unit.tile(this); unit.rotation(rotation); unit.team(team); + recoilOffset.trns(rotation, -recoil); + bulletOffset.trns(rotation, shootLength); if(logicControlTime > 0){ logicControlTime -= Time.delta; @@ -400,15 +409,14 @@ public class Turret extends ReloadTurret{ if(chargeTime > 0){ useAmmo(); - tr.trns(rotation, shootLength); - chargeBeginEffect.at(x + tr.x, y + tr.y, rotation); - chargeSound.at(x + tr.x, y + tr.y, 1); + chargeBeginEffect.at(x + bulletOffset.x, y + bulletOffset.y, rotation); + chargeSound.at(x + bulletOffset.x, y + bulletOffset.y, 1); for(int i = 0; i < chargeEffects; i++){ Time.run(Mathf.random(chargeMaxDelay), () -> { if(dead) return; - tr.trns(rotation, shootLength); - chargeEffect.at(x + tr.x, y + tr.y, rotation); + bulletOffset.trns(rotation, shootLength); + chargeEffect.at(x + bulletOffset.x, y + bulletOffset.y, rotation); }); } @@ -416,7 +424,7 @@ public class Turret extends ReloadTurret{ Time.run(chargeTime, () -> { if(dead) return; - tr.trns(rotation, shootLength); + bulletOffset.trns(rotation, shootLength); recoil = recoilAmount; heat = 1f; bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy)); @@ -430,7 +438,7 @@ public class Turret extends ReloadTurret{ int ii = i; Time.run(burstSpacing * i, () -> { if(dead || !hasAmmo()) return; - tr.trns(rotation, shootLength, Mathf.range(xRand)); + bulletOffset.trns(rotation, shootLength, Mathf.range(xRand)); bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy) + (ii - (int)(shots / 2f)) * spread); effects(); useAmmo(); @@ -445,10 +453,10 @@ public class Turret extends ReloadTurret{ if(alternate){ float i = (shotCounter % shots) - (shots-1)/2f; - tr.trns(rotation - 90, spread * i + Mathf.range(xRand), shootLength); + bulletOffset.trns(rotation - 90, spread * i + Mathf.range(xRand), shootLength); bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy)); }else{ - tr.trns(rotation, shootLength, Mathf.range(xRand)); + bulletOffset.trns(rotation, shootLength, Mathf.range(xRand)); for(int i = 0; i < shots; i++){ bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy) + (i - (int)(shots / 2f)) * spread); @@ -465,18 +473,18 @@ public class Turret extends ReloadTurret{ } protected void bullet(BulletType type, float angle){ - float lifeScl = type.scaleVelocity ? Mathf.clamp(Mathf.dst(x + tr.x, y + tr.y, targetPos.x, targetPos.y) / type.range(), minRange / type.range(), range / type.range()) : 1f; + float lifeScl = type.scaleVelocity ? Mathf.clamp(Mathf.dst(x + bulletOffset.x, y + bulletOffset.y, targetPos.x, targetPos.y) / type.range(), minRange / type.range(), range / type.range()) : 1f; - type.create(this, team, x + tr.x, y + tr.y, angle, 1f + Mathf.range(velocityInaccuracy), lifeScl); + type.create(this, team, x + bulletOffset.x, y + bulletOffset.y, angle, 1f + Mathf.range(velocityInaccuracy), lifeScl); } protected void effects(){ Effect fshootEffect = shootEffect == Fx.none ? peekAmmo().shootEffect : shootEffect; Effect fsmokeEffect = smokeEffect == Fx.none ? peekAmmo().smokeEffect : smokeEffect; - fshootEffect.at(x + tr.x, y + tr.y, rotation); - fsmokeEffect.at(x + tr.x, y + tr.y, rotation); - shootSound.at(x + tr.x, y + tr.y, Mathf.random(0.9f, 1.1f)); + fshootEffect.at(x + bulletOffset.x, y + bulletOffset.y, rotation); + fsmokeEffect.at(x + bulletOffset.x, y + bulletOffset.y, rotation); + shootSound.at(x + bulletOffset.x, y + bulletOffset.y, Mathf.random(0.9f, 1.1f)); if(shootShake > 0){ Effect.shake(shootShake, shootShake, this); diff --git a/core/src/mindustry/world/draw/DrawBlock.java b/core/src/mindustry/world/draw/DrawBlock.java index 4c186f137b..2961cab669 100644 --- a/core/src/mindustry/world/draw/DrawBlock.java +++ b/core/src/mindustry/world/draw/DrawBlock.java @@ -5,7 +5,7 @@ import arc.math.*; import mindustry.world.*; import mindustry.world.blocks.production.GenericCrafter.*; -/** An implementation of custom rendering behavior for a block. +/** An implementation of custom rendering behavior for a crafter block. * This is used mostly for mods. */ public class DrawBlock{ protected static final Rand rand = new Rand(); diff --git a/core/src/mindustry/world/drawturret/DrawTurret.java b/core/src/mindustry/world/drawturret/DrawTurret.java new file mode 100644 index 0000000000..079bef25f7 --- /dev/null +++ b/core/src/mindustry/world/drawturret/DrawTurret.java @@ -0,0 +1,37 @@ +package mindustry.world.drawturret; + +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import mindustry.world.blocks.defense.turrets.*; +import mindustry.world.blocks.defense.turrets.Turret.*; + +/** Extend to implement custom drawing behavior for a turret. */ +public class DrawTurret{ + protected static final Rand rand = new Rand(); + + /** Draws the block. */ + public void draw(Turret block, TurretBuild build){ + Draw.rect(block.region, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.rotation - 90); + } + + public void drawHeat(Turret block, TurretBuild build){ + if(build.heat <= 0.00001f || !block.heatRegion.found()) return; + + Draw.color(block.heatColor, build.heat); + Draw.blend(Blending.additive); + Draw.rect(block.heatRegion, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.rotation - 90); + Draw.blend(); + Draw.color(); + } + + /** Load any relevant texture regions. */ + public void load(Turret block){ + + } + + /** @return the generated icons to be used for this block. */ + public TextureRegion[] icons(Turret block){ + return new TextureRegion[]{block.baseRegion, block.region}; + } +}