diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs index a4e92f2c9e..4d46d71a39 100644 --- a/OpenRA.Mods.RA/AI/HackyAI.cs +++ b/OpenRA.Mods.RA/AI/HackyAI.cs @@ -483,7 +483,7 @@ namespace OpenRA.Mods.RA.AI void CleanSquads() { - squads.RemoveAll(s => s.IsEmpty); + squads.RemoveAll(s => !s.IsValid); foreach (var s in squads) s.units.RemoveAll(a => a.Destroyed || a.IsDead()); } @@ -647,7 +647,7 @@ namespace OpenRA.Mods.RA.AI if (!protectSq.TargetIsValid) protectSq.Target = attacker; - if (protectSq.IsEmpty) + if (!protectSq.IsValid) { var ownUnits = world.FindActorsInCircle(baseCenter.CenterPosition, WRange.FromCells(15)) .Where(unit => unit.Owner == p && !unit.HasTrait() diff --git a/OpenRA.Mods.RA/AI/Squad.cs b/OpenRA.Mods.RA/AI/Squad.cs index ab79b7bf99..84da2e26d0 100644 --- a/OpenRA.Mods.RA/AI/Squad.cs +++ b/OpenRA.Mods.RA/AI/Squad.cs @@ -61,14 +61,11 @@ namespace OpenRA.Mods.RA.AI public void Update() { - if (IsEmpty) return; - fsm.Update(this); + if (IsValid) + fsm.Update(this); } - public bool IsEmpty - { - get { return !units.Any(); } - } + public bool IsValid { get { return units.Any(); } } public Actor Target { diff --git a/OpenRA.Mods.RA/AI/States/AirStates.cs b/OpenRA.Mods.RA/AI/States/AirStates.cs index fac3ea5c07..3cfe6b70e0 100644 --- a/OpenRA.Mods.RA/AI/States/AirStates.cs +++ b/OpenRA.Mods.RA/AI/States/AirStates.cs @@ -151,7 +151,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; if (MayBeFlee(owner)) { @@ -178,7 +179,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; if (!owner.TargetIsValid) { @@ -229,7 +231,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; foreach (var a in owner.units) { diff --git a/OpenRA.Mods.RA/AI/States/GroundStates.cs b/OpenRA.Mods.RA/AI/States/GroundStates.cs index 1799603bab..28574ff43d 100644 --- a/OpenRA.Mods.RA/AI/States/GroundStates.cs +++ b/OpenRA.Mods.RA/AI/States/GroundStates.cs @@ -35,7 +35,9 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; + if (!owner.TargetIsValid) { var t = owner.bot.FindClosestEnemy(owner.units.FirstOrDefault().CenterPosition); @@ -71,7 +73,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; if (!owner.TargetIsValid) { @@ -128,7 +131,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; if (!owner.TargetIsValid) { @@ -161,7 +165,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; GoToRandomOwnBuilding(owner); owner.fsm.ChangeState(owner, new GroundUnitsIdleState(), true); diff --git a/OpenRA.Mods.RA/AI/States/ProtectionStates.cs b/OpenRA.Mods.RA/AI/States/ProtectionStates.cs index e365116fb8..06e954ab87 100644 --- a/OpenRA.Mods.RA/AI/States/ProtectionStates.cs +++ b/OpenRA.Mods.RA/AI/States/ProtectionStates.cs @@ -27,7 +27,9 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; + if (!owner.TargetIsValid) { var circaPostion = AverageUnitsPosition(owner.units); @@ -53,7 +55,8 @@ namespace OpenRA.Mods.RA.AI public void Tick(Squad owner) { - if (owner.IsEmpty) return; + if (!owner.IsValid) + return; GoToRandomOwnBuilding(owner); owner.fsm.ChangeState(owner, new UnitsForProtectionIdleState(), true); diff --git a/OpenRA.Mods.RA/AI/States/StateBase.cs b/OpenRA.Mods.RA/AI/States/StateBase.cs index 78d63e82e6..eee78e7515 100644 --- a/OpenRA.Mods.RA/AI/States/StateBase.cs +++ b/OpenRA.Mods.RA/AI/States/StateBase.cs @@ -28,7 +28,9 @@ namespace OpenRA.Mods.RA.AI protected virtual bool MayBeFlee(Squad owner, Func, bool> flee) { - if (owner.IsEmpty) return false; + if (!owner.IsValid) + return false; + var u = owner.units.Random(owner.random); var units = owner.world.FindActorsInCircle(u.CenterPosition, WRange.FromCells(dangerRadius)).ToList();