From f0a4753180993955595763cbdde7830a94da97ad Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 7 Feb 2022 13:04:02 -0500 Subject: [PATCH] BaseShield for testing --- .../blocks/defense/shield-projector-team.png | Bin 0 -> 751 bytes .../blocks/defense/shield-projector.png | Bin 0 -> 1279 bytes .../assets-raw/sprites/units/emanate-cell.png | Bin 1083 -> 0 bytes core/assets-raw/sprites/units/emanate.png | Bin 4251 -> 0 bytes core/assets-raw/sprites/units/incite-cell.png | Bin 460 -> 379 bytes core/assets-raw/sprites/units/incite.png | Bin 1857 -> 1141 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3977 -> 3976 bytes core/src/mindustry/Vars.java | 2 - core/src/mindustry/content/Blocks.java | 19 ++++- core/src/mindustry/content/Fx.java | 9 +++ core/src/mindustry/content/UnitTypes.java | 69 +++++++++--------- .../maps/generators/BaseGenerator.java | 5 +- .../world/blocks/defense/BaseShield.java | 44 +++++++++-- .../world/blocks/units/UnitAssembler.java | 1 - gradle.properties | 2 +- 16 files changed, 101 insertions(+), 51 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/defense/shield-projector-team.png create mode 100644 core/assets-raw/sprites/blocks/defense/shield-projector.png delete mode 100644 core/assets-raw/sprites/units/emanate-cell.png delete mode 100644 core/assets-raw/sprites/units/emanate.png diff --git a/core/assets-raw/sprites/blocks/defense/shield-projector-team.png b/core/assets-raw/sprites/blocks/defense/shield-projector-team.png new file mode 100644 index 0000000000000000000000000000000000000000..4eba1ac6a8e008441adb804b5753f5fc6f1fc018 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_ilS z#WAE}&fB?ngPIK_T*Qy5Uu9oeD^MG{r{K{QGZvvk+auG?Pc75ptZw*YvQoGya$4%m zs`Dnk!EXzr{w>@3X5N{JtzVVIpUf+8cky%3%y8ulV*19iM$OU9!FPj~kdyQr7tIAR z$~UAk-fmnZozS4daDx4!@t<4CMu*rt`WHMG?&E2Q{N^1S!TSDbk9C4diqyl^NsK8v z4QDQ#Kkjlq??nbr{6UwsEUh0H6&VlIacVtePGV}v<@9>Ud_a0P)7F~$x=pJuh<o*+$A1h;_v9Up{AOl5{+rqF*l%XG z1HYNs7Gz~EVmdF&a<$uS)1~lPE2pmhaMf;gf%%l4D_5C*{BH6|*J*$RrI^DpCQ$hP z{|^e*Y1-?er>=Yv8lLAJvgzyQOjgdr;U8WcYPhJnL)->_9ODq5Y literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/defense/shield-projector.png b/core/assets-raw/sprites/blocks/defense/shield-projector.png new file mode 100644 index 0000000000000000000000000000000000000000..281848306e04f8b4c5707fbb447f16456aadb234 GIT binary patch literal 1279 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z_QcR z#WAE}&fB?;d3OwWT>rD!dhL>2AfDOC;^*>*3p;#-hJCwZ1eg-qMfe{#}nrEpEiMt z6ZoW_opxyquuYh8f0zAk2 zTga?^wMFx3)a3swe9rFw^W){0`fiT}2Xb|#gt(`+(KC??UxlyB9B* z6Q#6pIp>|?N;f8M28CvUhg>~ejl2vG96J*BeYqni5K(&|W~*J}XXa%AwkB(mW5tgk#z>@6#LF4lrG~r8iBXVurr%X(1-b zhOp&ZSPovU$($J`;K8uPoh6vV_KbfQ!$PhDSr*4$&d|Lo-E=F2rCjIFmmdv}PZxKz zf0-tb6~w4uXrK97U>4(+8S}TKa>&m*e;^>!O5v{r*994!UibF!>*jAVyTw-8PFmCX zX|cw{fL}4%T^18BaK-XC-2U^jve+$%Cr-NM*_J7@R37eOX-s}IOTk1nEi#MCF)5?p zFP3THEzb3-*@>R*hcDK)@^81`QCZJZk3ffJIy`YlgYOB zxbf4YHr7_1%#PaMCo?D3tr1~*Ub*e|uZATn1d5IqC|1niHz_-GQQ-Lev9;D znW=NP@~~vdZcY!ASzy5PG>*~sIs0__pgXNZ+f}S zO=sozbrbW&fHy=j{JAJNo@V&FM`1Ky;v%fO-q@T4h?#o`0dT-*lqYDH% z^;UKYDnz&@X|rs8S~l%aK4Cuby42M36Ni#4oFct^7J29*~C-ahlf%&Va zi(^Q|oVRxZixyjmuwHn6^VAnLtKa(7!Y8AQ?46IkWm9%opl=$lj3+8RVtvGXwRbJS1yPqppU%a<8qx8<1f0?!oVRrAomv|=~ zGn9Qg$@PrQ!uKoGj(XsycLnY~ zi_z1kh^fYWwpKk|veqyqdRefj;cDH<({c}O-jyTh%^kGZ!(DE5_;TH(lW|#jkL=%n ze}CQfmQ;NI@i%kxJvq<+k$AqvwdY3IvFDF+G#`I{?>F`1E7cy4vg?2HoVMM0de-;L z>ui6~w3oeyLmK0~x0cj+znPkuo4Kx|`d$A$*0`ucv*P+Urqr0G-kQ8jBWdm48`jCf zvtD*xNUBk-zP{K*KWXjWh|cGob7wtK{+1McTthNmSGD@OvZ?N)2nP2lg?W>{>pZ@b zJ-sJ?^~Rp)=^JleGAVy_-kfdivvEfv9(n zkEtzv(lvKwi=e&ayS=w^F0ScN6`uSsEh$rS^VEWXNvWp`&Gstov;N34`TMzuheq** zN=47_)?~_YFDTVmIkoaf{GCGc}NNy6_FJ;M9;qr7hbIW=l@} zaKxy#tK!V_zyI$3QVuEJls;pgeOa74zvZ&p1#@k8$fce$Nfk6^zqWhL&1JV^es}*a z{W>ZAl=h<;Yu-OOQ*~<1Y$dlT?6d#sm33b#e!a3qaIUD~qvw1Dr)GLv{Md8BsUqVC%B!}`Md^}VZ%dF^Aj=VMH6?5f^y{$Ji uzUN!7yj}Lohr17Zo`AACo;-Ts<3DDOxts4Lo|r5IQs(LE=d#Wzp$Pz&Y5gbw diff --git a/core/assets-raw/sprites/units/emanate.png b/core/assets-raw/sprites/units/emanate.png deleted file mode 100644 index f297430956d5ba8acfcd57f9160faec24e29f733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4251 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 I=akR{0GzlKhX4Qo diff --git a/core/assets-raw/sprites/units/incite-cell.png b/core/assets-raw/sprites/units/incite-cell.png index 2eecb72f3ffdfebfa26274790181427a4374116c..5fecb45a292e864de711a3e411645e466e66691f 100644 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0y~yU~pn!VDR8z1F_C4_c1UqFct^7J29*~C-ahlfzi~{ z#WAE}&f8nJc@H`8xCFL`E#Q0+?=8Gg>@%}aR4xa9^_j=>?sMdqHF-=q$in~v58ThJ z{b_z?&n%<1d-FcLE8vJ!PJXu5_sfAZtEcUB%Mkd>nfLwohMRxayf8S_bb==_Gc83z z(NV)GVwS9^+mC#gG>)0sE$koH1~t!EruoK9+%j85rQ>3)?c*cv#>VqB@0o3X_HN!k znTPMzRm3rZEM(Y!P(RLgp6jo&<@Xc*AIp4Op?1^BJN)Oan_C~>RO#OHJ2bpSv2t#` zm7KTTZ=T5YA5XP~D9-5Qo|kU6jOXB*1uv^onqLW=>C)O?ExnfGpijkb8BwF!nbus6 zS5rLYSG;Qtlx&)5!Lj-H|MLspnRs(u*=nHGb$63mrDo5nvfW#P-XH#PqANZ%ueVDc czwqgP!ex`2vD2T*{w>`( zr6yP9^o2{w2V<1Ik1br9{BVx4_p^obITud8(f%${=+1QB%!Uh>>P`qMc`rMEaZ<_L z=T|p>IsWp?>&IbF&VRo7X_k)q)*IcnK`AF~wp{7E`$#5IN@2^F@|^D{E-5Tr`u2vh z%QQAF-L=X6LXu#Y?rA$S+4bu38K?ef7S}(#sNQXK{8o@r#_M-oToWv>&HHlp=BxOJ zt1Oqam38bnG0!_HWBG~hGnRYZYcAj84P{@u)9uZjmOB^Mc3R1moV3{_u&qRHf4yL6{Yu0p~50}V+zZ<*RdeN?A~w}l*gWwBxRwGO90 zER79o@0rHQE3((MY@RT2@6Ne*XWpE?`9^(d3j(H81>AmEU=rtX zYwxT5Yoww>(}Orx%raPIdCAG)YE$6RPEn>+Y(0?*-~6(Kje+5Ap85^GP_AQ#h1_Zn9o*@}@uhf$zh)?-V6#9~827QoAzv|Ewu5=Qh9HuKm~IzL@G+j$Ql@?k`VoW_74Iup)2!<}LOG zPSF{&Kj%)BWO**ZJoN;tLZjg4iA;xCnu;}MGVVS;o8f`Hh23E@#ln4S46Z16IXbN6 zZsT&{6t3sVszMPlGIjRzTIHw zEcV-b{t4_CI&#Zr-Ls3QXRt9fB=$d$+0j^N(0A{j!0(5*c5Snih~i*4c6O50Csvol z2M5yZ_v_of&%fhb|G4g@)UNq?OZQJv=tlxa^{k-(_de#Fk zzCRY-&A@Q|dG#Be>d$Ylcg2Rkzt8KEEOMUX`U3q3DS@upk3^Wh>!cihe!16|i}66f z=9;1}N)-)i=ndYey}utq?oHhJIDQ)R!OFnKi! zY@W!?X8*p#_zUt&aU( zT*@qrsjZ2xo>X5JX+Egx&e42YT%e7G=@gUm-9!s1{hD*mqRO6!M1wMlpCnyWi&!RZ zQ*vP^*9x)1jUm+soB6JDG9EoT=`X9lPQ#3hjV{WW_pj(L`Jtayz#E;AAfNryckz?> zGc7Lc7jE8+U!`zSdvo>H?A*%vbHb4qlPz9;nEEVZku&p>t9iMSy}y=tx4o0xchI|5 z?XBRt#}X|vi_Bu@ue_Q4Y30M&%TyJ1Y`Z&iVm7nyEWv$u_o}o^=%2ELSK;%=NMLB)E0?=@#=lycSUWi+`2SaJd+h^Jb(8kRW=>eSc}3g& xCz*2GM%RP1-Y(CWu=D%ms5(eyKJ<%uNl?|jmx4Qe7#J8BJYD@<);T3K0RS?@2>$>8 literal 1857 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1V2I;jV_;xdY{@Lbz`(#*9OUlAun?E2T~S|P!-03}rL41fn`|6;I18i7*^W+q?6o9BGUn#GN!%|l z-BM)y$;rdEwJ%@!tKg9Z?g3oJXmB0UItt_Y;wI$=? zBG+y)-Cy#V*;&lGe>eU6%e3>|#edC_&yBK+HBzq4Nj!gThPYAox((@>T3j{ons**W^U%`7WrN3$&iurMKa-^!kI5oZp<%QV)Fl(WhZL zgU!!KwzcN@KVBuJs{gMJFTGx!P+jBxH8Mnr(VDx4P!L2CGR@ z$NGmZ=CgytrA;H=ntI<+tN!rgUFi4l!`VyNYJPw7+B>Z}lUsvd`Pzqvnc+e24K7_> ztUQ04x#N=SRn^FW0~Clb12F+WGa~<4}`w^NhR~ z>+Sy=tiP;gog(yxvF(oZ*JGCM3A-Jx^JZ+gS&%C;bAnOTQjx`Z-k+BpTvz<{P@7|R zV>WXJle6Qtq|6P`vQDo9Rh-oE;_JoJYR8|k z&hyXRy7~5=G>;Q&bZ#tHfB(QNdc);y4_xGXZR;x>&&!{h&%3G4)lA*gBcJCq_wVlx zZd15^y?Cx~|2O8an>nZ0kx#Z?th~1_zf?TayKUBji67fN%#Iz~Yi-CGaz1<7joDvx zT@sah7RcS@N|C(v|53d0HnW>9RqM-Qvz<2EY)e=yd$BY?$+u_PM5Dq?rz8gd_xHZs zD0uzgM^A^{x}L15!W&Ju-T(daz4rQr6FTQ4m&i)A>a2W|%9F$~bz`*c?N2e!Up4xO z%;4F{xUzhM&4fty zy*W|1^0jt=`G>>zIy2Y!INWCNP*7t3ymU#d{H1+cerc$mh`;|Xrt19XE3EG>-t#Zi zIuXUQHhucNsL#&2{K6bxN}F1uQ$e2G`wwZn7!AuD3W# z_3Y}V6OFwpc9(L`GT%IH$-B*>#D}$#V{20N>Zs^TH+HH!uivPtxHvcExynh_U7=?m zo2oFLSn+ytQp&+^MhOQOL|?U8`#L*QmD8nm!`kY#W}Sa5D-*hz%WcmsV0<07*w-cX z(51~5)5?>!C`|8PRQJc1ulv{fQ2!N|T5i0#7&CAR-k9Nbnp8DGuP=aQa#+~va4PbnHF zE}eJg%++V!_Igcoeuqx^C-)?T(QexY%`+IB)@sgtDX zS-Hwv+W+Mnb8Y7+c>R$TQ@Zz??3URF7A$|q}` zHDWpWFLP(I+|O2Brkeb7(xY!bzWi7R)18U)-|W|9rK4r>R?Y z>bi;T*Yz$0F-LA#J1_m{rhA{irLh>D=C0o0RI(`MMqH}nwkL^9y{2IY-o(eL@0wMT zT^;?ubE~34^znr!X58JgK-@@sRt>jNcOw7I$<+zYwys$RqOS``iW$vs%KpSBDaO4z zxP|ZEa}LX@{_D|Gjy}K07SPMObIt(m+?D%)fmv?8#F_z4yUM*{T9z5~7A>?6ZpnhVF+>NkxEI5t@A$fWOUneu9>E7-$NKCJ>2P> k7MuRQTMS$)ZM{%0=p}a|-QGr&fq{X+)78&qol`;+04LasX8-^I diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 428c2d0282..9a502464fd 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -526,3 +526,4 @@ 63177=yellow-stone-vent|block-yellow-stone-vent-ui 63176=red-stone-vent|block-red-stone-vent-ui 63175=carbon-vent|block-carbon-vent-ui +63174=shield-projector|block-shield-projector-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index d6b1e0621030fd247f9c67fcf7543b9739af3f31..11dead39470bfb5333677775ba18207a48ccc4e9 100644 GIT binary patch delta 33 pcmeB_?~vc{hI{gV?u!Bf#Tl8YIVrjYMfq8&$tC%l&++VL0s!re4ch@08#0hMP|?DY2+1Gqp&!peR2pb@FrWYn#vW>|_D}!qN=x diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index cb2c156bb5..4a17a56111 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -65,8 +65,6 @@ public class Vars implements Loadable{ public static final String ghApi = "https://api.github.com"; /** URL for discord invite. */ public static final String discordURL = "https://discord.gg/mindustry"; - /** URL for sending crash reports to. Currently offline. */ - public static final String crashReportURL = "http://192.99.169.18/report"; /** URL the links to the wiki's modding guide.*/ public static final String modGuideURL = "https://mindustrygame.github.io/wiki/modding/1-modding/"; /** URL to the JSON file containing all the BE servers. Only queried in BE. */ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6b78f3967d..3b451bd039 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -86,6 +86,8 @@ public class Blocks{ //defense - erekir buildTower, regenProjector, barrierProjector, + //campaign only + shieldProjector, //transport conveyor, titaniumConveyor, plastaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, invertedSorter, router, @@ -1713,8 +1715,9 @@ public class Blocks{ }}); }}; + //TODO implement + if(false) barrierProjector = new DirectionalForceProjector("barrier-projector"){{ - //TODO requirements(Category.effect, with(Items.surgeAlloy, 100, Items.silicon, 125)); size = 3; width = 50f; @@ -1726,6 +1729,16 @@ public class Blocks{ consumes.power(4f); }}; + //TODO 5x5?? + shieldProjector = new BaseShield("shield-projector"){{ + category = Category.effect; + buildVisibility = BuildVisibility.editorOnly; + + size = 3; + + consumes.power(5f); + }}; + //endregion //region distribution @@ -2231,7 +2244,7 @@ public class Blocks{ //TODO rename chemicalCombustionChamber = new ConsumeGenerator("chemical-combustion-chamber"){{ requirements(Category.power, with(Items.graphite, 40, Items.tungsten, 40, Items.oxide, 40f, Items.silicon, 30)); - powerProduction = 8f; + powerProduction = 9f; consumes.liquids(LiquidStack.with(Liquids.ozone, 1f / 60f, Liquids.arkycite, 20f / 60f)); size = 3; drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawPistons(){{ @@ -2255,7 +2268,7 @@ public class Blocks{ pyrolysisGenerator = new ConsumeGenerator("pyrolysis-generator"){{ //TODO requirements requirements(Category.power, with(Items.graphite, 50, Items.carbide, 50, Items.oxide, 60f, Items.silicon, 50)); - powerProduction = 16f; + powerProduction = 18f; drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawPistons(){{ sinMag = 2.75f; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 89e15a6516..114d186911 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -1553,6 +1553,15 @@ public class Fx{ } }), + circleColorSpark = new Effect(21f, e -> { + color(Color.white, e.color, e.fin()); + stroke(e.fout() * 1.1f + 0.5f); + + randLenVectors(e.id, 9, 27f * e.fin(), 9f, (x, y) -> { + lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 5f + 0.5f); + }); + }), + colorSpark = new Effect(21f, e -> { color(Color.white, e.color, e.fin()); stroke(e.fout() * 1.1f + 0.5f); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 017120a74a..0880c08a26 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -3185,54 +3185,51 @@ public class UnitTypes{ envDisabled = 0; lowAltitude = false; - flying = true; mineWalls = true; - targetAir = false; mineFloor = false; mineHardnessScaling = false; - mineSpeed = 5f; + flying = true; + mineSpeed = 4f; mineTier = 4; - buildSpeed = 1.4f; - drag = 0.06f; - speed = 2.8f; - rotateSpeed = 5f; - accel = 0.11f; + buildSpeed = 1.1f; + drag = 0.08f; + speed = 6.5f; + rotateSpeed = 8f; + accel = 0.09f; itemCapacity = 90; - health = 600f; + health = 500f; armor = 2f; - hitSize = 18f; - buildBeamOffset = 10f; - engineSize = 0; - payloadCapacity = Mathf.sqr(2f) * tilePayload; + hitSize = 11f; + + engineOffset = 15 / 4f; + engineSize = 4; setEnginesMirror( - new UnitEngine(34 / 4f, 31 / 4f, 3f, 45f), - new UnitEngine(35 / 4f, -38 / 4f, 3f, 315f) + new UnitEngine(23 / 4f, 4 / 4f, 2.4f, 315f) ); - weapons.add(new Weapon("incite-weapon"){{ - reload = 30f; - x = 4f; - y = 6.25f; - shootY = 5.75f; - recoil = 2f; - top = false; - layerOffset = -0.01f; + weapons.add(new RepairBeamWeapon(){{ + reload = 25f; + x = 0f; + y = 6.5f; rotate = false; + shootY = 0f; + beamWidth = 0.7f; + repairSpeed = 0.3f; + aimDst = 0f; + shootCone = 15f; + fractionRepair = true; + mirror = false; - bullet = new BasicBulletType(5f, 15){{ - width = 7f; - height = 12f; - shootEffect = Fx.sparkShoot; - smokeEffect = Fx.shootBigSmoke; - pierceCap = 2; - pierce = true; - pierceBuilding = true; - hitColor = backColor = trailColor = Pal.bulletYellowBack; - frontColor = Color.white; - trailWidth = 1.5f; - trailLength = 7; - hitEffect = despawnEffect = Fx.hitBulletColor; + targetUnits = false; + targetBuildings = true; + autoTarget = false; + controllable = true; + laserColor = Pal.accent; + healColor = Pal.accent; + + bullet = new BulletType(){{ + maxRange = 60f; }}; }}); }}; diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index 6bc9f78315..3d2cf1554d 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -30,7 +30,10 @@ public class BaseGenerator{ private Seq cores; public static Block getDifficultyWall(int size, float difficulty){ - Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == size && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); + Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == size + && !b.insulated && b.buildVisibility == BuildVisibility.shown + && !(b instanceof Door) + && !(Structs.contains(b.requirements, i -> state.rules.hiddenBuildItems.contains(i.item)))); wallsSmall.sort(b -> b.buildCost); return wallsSmall.getFrac(difficulty * 0.91f); } diff --git a/core/src/mindustry/world/blocks/defense/BaseShield.java b/core/src/mindustry/world/blocks/defense/BaseShield.java index 3cb7a9e10b..7c9305efbe 100644 --- a/core/src/mindustry/world/blocks/defense/BaseShield.java +++ b/core/src/mindustry/world/blocks/defense/BaseShield.java @@ -5,7 +5,7 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; -import mindustry.*; +import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -15,7 +15,7 @@ import static mindustry.Vars.*; public class BaseShield extends Block{ //TODO game rule? or field? should vary by base. - //public float radius = 400f; + public float radius = 200f; protected static BaseShieldBuild paramBuild; //protected static Effect paramEffect; @@ -35,20 +35,41 @@ public class BaseShield extends Block{ float overlapDst = (unit.hitSize/2f + paramBuild.radius()) - unit.dst(paramBuild); if(overlapDst > 0){ - if(overlapDst > unit.hitSize){ + if(overlapDst > unit.hitSize * 1.5f){ //instakill units that are stuck inside the shield (TODO or maybe damage them instead?) unit.kill(); }else{ - unit.move(Tmp.v1.set(unit).sub(paramBuild).setLength(overlapDst)); + //stop + unit.vel.setZero(); + //get out + unit.move(Tmp.v1.set(unit).sub(paramBuild).setLength(overlapDst + 0.01f)); + + if(Mathf.chanceDelta(0.12f * Time.delta)){ + Fx.circleColorSpark.at(unit.x, unit.y, paramBuild.team.color); + } } } }; - public BaseShield(String name){ super(name); hasPower = true; + update = solid = true; + } + + @Override + public void init(){ + super.init(); + + clipSize = Math.max(clipSize, radius * 2f + 8f); + } + + @Override + public void drawPlace(int x, int y, int rotation, boolean valid){ + super.drawPlace(x, y, rotation, valid); + + Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, radius, player.team().color); } public class BaseShieldBuild extends Building{ @@ -60,17 +81,26 @@ public class BaseShield extends Block{ //TODO smooth radius float radius = radius(); + broken = efficiency() <= 0.0001f; + if(radius > 0 && !broken){ paramBuild = this; //paramEffect = absorbEffect; Groups.bullet.intersect(x - radius, y - radius, radius * 2f, radius * 2f, bulletConsumer); - Units.nearbyEnemies(team,x ,y, radius, unitConsumer); + Units.nearbyEnemies(team, x, y, radius + 10f, unitConsumer); } } public float radius(){ //TODO bad rule? - return Vars.state.rules.enemyCoreBuildRadius; + return radius * efficiency(); + } + + @Override + public void drawSelect(){ + super.drawSelect(); + + Drawf.dashCircle(x, y, radius, team.color); } @Override diff --git a/core/src/mindustry/world/blocks/units/UnitAssembler.java b/core/src/mindustry/world/blocks/units/UnitAssembler.java index 45b9cc969e..6fa832defe 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssembler.java +++ b/core/src/mindustry/world/blocks/units/UnitAssembler.java @@ -446,7 +446,6 @@ public class UnitAssembler extends PayloadBlock{ public boolean checkSolid(Vec2 v, boolean same){ var output = unit(); - //TODO CHECK TO MAKE SURE IT'S NOT THE SAME UNIT float hsize = output.hitSize * 1.4f; return !output.flying && (collisions.overlapsTile(Tmp.r1.setCentered(v.x, v.y, output.hitSize), EntityCollisions::solid) || (!same ? Units.anyEntities(v.x, v.y, hsize) : Units.anyEntities(v.x - hsize/2f, v.y - hsize/2f, hsize, hsize, u -> u.type != output && u.isGrounded()))); diff --git a/gradle.properties b/gradle.properties index 000aab66df..ff0b6edf62 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=31e09b436b +archash=3ad7f0345b