From 271e19f63fc86ad3855b8684975892e9bb2cb4d2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 7 Feb 2022 14:24:02 -0500 Subject: [PATCH] Bugfixes / Beam link for bases --- .../sprites/blocks/power/beam-link-glow.png | Bin 0 -> 11446 bytes .../sprites/blocks/power/beam-link.png | Bin 0 -> 3458 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3976 -> 3987 bytes core/src/mindustry/content/Blocks.java | 15 ++++-- .../world/blocks/power/LongPowerNode.java | 48 ++++++++++++++++++ .../world/blocks/power/PowerNode.java | 41 ++++++++++----- .../mindustry/world/meta/BuildVisibility.java | 2 +- 8 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/power/beam-link-glow.png create mode 100644 core/assets-raw/sprites/blocks/power/beam-link.png create mode 100644 core/src/mindustry/world/blocks/power/LongPowerNode.java diff --git a/core/assets-raw/sprites/blocks/power/beam-link-glow.png b/core/assets-raw/sprites/blocks/power/beam-link-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..6777c9a2228e7de22882473e67b918847f673e2d GIT binary patch literal 11446 zcmV;nEJ@ReP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=NIk|Ze(MgLjFEPQpzsoWKk4jz?&o_YnU9b8ke`Cudfb#& z^}VX&Daf7+uPV>q{Ox%6bN+T8CKM}8VWSk|N+J3CT^|~x^BYsY2&;>QQ0 zzkvB-F-H(TeA>o^ErHgZ7oiIK^C^(%@0hoxr1!Y140bfFrP=ePOH3aNf0jQ&SOgRn^ z2qJN!WXvg*=rq=N_U0W8cWsnd;+ZBl0feNI6l_}RfR(f0Kbk8()Fnw4ks>P9Nt0eu z$wf*jT27Mdnl!6uQPrwVdrdW0sikVIwbkBYOXNUlrD?0JwcexaY}Ap}S>Kr%aio!l zj52i8(MC7i$FhkPQ>)gj&p6X0P0TWN*4buX!7Vby%1c&Ry6S4HZ+va1oww|=b=Tc? zf1&n7^~?1OsD&qL@gjBB=?gVxo$8y2aMFn!%s?#W0OEQOz@g*8%-4`}Jjfl)e2WBy zM3j_+jho>h284NqC_B8c`-a?4;pU|N6mIcH$hiaEzk!?sy05r>2eoD zn3n9RYpg9gEXfMm;tGos<-9a(OIOk+!2CY>PDUR(B4Lq~0D=VHW9@%ubbs<7#UXi;5+=z7 zqiIZYw{vpNZc;`%%H!Adp?oGoa;lD9drz%|x{6q?wOg8Cl!>p@!I5CGlDA=p4eo1H zn}QRkFp>r&IlO>VJjiLmVnsEd}VZVvtS!{-5Uw$HIH)7jn^lnEG z2h2P9NmTdM9&yoGAgzZkfP_O3*E!h6xA5y(K++BAGYlJ`uXr3T0wiN> zUl$v!EZCevyC%x$DNkg|5^^;qBK*xagwRx%(RT?6IITHJf@^|D$KupV(!o!U?pI&< zI$A3!L}x_QP?#4jfFIcJm{Lm-yi@n?N5OeKiD2iro4U}=m$k42Y=}bRd0hf6#39{B z`ac_g3;HeSx1isG{;vf=TkC*(F8DCK;{11Do{~*^g(AY5C{Qqk)G4lw2If<>O<>N9RfoVXrmRKFOsl12d?BY)a9grs4$?VrO*C5QMnC6h; z-3Bad!Y_-Zr7!+cA$qz)Jav8qNF0@x!DO$s2TWF{J5bO-RLF8pz0Euo5FdZLF4uh-qXoUM<3DQ&obe8 z+8b>F6gUN_2@oAlt){W~S?H)H{oe6xg%VfTYksg?tu0q)2(RP5vuLvdf5bR?wV2nU zgW=dlk3@&J6Rn)UfqdTyKY(u2Ulce99a?p?!bzX*aoQ6PZXvd)+j*Fi7PJ zv(eu+cAr4(6bD{(4h4gQSc#oxcVJMO&SM24hThM1C^+sQ>}#M$S%WqKmRQLcgO+a4 zWw~(M3x9Us7lhJ%U`Jj)1Rc*T3YM~=-UP^u3MV2 z2VCv|{ZEE$%B~coDHIC8`x$*x4v5?W-K$=2&3&9c02%5kbpsq60>eehUh{c(S9@>& zo@w^?14Bx3l-6eMs{jB124YJ`L;z?2XaHzctn>i@000SaNLh0L01FcU01FcV0GgZ_ z00007bV*G`2j&6?6ATbUynCkr03ZNKL_t(|+U;FwlhequJ=(mqdjoFM>`e>=^J)J7 zf8ov&&_J^dz1x$rpFe-bw{PEYd3lNJ>+9Neb91w}#^W(2lL;o13DPvhY&Jud zWytd!MNyzA3IIUl0CwQUal8O`Fc>VrWgrg^4{_(t9o)Tp7ytRse{lc)eH39DbG&@{68G=lM;ynS zNUa4x*kRI|7L7GlX#8zkV|N*AC25Z1c%dVM(4u_k9%RgBfEQ#RBDyqu@LnSQqNUMTTY%q40`z+); zR|XjXj*pMAzrT;+aEM;7hbW4c3@-&YiXy~rLuYUg4h|OJK6&y4CnqO(`SK-Ry?V8Q zfokr30f4BQF#c&xTwYy8^^+&mH(q1_0t1M3$M)T4K|f(g^I9MeheQ1F#~e>eWJmc|TTnH%-&;06TE^_xBeD)uTs` zaB_08ZEzvr#sHG)>Qz@lfPlcA(Z!Qil5|BfmK!gYMN<+Ga~XS1AeVB#I(97gnag-# z^?%TN7~Hi%c9>WOmIFABW5g~(wYRs2J9qBj=;#O!9z4LaXV38R<;!h>tCHZrbrUrJ zFa*%Au7oBouO=%6Fd^{g)!*FrxW&@1#^W&)0}KbQ8+Te=Y4!VzCO?v~-MGE#Z*ELC z9*=2R&xOp<+92n7zPOwp97WOMiXFIzhldN*{P^+Xg=*f?%Tmp5!iE4w)wNUo-%VUu zO>_!iEb5k}EUdFt;S=?ZnMxgQq@k9 zr_*T-FyHH)YV1+y*e0|P*>>Q4J+JP$G_p@?gM4&!gsZD7OeT{W z$V&jPndVz}4`z@@q*|ToE2_y4Wx_I&#IPE}Et0zc?yUguP>e9X&uMiJG2P=Xsp-Ay zyPeUOQ~=FL{i|odb5U+{lAk^^CevRZ%x!$k{MNO!IUe81nv zg9i_AdwaXc562vqeDL4_{uf?B1Mp6LG5Eu35<%*7S5&i;-hD#_vys*F1XT(G*=++u zx&{PdkM1+_gfV~F>*2$PxVpMp7+tYT1s)w8VK5l{OzE}awHo!wC4gZCM4T_`#_NgN zJRtSCD{fLK3nL8^!&_dDRiH1D&nTig{jIBs90NlTSe_?RNckkZC(b3U5 zER1ac>jDGQO8rh~Pjvog?uk}8DRX=Hj`-6%B54{OV{mf`dbq71qvuN`j9QW#l~bUE zKd;8sDnPI8E8n?u2b0Ob; zN52BxQW6KVYL$=0APFe!=k_;e@v1~b9ycs9vPq#BQf15g0|V4KMb!c__MESN3E-mo zd0oA4N&suXV-?_5R@+aXK1IBSTeObhP)a(@P1e+yTo<04iiJ9@B*RTwPQeIYAfa60 z-U``EbwAGK`PnT>D}b*A;9Ii#Gb0tb&fKr`xp)I$gO*9NepgUXKqV^>7iL0HqFna3 zlnktxf(a>QgxXZ1We?0`tdt}$pmApuPUUFZbp`TewHPO&b$n5*RpxXhl^w4EZqRZw zrTk4}tsI52SP`6DZ~zyi(o_1Z``IHSiwzvNm*%3P+2U10Z%oMtcg-lOHkHL!&=%t2 z+Bc$}=MCz4RVL<2QLlIna0BDtzC9NP*lc~y4T<6`PePN(IpLf_lpKrRp^Vh9A&{X` z>udoB&Ncn}hC-H+kqa&;ap4w-TG6?v=Pq;Gq!BxV9CrlQml^6pI`iFJK_N#~nQqTz zfODFxf~?oT0GQpRo}>yPmhe=vN(?Sba3NvVNC2KmPI)G(*|+a@CG!=YxoiYEUIAPs z$F=dCm~d8l0CtnDQttNQm<+F6CMzUKP9&ziTYxu5pbO}&S+~1jUb1` z3{k_c^kk5lh=)ESknNd9kmD6|xuIe8T0EzMfU}(Y()bL!9jva|_$o-fhZG*{iF%xf z6y>szc>kSAfMe_lRuq(b&LrQPlf^wZB63|=no2&j=9R|grga@RsOAvMRMa6EF*_1F z&ctAejGIxas{-4nhwK|xv|6T-#G7N;LSiEX3D_KJ-#7*8yy!$+FJ@Cl@UtkbXJ&z6 z(xJhS^X-YcVBc?<^;l*2-0QL1WVZaIhq2c0$^q?GB$|=av zGqw&Z(Vzgwu({biPp-EoQWi)MX6$hv1IdWRSY~M|=`f~rB?o=r*-k8rI*20ON1oy++~MnJ`fhlUiG(# z#_k#WaZ1*I=#%2OB@7wCCaE)nVn~U3PS#titrUw>rT0J{bUv#n?iF zaiw-gPUDYAjqZBxEfUwJ=(j462@h|82p zOtzGV?Ry?}pB~ih@3A}pvmPUC&V#Z%2gllE4YNm@DyMscC+JZc0P~jT(_9&W%bts} zOT0|YxWmH+9n@Jus-YmuPlN9>THR_%vazvGsw$*VBgcK&WePjQ!kc_x>-`*(WP@mg zWpaK(DpYAdbK{wNSUzH-M|T2J>Ar2JmE5;#?FB39RElNFE{|o^@^KTNFUY<&bF5Lq-xO4I1{tuq757 z8SiaNj{7oLWk+H{QwFT*C{AJAwMFX><@GPW^_L!N(iZjV9p&>^Nk3=`6?yMZOhGAzC$;v!2X?PMW1(wegr>LL1 zno=6mWw%n{cs14+i5rs0${nC;W~pYrkqMU1*v^dLhI9OH z1Pl%_=JXIspY4z$SuFRQoIT6r{#eqibY(%Gn@fE8 zhQ^6tA8);?t{ZxOi*Jo4H_1{X8GW%Pxt+uf$q(c+z5JlL;UDG_YvmB2(q{RfHb=4& z3C1*)ZLk2gj6Kfi%!NM&0^PR&Iog&RF#xSvz)`D!goK~j;(BFmdvV-Alq*R>0z-9a z83a|+%1N^JU{zHdlADS9F%^walGQ#CE>_PSr{DAniBXh7P}@ZSQCV_ zFnLQENx*1^wG;LiSx&kpUT77P!4?FPs_sYw7Xpc^_w+VVCZIBzf4_3Wt_W|{n0#Wiu!ro9hxMS-~`KuvLS|AEV)!QtYRZL!8F=j_FU@(L@Y6I&4;I= z!c~%#rI|@4i5KUt2nFZ86WC=Eb7LP4e7vkS%8r!}R&co<#)u}0twBDZJ@EkCgTHu~ zN|HtGVQ}>*$}Oo^h??IOjv1#3_1Pze0j8-sWtS?zx;T{`GNZte58x&#UZU)@l|5=I zdBg=z_EE29!)Zh29!+EqPQ=g(J@MmEwh4=vml3e%|&x$jY}h40XVNNK8(!(??}E@$#`l^&OPiD%PP+Wh{B-j3@Nq9&$Z>{sL=(s_8C=&n%L75B{Rtde~Yy$Zf2TpaZ>zQ*WxqEH2m- z^%96&MYieCwuT(LbZfEBIh96$#hR;ta>7mX95)C>qaWOM;5!nP+E&e`#Bzziz;J(j zN&3?gQMg;>Ju#!bb~jm1rJHKzGE$_VwI5s*OtuW*wx z)N6Ec!rx+Z_>%r*lLRX#Yc3q28)Gs8;z&he-SUB{Z3jB6IBzNoDe{CW_l#i8P*RR_ zVO#u)K*v;gSR7MtDz3H>ZI;2kY*1xZsB&toz-@*qS?%shtT>`npN1;;DD29`!((A; z$2%*e3nL=h&5V8U zSELJXDW3js_45MVE7&eca1(7dq*bf|jzFY$VkED}s8^8NX2L%;68^3Q4wDo{DVRD7#0;f5)K$~Tdrz-%Q)6HIcBzP0bj&*!Pn_+O8vkPU1 zImvEOUKxvXQ_2q0VJ*szQ_&X&xKj_f8_{OfRkFHox^$hA?rse$a8uHqkJ{=ay)Q|G zE~LAh_F2wI>E36N?n*S5G}JwKO4ryR-HquUxbAe5i?os-+!pkh%f8HoyqPx30P~R! zi#FRQAes!W5X(hAVNi?`&lvC+MRU}TplJ1WUYJdWmAZs;aS3M<|DIu)Han5|(lbt- zE5@%=Z59UG&)sMs`(*eT=+4UGthB}wqVrw*EvN3J8sc@K8JX0yF8g9!a^P(X~^$#=S^Qi$Y zH`N%>!fERtoErw=6-jRDu^IH}N=^&ClxP-E?`Ga#<%f?CbDhC#>$R5&2w z3``~;SV5b>lSbr=jMVsA6 zy@#&$=XL5X5X(A}Nmj|_29?aQ<_T1Z$go^uLTg!+4QW2B)q84Kzp*U9J!1hT;zOqb zav^ijGlZs(v2=-9W0*_*6fyb;&3apSw27O z0`v?p`*F@q(l8ydWYsM4KPuhNpV2=&tZ3H-Gpm4jrlGGZ}|=3>3Z9)dty;|nXV zjD`#r*UHj@r3q;diwzQb+#5ZOs0*Cyf@$lX8zXMNQKdUyWmYZv#a1!UTt&SwEbJW1 zM?K31#zNV$Fn#VH8i;C5T~FZgqf6tytpnPHVMY5WJ&Cx8Df|_5w_54WD(V$@*c&O9 zdnhok2!?UPA-sehI%}Y=6vAurRe1MtsI2#EjW8<&$w7;W+`DD$=`-_q{C@TpthrvP z7H5}AcWq@H=JX!U{oZ1^HI1?(LZPPIkj3cKG8ZGY3Xw2HsHq207jUicV=P%mRRr8q7J%C%k=H?WBCqnNh# zD$tU>oOZk=e>?P0X;yt%Ocn@-tn}R5wPb$ABANQki4Z8*4Vt4~PIzL>VOut-Gi4_? zI9Wr~J8yD9@M|N@r9tx&cI^($>{tcCxmH$AR;fkb^{w=#PAj^gbNb11VHE_|igZoS z92v|?2d)+bzxHsl+Va7zmF}!Mm0Zftl`-U!{x=k;*Djo#OAQ;cJDgkYQqn(yeTqQ= zw|XAm7_Ran{p&rE?Da8D{N6)^>b?cxNRs!y+4E1lw<7Kk}Sf0;CXJVDaSRIOF6dY zh1)1QZdHZ&(FX~r_ssRR)#1I@D&A#fKuRI&b!n>uPsYke61S+WR_8MYIVa;Ng}<#% z3cDbwKC`cn@ys9q%*6=Rrqe}N%8u3N7g+A~TasF8YmC*@g)?aIFLNx{*|HjA#bj+} zST53LscN9Puv=yT&nF|;P2zm++>;i~jc0BGc!K7}SeBtxbfN6{RCVs5rle?ZZ8yhq z-Dm~15Sprfk2aLdh0SR7J+zD~%g8DlK39mL$!DE&v^S^p-9tdYSv9$vTHDP$$rSH7 zC2J41&e>S2ZH{iuDGTF90{9P96#j?g=YrU;ObO?WAkiavK zfy`UjVP1XBw^wQq4TB}134(Q7y!(nnH$F<4fgw4N(UDyONT0r($ zt2()RL<8C*c0))3eLjL(k_2n#Fg>Xs8AetFKU;K!AIDTm3g+l}rbvQ5eevDfIbP8^yRXo*5YFM+SluN8R{n&ohlzl z!bQ1LO@4V-5(CzJ&kum#y?cizPoAurQVZ4q*P`MwQ<3XmTCB=jdBC}_A0lk8Z;}>s zaT1%UYU^c4MmA4f+=KLcc+dX7EnnLCf}ka3ez;N3ON zDhxNnSJ6i;)1t%sc~4Y+_zvo|vFBJmqh%dJ%dkvw4St5?0>J6%DdNwcKVxTS2Zx7; zNRk8_sO&BvTW*okWu39aeThpWZ(2yKHucbiVqr;G(IL$s>CsdeVE1Sr)~uIS+v^!L zA9MtFEds-b4l36kFI1`u4KbBBc>V!u-gT(Pt3`BHS~OSCChCC3jpWm=lJyL6TW`^ium&K61%&* z`10io?%%(U!C>Y^(#Jp{D|kzpW_$5tZI50 zfx`_PnV&SK2`(hYtO<|-mQM%Fuv}l-U5;)vruZ-_iDU*PH*)sXt@@>}v$HdN`SJzd zzJ0^R#l?4k2ZI4dqY*xR`h=sSBaB9)pC!ea7MK z$@QBGP*?DTi->azd7$2yq(`~vkfK>l{eH`zwdVprnx^>p@gu%|{fhJRb6j0reFwPL z>tQ$?VsCE`@7}$`@4x^4E2NZx<(|acRI5at&~_sL&jn!3%(zMK3NTCWEq)vw<=%pQ z)GG<`K|4n}>~cDP>(c%1-MfW)zPPx+<>lpffa5q`fV{iAi^Ic193LNVLyAkoHPPBz zV=SM)8ItPdvO)~<1V5M-R*z!dV~41-Pnc)MBtd3^a;Q=Zw=q?SC3!*%#wvN##%W#~ z^e%#(=0o3EIY-DMFUPlzvK1;Dgzd-lJXL>Et;lv}wTT{)G$pmlSyusPo z*+POZFE4R@ef=HaAP5kKA>uejk|YbD|M=sNP1UkR9B={mnS>EpZF0>j=gy1?T&?vH z3c!3~pWDsq5lrpT%Zx}axT4u0Zi3Ba2=&B5TUEMpQ*Z&`ufP7n+qZ9Vc6L_Ve{XMZ zzXQDRVS->G&Ana^{eB;>UcK7Z9&AamR)?FyZVk(PWMyfBCfKTstEc1vyU6Mk%cY9A zN~~_yDVdu900S;bL_t(B6D(JyWp?G{SM0&BU%$pb|NOI1&rW)8Zf-Chj}ec@W0Yly zvMd)Mhhc~)iWb+47caJ@steD1EFzzRVKEk&j#?NhdJ2Cxa9>^Kxe?IN(B>S=jKLRNXzHW8^&9yHEbKWuV25$n>TOp z;lqc8aphF=bUH@ zel#T<+Qu$rY~Otr4dZPL?(5gD@#mj^;?0{kc>n%AK7IOBQ_Yjf1ZkRLKA$5_)3heR zOUP8e&+{C!*$gjUyja(|wupQxr6EPJ0*?>f#?s`jCs{-4&_~x@W$Z5Zxi!h1OeXm2 zufOomKmXwL^b{XHd{}^cadA;o&GY#j^Z6W69LF_)t*a;sWLbv!e2&>{h9pTgiFO4Y zf+4<>e@#Y8*$`M!8m~p|U1#jB_qnmJ`{m0Q{P(~A#ovGbjnmW9noD$Xae?dWYmCR^ zh4jv5v+n>$QB;#u_iz54Q{fKe>2!)L%P<;^5XbR0KyI4AHbx=V0HcdWSas|!_qj5- zX`15An>YCT@4xZ(?c0S)cJXGmm=)YC%MgWOxG=7~x>Y1O%QB>Cit+e+wWPhhy-h*( z@rKu#sKBER+xSuIj@@;vmBBqbJFBT7#qN}SbujJ-=jy%u516+FoGOpO7c0fC6 zcIrA!Q%oikL{YTP-W+sP-|I|LQ}vxTHN5UN;~Q%waL>=r@%HUoynFW!XJ=;%iFH8? z7o}>F+&s@w6a^xdTn1EKB?jGD+%Gbq#tK$kFy&9aPw(r)hYxuF z{yjc^{D{w=KjZ7yulV-u+d>^XaBpvK7vRojvn9!O7%fRK2Rj_N3^Gfz1K9zcWf_X1 zz`?=6&jz{t2@B?DjJ*=LP8Bn-7Z(?}xVTuT42CSgBc8>gY%57$=|cJlDIPXWh?z-|uA)Hzx(OCK><$ z1qPkw2|d}H7ji3fpUsckzq!t!Q4Yt$J`}k;-{GJtwBD}Q9g&8xH2$No^4DF-_=iIR ze7yZ(CETpr*}qR%Ji{gN7N}>dOeq2JTe<~WxLL`DaS91Mjr0w{bZxMF? z+%-pPj_e(L;N8dXZaULi|mO+DAWTO9#^_aOCu2WEhErLTg~fWV>67WzGC?b&FnI>^-?WP~OT{Q|bBL z6%7^fQ24>Vj@BcE1G{O|YnwYscE>A$=amef47wd}JRNu8c z_I08~GiB5({A{kgwy#xN*el1dPW0AgLF?kvrYUja+Weh;tCyw{rB4T6+&S0&v&gUS zXWUqx8IYMKz>V10w6V)7Ox^5>`HD;Ex+f^!ki$f-y8MO&#P>of>$TipNMo(+H zD3l<)xN2gh9C9iz>SEjL?{j~B^ijPf;6v46M}8&*-_Q%cn;5hh`>WCLDY zio=&{H{~yp0E1WXE<9A8-Fs5AKFg629Uwk81sK>p1aDZj__&41&Vj0YS;Oq6ie_5 zdFNN{FE=|XeecQn*Z-$s)@ncg@BMI}7y=f_Vk>=ib`CS(O68~qli0|Y3%K=_wC0Ke z|LB)bT=>`Aj>Zp5<=!;DQARCJ?{{#nAknwp7@=~vv5WRlX=z~ zH-*Qv#M#aI{$~kEWhyDh>k8|k9?4lWs(yFauo+oJ+BqEs=<)VFxZ68*N3@{;Py-ey zqcTIkr2o7?zZfW+K?7j=(y8dVMT&J~CN#0XTn+0_)dFQd3+A0J3%BN+KY+G4qzWj* zMrj0(WA+J%fGs+8d|!J)W4|>zz9KKw5J0vNc>jz#Kz!h#-)(h^d0D7fWey;(XCL%- zD|Skk3exyvlAdY3|1CKzPY!F?pwf{#ju@GQufHxo|7_K6t!nh4=M{@yeI;{Uh%Bs_ zNr>Vd)jnr{zSRIjxH(1PYvGt=WmebdPI}Eo$Mkmgw4KxHZ(M0b(YYUA%oUsrl+K{S zX;dBY3?2VNHQ8VWJL-YSk?J<|ZQ<8SW?}3sqEWXhNyXL}1`T)q()r!>nD;#3{XB`_ zEx{mMx(q7Inj0_AJl2#jI-E3Z(}2>QE?^P2RjR8Dl<@ZqT;&fYP1xt|b%vl#u0tG6 z)-+Y(Ni9cTH4D^iLt$)2zA{^=CQKhxp7&eGUNo8X!ZCbD)mR)yjL<&dLu z<)TKK4RN-&;oPrbpS)nNrMmhM()?w?^_e9omWF+|yhX^Y*aGl$&igN<+K_}*M zlTmIaoS-HHsmeX<0T>r?=U?AoacRQ;tu@Vfsp>n0sU3fTAIF{J;ryg( zNEo_m7N^Z5EDQDuqaydKYT$ngeNmC^exGlukY`K=o_DB>Fo!qbyBO239o5S5=oL@Y z*!Jfea)%o}ue_yTtEGM=K59R|-oR_<>7G!Q*#8ELK7w$%>w|7D`$0@&Zsj!z_lEfe zM`c!Ho~WzYR?znAKK+!H+M@L=?#T{i_bmQ_AknoMB%Z@7MOIrjGA1<5f|`0DCXR+9 zS@~#gH9rH`DJFX$L=BShro^>s{o;mMwaqvJsr-yHAwMZ80S4W(q2wk zIbv}j99=8*WD_gQ(O(S;(V=SMAu5%?;hk|Qt1oIpj*3DJ@mO2dMQpgj=!5$@R7k&Z z@axSJ2(27)z~x)q(9rUO+HYVWVH8O(4>*r_m&rt*S?Z1{xOFoq`hD{H##MeAH_i1J znHl=a)ox$9HI)XJM1;%XnWd~RgZ3cK1_HpiYS>_ed;?s_@5OJgHjHwTLXhs!fRQ^F zZpt0o*Kgb2i>`&lA>1iHP^}yIdR!tfglG!WDwV4`Xv!%)ZMhJ~-3-2C$F)9R`topQ@TtZR_xt4N-wmRHBSZq0YtfBhQCds^fJ|@t3;g%_NScnJbRk z_YnYg07rLBwoS}Q!90=8ygL$Te+>X}8Z=W>+tdy-IpBuzgBLXF9!}X&syA27lL6$t zMICK7DIdgQK!f9u8QItOD{8D&KRq_7(-EAjQnY(}=zGsLQ^F!mvu>yR^v(mD;ZWiK z<*NYagyl5mFBHGEje+0-Lp=#^McePy1}odB8~qf+GG^4hX{rP7@*p()Ii9OcQ4y1e z5GA0ED9i@McaO3Fh^V9V9I2oP0o6FxW0%$OEF(+F%Xl>Q8oK}jmfmH96 zH(y7HRF!>9xlsjUD&q zQJH3=^g0j+d5E#ydkMGm!0|mQKx~>@c>DmTACk{eDh(nxj|Xo(qnNUx!+_G>;!$b7 z3H+SvA=!)Qq#OW;)=-&#;>a#`Rjv$nzN?^9hyh$cy_xD0D05tfv&I&kp-9LHlwdK+ zK)Of?#qw@MfbzZmra?h)?lzy(N34qc)XNMxK^chJPU0(4jV8(g_WZeZ9PJyQxR5O> zwJtJGhtLv~2E9)x5T11)OvZf-SRbwpS>6x$GU}`b!q}@JdKoBIWlq<(EjyGWkk@f} zmg)-UN)VGKv2EivGk^zPbdXjN&U6sWcF1{fz&g)4E5GV){h)Cq!*Ei)}Sp zPZW)I6kPcEZ17_H3!`G&-`pQGNQ~Cc?75L-b6}#k-Sp!NqIK-#@Tqm3h>&*27)a<~FIeQCsA7tS6#Ytc2D9;iZmXzLZD#O{P9aus?qAOG+EkQUZ-c8eKz6+*P{$ zhsGnRpg&pDfSBaD5}wSspIVq}0S*-JHz4?9JzRb}<0}eP;=a delta 16 YcmbO%-yzS$aBU;gS)R?ecy=-Y05LNL5&!@I diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 3b451bd039..def46136c6 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -112,7 +112,7 @@ public class Blocks{ //power - erekir //TODO rename chemicalCombustionChamber turbineCondenser, ventCondenser, chemicalCombustionChamber, pyrolysisGenerator, - beamNode, beamTower, + beamNode, beamTower, beamLink, //production mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator, @@ -1731,8 +1731,7 @@ public class Blocks{ //TODO 5x5?? shieldProjector = new BaseShield("shield-projector"){{ - category = Category.effect; - buildVisibility = BuildVisibility.editorOnly; + requirements(Category.effect, BuildVisibility.editorOnly, with()); size = 3; @@ -2125,6 +2124,16 @@ public class Blocks{ range = 23; }}; + beamLink = new LongPowerNode("beam-link"){{ + requirements(Category.power, BuildVisibility.editorOnly, with()); + size = 3; + maxNodes = 1; + laserRange = 1000f; + autolink = false; + laserColor2 = Color.valueOf("ffd9c2"); + laserScale = 0.65f; + }}; + combustionGenerator = new BurnerGenerator("combustion-generator"){{ requirements(Category.power, with(Items.copper, 25, Items.lead, 15)); powerProduction = 1f; diff --git a/core/src/mindustry/world/blocks/power/LongPowerNode.java b/core/src/mindustry/world/blocks/power/LongPowerNode.java new file mode 100644 index 0000000000..ac2e00b84c --- /dev/null +++ b/core/src/mindustry/world/blocks/power/LongPowerNode.java @@ -0,0 +1,48 @@ +package mindustry.world.blocks.power; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import mindustry.annotations.Annotations.*; +import mindustry.graphics.*; + +public class LongPowerNode extends PowerNode{ + public @Load("@-glow") TextureRegion glow; + public Color glowColor = Color.valueOf("cbfd81").a(0.6f); + public float glowScl = 16f, glowMag = 0.6f; + + public LongPowerNode(String name){ + super(name); + drawRange = false; + } + + @Override + public void load(){ + super.load(); + + laser = Core.atlas.find("power-beam"); + laserEnd = Core.atlas.find("power-beam-end"); + } + + public class LongPowerNodeBuild extends PowerNodeBuild{ + public float warmup = 0f; + + @Override + public void updateTile(){ + super.updateTile(); + + warmup = Mathf.lerpDelta(warmup, power.links.size > 0 ? 1f : 0f, 0.05f); + } + + @Override + public void draw(){ + super.draw(); + + if(warmup > 0.001f){ + Drawf.additive(glow, Tmp.c1.set(glowColor).mula(warmup).mula(1f - glowMag + Mathf.absin(glowScl, glowMag)), x, y); + } + } + } +} diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index f91301c198..2f61d24d96 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -31,6 +31,8 @@ public class PowerNode extends PowerBlock{ public @Load("laser-end") TextureRegion laserEnd; public float laserRange = 6; public int maxNodes = 3; + public boolean autolink = true, drawRange = true; + public float laserScale = 0.25f; public Color laserColor1 = Color.white; public Color laserColor2 = Pal.powerLight; @@ -145,7 +147,7 @@ public class PowerNode extends PowerBlock{ public void drawPlace(int x, int y, int rotation, boolean valid){ Tile tile = world.tile(x, y); - if(tile == null) return; + if(tile == null || !autolink) return; Lines.stroke(1f); Draw.color(Pal.placing); @@ -176,7 +178,7 @@ public class PowerNode extends PowerBlock{ vx = Mathf.cosDeg(angle1), vy = Mathf.sinDeg(angle1), len1 = size1 * tilesize / 2f - 1.5f, len2 = size2 * tilesize / 2f - 1.5f; - Drawf.laser(team, laser, laserEnd, x1 + vx*len1, y1 + vy*len1, x2 - vx*len2, y2 - vy*len2, 0.25f); + Drawf.laser(team, laser, laserEnd, x1 + vx*len1, y1 + vy*len1, x2 - vx*len2, y2 - vy*len2, laserScale); } protected boolean overlaps(float srcx, float srcy, Tile other, Block otherBlock, float range){ @@ -202,6 +204,8 @@ public class PowerNode extends PowerBlock{ } protected void getPotentialLinks(Tile tile, Team team, Cons others){ + if(!autolink) return; + Boolf valid = other -> other != null && other.tile() != tile && other.power != null && (other.block.outputsPower || other.block.consumesPower || other.block instanceof PowerNode) && overlaps(tile.x * tilesize + offset, tile.y * tilesize + offset, other.tile(), laserRange * tilesize) && other.team == team && @@ -255,6 +259,7 @@ public class PowerNode extends PowerBlock{ /** Iterates through linked nodes of a block at a tile. All returned buildings are power nodes. */ public static void getNodeLinks(Tile tile, Block block, Team team, Cons others){ Boolf valid = other -> other != null && other.tile() != tile && other.block instanceof PowerNode node && + node.autolink && other.power.links.size < node.maxNodes && node.overlaps(other.x, other.y, tile, block, node.laserRange * tilesize) && other.team == team && !graphs.contains(other.power.graph) && @@ -410,6 +415,8 @@ public class PowerNode extends PowerBlock{ public void drawSelect(){ super.drawSelect(); + if(!drawRange) return; + Lines.stroke(1f); Draw.color(Pal.accent); @@ -421,23 +428,33 @@ public class PowerNode extends PowerBlock{ public void drawConfigure(){ Drawf.circles(x, y, tile.block().size * tilesize / 2f + 1f + Mathf.absin(Time.time, 4f, 1f)); - Drawf.circles(x, y, laserRange * tilesize); - for(int x = (int)(tile.x - laserRange - 2); x <= tile.x + laserRange + 2; x++){ - for(int y = (int)(tile.y - laserRange - 2); y <= tile.y + laserRange + 2; y++){ - Building link = world.build(x, y); + if(drawRange){ + Drawf.circles(x, y, laserRange * tilesize); - if(link != this && linkValid(this, link, false)){ - boolean linked = linked(link); + for(int x = (int)(tile.x - laserRange - 2); x <= tile.x + laserRange + 2; x++){ + for(int y = (int)(tile.y - laserRange - 2); y <= tile.y + laserRange + 2; y++){ + Building link = world.build(x, y); - if(linked){ - Drawf.square(link.x, link.y, link.block.size * tilesize / 2f + 1f, Pal.place); + if(link != this && linkValid(this, link, false)){ + boolean linked = linked(link); + + if(linked){ + Drawf.square(link.x, link.y, link.block.size * tilesize / 2f + 1f, Pal.place); + } } } } - } - Draw.reset(); + Draw.reset(); + }else{ + power.links.each(i -> { + var link = world.build(i); + if(link != null && linkValid(this, link, false)){ + Drawf.square(link.x, link.y, link.block.size * tilesize / 2f + 1f, Pal.place); + } + }); + } } @Override diff --git a/core/src/mindustry/world/meta/BuildVisibility.java b/core/src/mindustry/world/meta/BuildVisibility.java index b9558fc1a5..1bbd3fa0a7 100644 --- a/core/src/mindustry/world/meta/BuildVisibility.java +++ b/core/src/mindustry/world/meta/BuildVisibility.java @@ -8,7 +8,7 @@ public enum BuildVisibility{ hidden(() -> false), shown(() -> true), debugOnly(() -> false), - editorOnly(() -> false), + editorOnly(() -> Vars.state.rules.editor), sandboxOnly(() -> Vars.state == null || Vars.state.rules.infiniteResources), campaignOnly(() -> Vars.state == null || Vars.state.isCampaign()), lightingOnly(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()),