From 79dcfefd69d49a68e775a631bf89aee280245819 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 9 Feb 2022 23:27:04 -0500 Subject: [PATCH] More payload block recolors / Bugfixes --- .../blocks/payload/payload-loader-in.png | Bin 0 -> 599 bytes .../blocks/payload/payload-loader-out.png | Bin 0 -> 565 bytes .../blocks/payload/payload-loader-top.png | Bin 1032 -> 1025 bytes .../sprites/blocks/payload/payload-loader.png | Bin 1412 -> 1439 bytes .../blocks/payload/payload-unloader-in.png | Bin 0 -> 599 bytes .../blocks/payload/payload-unloader-out.png | Bin 0 -> 565 bytes .../blocks/payload/payload-unloader-top.png | Bin 1033 -> 1020 bytes .../blocks/payload/payload-unloader.png | Bin 1417 -> 1445 bytes .../blocks/turrets/afflict/afflict.png | Bin 1879 -> 2076 bytes core/src/mindustry/ai/ControlPathfinder.java | 5 ++--- core/src/mindustry/ai/types/MissileAI.java | 5 +++-- core/src/mindustry/content/Blocks.java | 18 +++++++++++++++--- core/src/mindustry/content/UnitTypes.java | 4 ++++ core/src/mindustry/entities/Units.java | 6 ++++-- core/src/mindustry/input/DesktopInput.java | 7 ++++++- 15 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/payload/payload-loader-in.png create mode 100644 core/assets-raw/sprites/blocks/payload/payload-loader-out.png create mode 100644 core/assets-raw/sprites/blocks/payload/payload-unloader-in.png create mode 100644 core/assets-raw/sprites/blocks/payload/payload-unloader-out.png diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader-in.png b/core/assets-raw/sprites/blocks/payload/payload-loader-in.png new file mode 100644 index 0000000000000000000000000000000000000000..f8427f0ba98993527d66ff96c50fbbe399178ba1 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader-out.png b/core/assets-raw/sprites/blocks/payload/payload-loader-out.png new file mode 100644 index 0000000000000000000000000000000000000000..afb61bf138431a4132364abfe10ab922cac804a9 GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader-top.png b/core/assets-raw/sprites/blocks/payload/payload-loader-top.png index 2207273e024adb89929c78a5dd111eb6f47be8fd..4c737ab093ff652f9d5effe3d77d02d023a7d688 100644 GIT binary patch delta 968 zcmV;(12_DL2!RNYF@L*BL_t(|ob8=GYg9oLhTq-Bv;n~;5Rgb9U?u(lTTLTkw~ft` zDx|ebXDg{BO`3EfHfrk+5Gx@d1|eV>u#MGPBqxrO`8e}&H#3{}scy2lm)ZB3k9!IC z%xHUOceb&y1|M6~$;kU5iSlOua2EP}eEj1Zj*gDAFF^cgvVR)`043B%o7q?nD4`xH zS&hvfD50FxjK=maC?TJmY_13ZC?SX3Oq>D$N=Tt3ixB`ke)7zFfwg=0!RG`&CE;&P zC!@>oC?TEF@PUgFAW(vy8sP($0DuxS)CwPP2mmM{M9uI4j{txYT+|L92nYZu!DNW= zfxvSB0DSuR&VPGi>^b4{-k*hePAK^)GlMtGAViHo;zu+2R6Iv6_PFL~eXr6LSXth@JYKuAj)$ucuAKA!=YJ~zz~1ZKrboi|&h89Aa5M|{ zNXWVK%ML>%nBfby1PNbgRf2>sq)5oU?Jf#pIyvyK2^SLV@P*bS*x?Hr2_@@WaR?y^ zOSeyg=e8oj7rrp$%|+58>|+1$g|h*%@O#2Hifi22RqKJ~NYI4eO79n9qX77SB-FaC zt{TF0ayu~VF?>NQq2@D9@f2j@n~qFc4Ij|8t@Z=uAYu4=Qp@3+%(MN21!8}RUcwi8 zZ$E(ZFQJ)NTc!8*6O(WP7?XYi27l5yy}#l!kM{E=JrDD0KVMUI(DiGou_4>Kgn75W z>YMVR$|*w2Yl5b2wJU$ISjPoj7wd5K{GKGFhA-5RP&@_srk%6X)zV8hgRfvyjp?XJ zKy1zrNob|_1L3v|T@7-OqJ1{@bktJ#CiYZhb|7Ch$ZILu7b;unLnO2szJDMRT%*^P za4lskebsX{5;O&!T0m0`(pNoq(88^u(#1enLNDP9v1*XDO7~YO-fiNN&|CO|OTw?; z9{|+bKcTpMy$e%9ui*=(1PNcLAtCw)so@JN%bVSYFH9!~Gdp~tR6_O^CNV;l)_Y{A z?Od`p@rki$;R{1ZNZ!UO#(koOFVvQhw2@nkMGs%7DM7uJVT_v+zEDeoYBSFmH!Xaj zhJ@&LwlQvM_(G|K5yLO1L_+re0~r24N_HH~62S1Uk}Dxu0K@l_Bca+xZseR)32Ffh qUr&kzl>mmHj#ffc0K?BmBjGO$!BHMmpwQa@0000&=H8ph@GzL)Zj`Gi)c?7rt@*;<8Ei#_fgw!?`HOW=FGh} z%{?>P-r1Yoy?+lr*4I`?-Zx2j8Lhp|c55M8(_aE6GK!5ybvKs>cCDcco*;rms zLOoKl8k;{*LOH1!jqP7hLOwa!To3?ILJql^I0XQdkU~ioBLLWVwdwtUm6av%KEY2( z`0Hz{qx0}6A)V6jfwKw_C_zt+@BvEzKnWUZg%3Cc0F)4-X83?d06+;YYKIR51OSv^ zGDP@5;64BVwtrr4dJl}Tt9Y%Z)=f_2MIIR@#+ta=du{dg;zG9xpz+aDU9#g*O0zm(xkpm9V|DHvsF zkc5X%Zv>BRMS?GUVaSV%q?53VoxK;%0mQ=Z311c0xU#D@1IhH-oQXQ;p@Q zNI-1O4@qcc_5w|8VQ<)PA#D62I=dbJ80w9Q0rnKETNb1g;+PpTCMx5H19TXN$4$n!6jkg z_7Q-3`zI8)uXkZe=rw%7lpx^?H6%p;AT@m9q#lu8KR2jqqi^gr`W zLf@ry$HA;kd}4&!-1p27d+L8AZ(|kXs)jGrmXNfOTa2q7zED$wdMm>i*Cl+RmIT#i zo-wXl_(BZ{(d}$wT-Wf0QVAo5UrvdH?EeQa{C||}IG81X;a?wT;}! xDX9|F0vNuY6bUK;3_l&Mgs1?9pN~euUn8PsW2k3;(f|Me07*qoM6LruV1mQ&)cXJc diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader.png b/core/assets-raw/sprites/blocks/payload/payload-loader.png index 19762a9ef46e49d5e71e36ca20ef2fa6b60cd640..0262be6c74c274806339415c950dd06ace61545b 100644 GIT binary patch delta 1407 zcmV-_1%Ud53!e*+F@IS}L_t(|ob6prY8x>Welab0oBcpGE`fpGq20FGm0Ti$;v@73 z-L#kRqMPi~I~W4S-UPhwHqb@7aAn40Y4m<&X{-+di8G_o`#wugPkI_%e4T%LZQB`G z;QHm3bp2|&FsVl$In`^jSuf$~X=742wc=D_ILL{70DuVqz<;@jkQ?~`{{;ZZON1Pd zs?L+{A60}MQr7iN|AWnX8NG??v{%zbl73zS3Hh-vuaCEh=Q{C&&JkQrSOQ2MI7Udg zIO>9^55{y^T{M?}qt|TzJaDU&{Moa2@43|h06`1TszAxmuw5(wzz$Gl_)y>ew__gZFIK z%R!&8Sudjkpqy~1khYyc+s+0n;U~WgVCo)f3D_2b9)AV(MdS*;rAon`E9q)QAgLm9s`Rq z-L;gmF;I2pCHD+rq7^A}$ajbtWkHmLNG%brUv76TKq`WSe20)x z7DQK z?=ZA0LMV--q&%M#2z_y5X*ld*XzuwvDIw`KM1k1#%Plm`uY=EWif}E^ce>IpTQv{^ zphcmj!NN9m0RYA+f|X4s0sxFl1WQ}Y1OOO^2!GZ#OsvuX9ZD9#y6&s#V%Gw!MW{H2 zi=+0#(2xkL>D&G9b?lErm&-1HK9GDsjeg^x_9kQ}Ttx_j)0MMEK@<^6j*LmGa7;hS z9)@B>uq3}}t`2^zfLgE@3}Qraz>o;m?8$utty28Q6$ z0)M|^1fURGk_bfzz#+605sDCC%%}pK7*&81qX+?V$lzv=%8Zy)T@7mbgPBUWef2B^|qJPYx zvN7nMB%-oM?CyRpx*s5HjAT8*qD-wa_LFg1-Ht?rm@yWqi59|AvEL=B1&#<L*GdHH7jEc!uK?Vm znzYZC)L3)SUbo=d7`jh264pGMUXwV@vNUZ3P!u3n@-52Lv{gj_?Qca1(0H<0EWkOE z@1SA3XfkfIUY`AV!T_@KCD|=NdseVyNVs4LP{}_AmlJOnWJPcZY4DQ$UKrl`ek0jF z;S$Jqu&V23y*vuYk_b=|`3|W>Fc-l3SXs-mQ;1;u^6ret=RU()gnxkKo^TT)I79#d N002ovPDHLkV1hjFjNkwO delta 1380 zcmV-q1)KVx3xo@hF@HWuL_t(|ob8>vZqz^&hEG;0(xsu;Vx?@cE3J_70C@=zFOe>U zN8l9@4N6UqprfPP2SBnSVR4ZtDAH_~E)>fc$LqPA+jz#Fze{9~=lq}N>Y1IRcQ@}J z=F0_W==Amib^UI$Rmn$JDdlTcRWkJe*gf| zf{=n@<$2crqd?dzW?qlG|EQ|kdlR+M-fgx~>UoYh=KEgWKHp|N*RdZoMNvH=0pL7v zjN*84Pz7Nh98zVqb$|E6d(FxBU(_r`fA-U-D{6KCfKdXZGLW+*VrK&Ym?i|Nm_+~p z$U?ZkI}=MwBY#cFSj7MUqzfTc^8qXXunjBsKAR+rlP*ov7;R%GYYD(UDD?W1C%9e) z$3X18p?Sl4;~Ka+tDw*aVKWp1f|mJ4p)vbr4ZP!k`EtP?bk*O!9{g{$=BMG3MEa}s zx$~Z?s-0~@Rn=YqL5;92k@<1~^X0;s39NA`DJ1W`MT5 zxGrISZhzu}HJ@giDu@bUislGirt+K@iViNu0TqGH* z=ty`95Ts)ip9>l@1dZ6l0RW5>f>um3iFu$tjeiM(RxG>Cc3%RtAQahU#!*c-)CQqF z;3|FpFtxq(4OmfaKpFk|g{@7{jc|cr7o{pE^@2hmjA>*X5(~8*B~L}T_It%JzuPm> zex~ay7^f4%nhV-(woreL|EBjDv09%;fpGX-UYaTcF-^Jp)svC^cd*(E6@PD!u@#R)cMnpBC;1yLaQg3?%=OG)$D^B3rQd_n^V`5kEtgdx8j zW1f9^edYa`X3E(DC;-NMDF`WixDUxgI~E%R^FJ(vU;tgyxe!t?-^i7hz8Ja?x~5|w z1Oc#_EnOX@CRg4K1e@8R5RP8HdVl@kx*#MW%F%|}C!5ANIW^=3WSt)nN)da&Lkx4Y zfrZBGyUq##+n9uADCU{IS`e@=oa_2t0Mw(Jq|cX>m9s^MnC-=Sz}HfL-*tkvWUw z1qnbg|4>v*5(!GJ6ZfSk-XiUmO(fcCMn mnrX*?pb8)*^Qq6!hVU2LoTxsNkh^980000U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader-out.png b/core/assets-raw/sprites/blocks/payload/payload-unloader-out.png new file mode 100644 index 0000000000000000000000000000000000000000..afb61bf138431a4132364abfe10ab922cac804a9 GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader-top.png b/core/assets-raw/sprites/blocks/payload/payload-unloader-top.png index 34ec963e54056d923cfcd0219b668bdd4ad21f82..1590a12792f1c0551e1230683cc8057dc5e85b2a 100644 GIT binary patch delta 963 zcmV;!13dhR2>b_-F@Ls6L_t(|ob8=GPgFq^hTq-B%7OwzV+RezD+viw z*}}F|YGR@!cD9!K7ffs+G|<_YP*_{71soWM`8e}&mzm{#D!%US?EB1_dvC}+GuqkR zpRKR2!pGKRbL9OciSqIA%PjQ!@!9DSPEO9UUx4`0WH$x?N`I)2HnXvOK?(Ip$!ctV zLkZ=iW;C{cKneNeWOG9RKnXeIX5th8P(lhNS&RVS+4C3P7g$|;4BjXBDG7gTvN^g6 zj}p=;4Ij9y0D%(p)CeE21OSwvp;q{SLjXVtA!>#Xcmx2H;G%Z;KtKRM2_{2?4+QQ5 z0O0$#uigV=_kRhqqrHW>Pbm2;v5BafrKy$h>gnnA8$6zNT?uCRpMI<*9jjRd)Zu6) znBiZ&Nv9HAGhZt~y96f%6O-`nrN2^plMq^VViHo$f5CHrP3W93Svtr0ufN`7dpak? z#_FnaA@$-TYgXEoaImp*_4R`%_p$u&-i>2kf4+FD_kVBqo34bN-TfJWU^NSNCFETB zWrraW%&H}MCEL1$d5^#9lk%a? zDMHKV1kKoLcm86tj!U|3*5R7@JxNFnU#KCWcnR_?JCmjJ(wA-qU&E#v%TbYl*qR@b z(8}xw!ebe_8{{BO`)usxsHN~t?4`(@K)!B}x6-sP)V9)xNN6>De?cU;s@IlqD{U)% z-E%b(G!30vK+_G<*FAU8#;u{&#Xwj>FX0QZZjiNF_g87&ZQ_#9Tlj)Y!keGJ0o2<+ zp}2j$3sXX`;R~h&316roA^HcY;R^>FE8T}L98b4rcKAZ6gzPO$VuU)a_sCG&xnynP z6JycB7lx3Kyp2_ieMJpls4XFBBexif9==dhf_f{%7O9DxPE5G^f8D6pZG3$R8L z65}1f-hnYOL252QTN^D*xBv-_7ABftLSb#S7VyD1J3rt2oMi^yr&?If?wt3TpL0Ua zH>2IX{psy{ci>}VeQo4@lSFy{@$)qF{`lzVJAVK8mHh$4kAEh+F#u3PeYBa4J zSwJ0*R)QJ+`ImGm!PWD%60}orQZO+I&sV3A!Ypwt^qcoHDUGm04G2H zdXMdCO^CJCHOht5i;t{cX^(`>g_HBww;tcb;@ulF$A7##cmM!+vH7g&k+8eBKLrpR z&4N7=a<2Tc!w?B(_<}7#!WUYVAmIxs5^^uQi-I_uYU)DCj3@- zzR-L70i2$MW?pTT-rG+IA%qY@2qA! z+RumdJj|>8d`#6r*N>^jhHUE+=H33PPs)cXr+)}7uL+vA)vo--VjX96U97{^^Lvtz z8op3NLh%&jn|4-@4@y6}8GHqsYD`B(0%CK1NJ1;U9|*T)=xUII6z#LIr=ym_H?gN8 zvjh36L0(GHzEIgpA0naE@CA|J8ojoJODS9FtDdWopeg9o0-9=&zUsMy7H$odE(XF9 zdVdLDh*g8ERl2`Q@op2BgxP3`c7QVGHPfZXtb{(HVj=v+#79L(CpCq}5uea{TBr%v)VRxz$>_(E+7 zNgKJvxa#2xH6^IGGK_Iu!WU{uP;KTJ<6pXkFVv6_-Oe_~bq!xAl`vxX<&;Rs{(k_& zzo2Bt!7Kp`f0kSc$pRR@pBxF*HgY4Uq)Jc=VEB4cB&Y;1{B*Puq5>FxJ{k%C08j#C U=LGtjT>t<807*qoM6N<$f+fb#?f?J) diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader.png b/core/assets-raw/sprites/blocks/payload/payload-unloader.png index 2511a0db65fb117fb5188631e06109a6e755ef18..fb55b6eb6f398d11bda6ace15ef7dbd276f4a1a6 100644 GIT binary patch delta 1413 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 delta 1851 zcmV-B2gLZC5Z4ZnF@F(BL_t(|ob8=4a@;r&MZY)lL8MSe*l06bnJ?hbk;_L=-~+fE zIou0u=G|-~A3>pX0N=t6w%}sTl3+K`zq^6KuTs^NW(aimee(*f}5k1^Yh(o_I=7&IFM(*WRU%uEnW0YHQyvp_%x;Qfb(AIu4xNF$hiv+Gtw z1z?*1Bbf|)A%7zVcHOq30k9W%mZ{sK=cmVXmv`QEqX3Z2=sj(X&j!JsST!{VU^Me< z|H~#uZA}3f)qKf&S!7*fGXS!he{*{mvMp1VwKf4@M)NJ(V92WG-2lvNKBFy5S=7D@ zfNL`ps_tAO7X_d(?I<9)Az@c+mtvPlvsQs%_6SU(yFN zw==bRq6WZX&u>jM+I&f0jNGJZ@h0qUpf=$w=1cmt%#E$k+riSrd(6L_+^G%bF5f$w z7_xvM(tIGndVsS6Sejq72f+~-ObDXQ2ND1Pa0+o|+}7~3OFYIDaR&2&Bmh`TYS_)~ zo%s5Ggn#=4Et(F1wJKPrsQ_53g7umPfEHs~R|L%j!4v?rn!op&*=I(%17LkqrPuu0 z{}_GO6mi2Tx_bAu=&$1!76n~?(lv99Zpx)+dxAB62VLm_{1F!-v%Csz- z9SgIT)IlIC@J!|xv0`HHNc5`!>jW~IUt}E{+kC)jO`ugGnawYY`3W546;F`_v?JEj`np6NR^ZWbE27wrWkCfjYT z+9`^zi$+7-4rZFqYA?f>K%(>j+<*E1<6G8dG1`58dURRW->cLBy#4m{>ve(P%%s|$ zCo#D8nX|pRY`X<^n?pvK0$@q}Ug3IvzD2Wl_du{0qa_5^M-}rUfJK0{f`1*gZ)Lt@ zo1?yJxm!TMIHgcd0X>0A3U%4OwfT~5FZ-0_+yen?JQ4nQ_{Z-rf4$ZesI<>AU(!bD zTVu{P$8GL4P5*fK$L}wj_71lBlD1kd_uhVcN?|^b;PLPx%SES*Ti2FtN^>3V@$e%> zK#*0L%m)(A19(Dk|HXH*CVwN~=>PzH3bi%f1A>g^0|@}o{JyW1_6%o2(E7W?9tsBl z@GV5mXwTC@2J?Xv06u?uc;OX@M?oY8dqCi6{+WlTM}S!%&=|{vAd~rk@D$()0Yfc@ zj&LitCaGuQF~F!0^cXoR1RAeYgTT=surP2m2(%uhxC&s%(zwwe(0^!302qeN3PCsk zS%2Yc)HbyW2LQ-l-0bo7C%SvtlNG3qC6+0>(&&eX!BS6&rH|zTW81k-> zDFE5%-pb}pj8&;7airuHXrB& z0BDCmQkbG_5LlXDbeW@v`G5fcfF1%(VT!Uqz%ak4;2`f-UlfU{>>iK>+~#Aeh;FU|;|Mzj=Z)jWlXLFgO4J4}xnjAD93D pz#f8YF@I@kX=!O`X=&+7^%KLh-A$ag=nnt@002ovPDHLkV1nY)dNcq4 diff --git a/core/src/mindustry/ai/ControlPathfinder.java b/core/src/mindustry/ai/ControlPathfinder.java index cc0d09d66e..c6e1c5aa86 100644 --- a/core/src/mindustry/ai/ControlPathfinder.java +++ b/core/src/mindustry/ai/ControlPathfinder.java @@ -16,10 +16,9 @@ import mindustry.world.*; import static mindustry.Vars.*; import static mindustry.ai.Pathfinder.*; -//TODO I'm sure this class has countless problems public class ControlPathfinder{ private static final long maxUpdate = Time.millisToNanos(20); - private static final int updateFPS = 50; + private static final int updateFPS = 60; private static final int updateInterval = 1000 / updateFPS; public static boolean showDebug = false; @@ -202,6 +201,7 @@ public class ControlPathfinder{ for(int i = len - 1; i >= idx; i--){ Tile tile = tile(items[i]); float dst = unit.dst2(tile); + //TODO maybe put this on a timer since raycasts can be expensive? if(dst < minDst && !permissiveRaycast(pathType, tileX, tileY, tile.x, tile.y)){ req.pathIndex = Math.max(dst <= range * range ? i + 1 : i, req.pathIndex); minDst = Math.min(dst, minDst); @@ -401,7 +401,6 @@ public class ControlPathfinder{ } } - //TODO each one of these could run in its own thread. static class PathRequest{ final PathfindThread thread; diff --git a/core/src/mindustry/ai/types/MissileAI.java b/core/src/mindustry/ai/types/MissileAI.java index 80ceee9f93..d1d6bbc962 100644 --- a/core/src/mindustry/ai/types/MissileAI.java +++ b/core/src/mindustry/ai/types/MissileAI.java @@ -29,7 +29,8 @@ public class MissileAI extends AIController{ } @Override - public void updateTargeting(){ - //no + public boolean retarget(){ + //more frequent retarget due to high speed. TODO won't this lag? + return timer.get(timerTarget, 10f); } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 93dfbe413f..6f944bff4f 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -145,7 +145,7 @@ public class Blocks{ droneCenter, //payloads - payloadConveyor, payloadRouter, reinforcedPayloadConveyor, reinforcedPayloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, + payloadConveyor, payloadRouter, reinforcedPayloadConveyor, reinforcedPayloadRouter, payloadMassDriver, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, //logic @@ -3575,6 +3575,18 @@ public class Blocks{ canOverdrive = false; }}; + //TODO + if(false) + payloadMassDriver = new PayloadMassDriver("payload-mass-driver"){{ + requirements(Category.units, with(Items.tungsten, 120, Items.silicon, 120, Items.oxide, 60)); + size = 3; + reloadTime = 150f; + chargeTime = 120f; + range = 300f; + maxPayloadSize = 2.5f; + consumes.power(3f); + }}; + payloadPropulsionTower = new PayloadMassDriver("payload-propulsion-tower"){{ requirements(Category.units, with(Items.thorium, 300, Items.silicon, 200, Items.plastanium, 200, Items.phaseFabric, 50)); size = 5; @@ -3623,14 +3635,14 @@ public class Blocks{ }}; payloadLoader = new PayloadLoader("payload-loader"){{ - requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.copper, 100)); + requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.tungsten, 80)); hasPower = true; consumes.power(2f); size = 3; }}; payloadUnloader = new PayloadUnloader("payload-unloader"){{ - requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.copper, 100)); + requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.oxide, 30)); hasPower = true; consumes.power(2f); size = 3; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 2086bf09bb..197996422a 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -3130,6 +3130,7 @@ public class UnitTypes{ isCounted = false; envDisabled = 0; + targetPriority = -2; lowAltitude = false; mineWalls = true; mineFloor = false; @@ -3186,6 +3187,7 @@ public class UnitTypes{ isCounted = false; envDisabled = 0; + targetPriority = -2; lowAltitude = false; mineWalls = true; mineFloor = false; @@ -3254,6 +3256,8 @@ public class UnitTypes{ isCounted = false; envDisabled = 0; + ; + lowAltitude = false; mineWalls = true; mineFloor = false; diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index e51c95b13e..095c380c86 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -271,14 +271,16 @@ public class Units{ result = null; cdist = 0f; + cpriority = -99999f; nearbyEnemies(team, x - range, y - range, range*2f, range*2f, e -> { if(e.dead() || !predicate.get(e) || e.team == Team.derelict || !e.type.targetable) return; float dst2 = e.dst2(x, y) - (e.hitSize * e.hitSize); - if(dst2 < range*range && (result == null || dst2 < cdist)){ + if(dst2 < range*range && (result == null || dst2 < cdist || e.type.targetPriority > cpriority) && e.type.targetPriority >= cpriority){ result = e; cdist = dst2; + cpriority = e.type.targetPriority; } }); @@ -297,7 +299,7 @@ public class Units{ if(e.dead() || !predicate.get(e) || e.team == Team.derelict || !e.within(x, y, range + e.hitSize/2f) || !e.type.targetable) return; float cost = sort.cost(e, x, y); - if((result == null || cost < cdist) && e.type.targetPriority >= cpriority){ + if((result == null || cost < cdist || e.type.targetPriority > cpriority) && e.type.targetPriority >= cpriority){ result = e; cdist = cost; cpriority = e.type.targetPriority; diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 80803cff07..07ab619cbc 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -124,8 +124,13 @@ public class DesktopInput extends InputHandler{ Position lineDest = ai.attackTarget != null ? ai.attackTarget : ai.targetPos; Tmp.v1.set(lineDest).sub(unit).setLength(unit.hitSize / 2f); + Tmp.v2.set(Tmp.v1).scl(-1f).setLength(3.5f); - Drawf.line(Pal.accent, unit.x + Tmp.v1.x, unit.y + Tmp.v1.y, lineDest.getX(), lineDest.getY()); + Drawf.line(Pal.accent, unit.x + Tmp.v1.x, unit.y + Tmp.v1.y, lineDest.getX() + Tmp.v2.x, lineDest.getY() + Tmp.v2.y); + + if(ai.attackTarget == null){ + Drawf.square(lineDest.getX(), lineDest.getY(), 3.5f); + } } Drawf.square(unit.x, unit.y, unit.hitSize / 1.4f + 1f);