From b6c645b7018d06fea1ded727fc58ddd91de8fe91 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 5 Mar 2021 11:10:12 -0500 Subject: [PATCH] Better DefenderAI / Vela building / Anuken/Mindustry-Suggestions/issues/2074 --- .../sprites/blocks/environment/ice-snow1.png | Bin 338 -> 514 bytes .../sprites/blocks/environment/ice-snow2.png | Bin 359 -> 536 bytes .../sprites/blocks/environment/ice-snow3.png | Bin 290 -> 430 bytes core/src/mindustry/ai/types/DefenderAI.java | 24 +++++++++++------- core/src/mindustry/content/UnitTypes.java | 5 ++-- core/src/mindustry/entities/Units.java | 16 ++++++------ 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/core/assets-raw/sprites/blocks/environment/ice-snow1.png b/core/assets-raw/sprites/blocks/environment/ice-snow1.png index ee593e9f64deccecdd4eaad55be67d7015532f58..d2010a010684c0665acfcc620cb0879013082af0 100644 GIT binary patch delta 489 zcmcb_)WkADxt@WsILO_JVcj{ImkbPydpunnLn2y_PB+XtY#`D$zg3}?r;$(cvY|jx ztJ4eDn#MT`z4HThmArB7Ss1R-)^{!}*vGg;L*$C$iK+AMO`iA2?C0_u8^6>~nqPO) z_4l{L2R)a5xZU<~<(>X|!OG>=r@w#r{pzd9wSGs>yj~@r8W(O`f7_kmz|6;dMQ2ol zUb_D~e}{R2RBoQ0`^@RLIj7wA+!C7@e(>^P@l2azF^djKB$wU2$6VmpXL{W9=-QS; z62?ys+|5;A)OWIPPSiP(7Ip@P183d(EZH3#SHy1ro~QH7IPl|eD>Z_Fw$j@5ekW~I#M zIW3c&T*QA$6l=0@PsrXk<9BIuxVU~IR?jw16>jcee0WxEX@;PeeNf*-*6Z(Fv);3Dbbp?4d9ro( ztl!B7K0cXROOC|5EuY33{_g0?vy5~2Cl|kDU)cIBW%2(H2@DJj44$rjF6*2UngFnc B=rRBR delta 312 zcmZo-xx_Rwd)5S5Q;?~jYzFdb41Xv&J+##*6Rv|q7Xm7RnMJ`RnbJd?GyKpya zT>NgTBCNgrZQ#GiOZ5eNZDP0HxxNgudp#`bU#q{8x*!nf@&E9O z_8GS~u=a>VUC=tP`Ic>ND076d>ckHm42mHQ<~E!53qIl&;5^T8#!ZAXogr6zDWmek zz>YOs{)|S)SC-Cf$Y^(7JB=~Iexl?ZueNPV z8Cp8@qJ$gH<+jXVU6IV{Yq<3Lm(vWlHomko__hB5Lj~Jfh6~S|t}^^8`SZGp(cVCf VcVYYV00ssI22WQ%mvv4FO#tOPh|B;0 diff --git a/core/assets-raw/sprites/blocks/environment/ice-snow2.png b/core/assets-raw/sprites/blocks/environment/ice-snow2.png index a9ffcf10887c28627abb1aed9cfa584800d5bbcf..5a0d5458d4c892e96d7d7572a97bceef3bbbb17f 100644 GIT binary patch delta 511 zcmaFPG=pV=ayM1Gu(LhZ1EY>hwD04 zFS67+GRLm_!=$duJkwskzAxzU?DpN74LePyU165UvI|*sSmJYyeP+GAUCoT_4o8b; zXERTIEd4q0$#2hk_G5Xwrxiun9QpEW?YTRmJ)Cp5+)6pu+Sh(+X4EvxUj8YwSSMM= zUvTHpnYo?emTz946xTwg9SSSzE$0ezEo4pSHs}r3|NOtL!?alHZB4m_3&#l)KkMld zEwg?qc_&U>sx*baWy-U_z-zpB8MFLWOGz!hw~CwL%jvaZ1yQ{(89ZFs6fGE9A1KHi z3Vm=(`GVFQ|K%(T(gjWJQ#z#DF2e-t4n*GS4DI^Rrv8?WA~9u zS1SD_l3mM`=Jn^Fe!I85@}D`^Mg|SZ3OA>Jyw`<(nSXrn{r0sYR+*&=KQs><_!Hb}Jo5~w!ZaROUUZ2U`?ZcakpB}tZ zIm5BxxwPqW%dUwIPb*U2H=j-wIe0v4?IZy#I!v|4}HVRMb7(d^iXP=y?vqS@zqRLXB}JK zTsU+lY+?DHZT{YotlL%Al+ST{pm$(e&a+1sKj;Pgv`JRg`Qhqd@4$PEtKvhQWa`6= u-50)9eo#AbU^UZ+$5TX4c%?jM-?TLF+xnl1n-~}v7(8A5T-G@yGywoo*`xjd diff --git a/core/assets-raw/sprites/blocks/environment/ice-snow3.png b/core/assets-raw/sprites/blocks/environment/ice-snow3.png index f38d778b297c8baae5fde0effdeb720fb3e9c860..4375ee71397f595367cfdd5b8acdadaa5a537b5d 100644 GIT binary patch delta 404 zcmZ3)w2pa#NGZx^prw85kHdJY5_^B3jQ*H_SV1z~j1~nOV|`<;4TTo5k%+ zj{1|hzi`D?wZ$zE=VW@qclYsHxvr`c0t*_fPfkb)Qqh&xW8|O2vtNJGq8E>TeZ8FM z7_H0sU!3XGPR83=!ac8-UFFu~^DWbsr{+4Qxl&u5?P+%c!eXb%05}c!~PUuHr1uFxi5mN6fSB z6}c9axi_i`sQZXE8R}iT*EM?C`Gb`CB+odWSA|Ap&Qw=d6|x$hwFVFm^U N22WQ%mvv4FO#t|fvMB%n delta 262 zcmZ3-yohOnO8rYu7srr_TW_cNay2{fv=$ed@160$cUQ^td#>HBni8MCAF~MVYRn0F zR_iC{`NC3v{X9?e1Lv819`Ex0lAs;Kpx5VAk;s(sD3HVDk4QtAhEg1Ff^5${37!Xk zC8M@6A4r}N`tj}D^0h0IVu>PFp2a zc;0zZ=gHNYvu3rcH1xA?YO!?K(lg!X@H+;vBlWr}lE#fjEtV{II5&&+>RzaA+SH=Y z?64?pu@|Go=1YOs%B1hA2iXJ|bI&qe^g`!{-(k7j3iH0`vrKE}oK0u^eo5Muca6)O T)uHhW3=9mOu6{1-oD!M !u.dead() && u.type != unit.type, (u, tx, ty) -> -u.maxHealth + Mathf.dst2(u.x, u.y, tx, ty) / 800f); + //find unit to follow if not in rally mode + if(command() != UnitCommand.rally){ + //Sort by max health and closer target. + var result = Units.closest(unit.team, x, y, Math.max(range, 400f), u -> !u.dead() && u.type != unit.type, (u, tx, ty) -> -u.maxHealth + Mathf.dst2(u.x, u.y, tx, ty) / 800f); + if(result != null) return result; + } + + //find rally point + var block = targetFlag(unit.x, unit.y, BlockFlag.rally, false); + if(block != null) return block; + //return core if found + return unit.closestCore(); } } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 7f4ae97766..ed966e869d 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -405,13 +405,14 @@ public class UnitTypes implements ContentList{ rotateSpeed = 1.6f; canDrown = false; mechFrontSway = 1f; + buildSpeed = 3f; mechStepParticles = true; mechStepShake = 0.15f; ammoType = AmmoTypes.powerHigh; - speed = 0.36f; - boostMultiplier = 2.1f; + speed = 0.38f; + boostMultiplier = 2.2f; engineOffset = 12f; engineSize = 6f; lowAltitude = true; diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index 0b0538adb6..49e33ec06b 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -266,20 +266,20 @@ public class Units{ return result; } - /** Returns the closest ally of this team using a custom comparison function. Filter by predicate. */ - public static Unit closest(Team team, float x, float y, Boolf predicate, Sortf sort){ + /** Returns the closest ally of this team in a range. Filter by predicate. */ + public static Unit closest(Team team, float x, float y, float range, Boolf predicate, Sortf sort){ result = null; cdist = 0f; - for(Unit e : Groups.unit){ - if(!predicate.get(e) || e.team() != team) continue; + nearby(team, x, y, range, e -> { + if(!predicate.get(e)) return; - float cost = sort.cost(e, x, y); - if(result == null || cost < cdist){ + float dist = sort.cost(e, x, y); + if(result == null || dist < cdist){ result = e; - cdist = cost; + cdist = dist; } - } + }); return result; }