Avoid multiple enumerations of armaments in AttackBase.

- Avoid enumerating the collection more than once in a method as it is not trivial.
This commit is contained in:
RoosterDragon
2014-06-04 00:55:11 +01:00
parent ff8e19e9e2
commit 0027434fbd

View File

@@ -88,10 +88,11 @@ namespace OpenRA.Mods.RA
{ {
get get
{ {
if (!Armaments.Any()) var armament = Armaments.FirstOrDefault();
if (armament == null)
yield break; yield break;
var negativeDamage = Armaments.First().Weapon.Warheads[0].Damage < 0; var negativeDamage = armament.Weapon.Warheads[0].Damage < 0;
yield return new AttackOrderTargeter(this, "Attack", 6, negativeDamage); yield return new AttackOrderTargeter(this, "Attack", 6, negativeDamage);
} }
} }
@@ -137,10 +138,7 @@ namespace OpenRA.Mods.RA
public bool HasAnyValidWeapons(Target t) { return Armaments.Any(a => a.Weapon.IsValidAgainst(t, self.World)); } public bool HasAnyValidWeapons(Target t) { return Armaments.Any(a => a.Weapon.IsValidAgainst(t, self.World)); }
public WRange GetMaximumRange() public WRange GetMaximumRange()
{ {
if (!Armaments.Any()) return Armaments.Select(a => a.Weapon.Range).Append(WRange.Zero).Max();
return WRange.Zero;
return Armaments.Max(a => a.Weapon.Range);
} }
public Armament ChooseArmamentForTarget(Target t) { return Armaments.FirstOrDefault(a => a.Weapon.IsValidAgainst(t, self.World)); } public Armament ChooseArmamentForTarget(Target t) { return Armaments.FirstOrDefault(a => a.Weapon.IsValidAgainst(t, self.World)); }