Avoid or reduce LINQ allocations required in various areas.
This commit is contained in:
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (IsTraitDisabled)
|
||||
return;
|
||||
|
||||
if (!captorOwners.Any())
|
||||
if (captorOwners.Count == 0)
|
||||
{
|
||||
tick = 0;
|
||||
return;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
|
||||
@@ -25,7 +26,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
public class CreatesShroud : AffectsShroud
|
||||
{
|
||||
readonly CreatesShroudInfo info;
|
||||
ICreatesShroudModifier[] rangeModifiers;
|
||||
IEnumerable<int> rangeModifiers;
|
||||
|
||||
public CreatesShroud(Actor self, CreatesShroudInfo info)
|
||||
: base(self, info)
|
||||
@@ -37,7 +38,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
base.Created(self);
|
||||
|
||||
rangeModifiers = self.TraitsImplementing<ICreatesShroudModifier>().ToArray();
|
||||
rangeModifiers = self.TraitsImplementing<ICreatesShroudModifier>().ToArray().Select(x => x.GetCreatesShroudModifier());
|
||||
}
|
||||
|
||||
protected override void AddCellsToPlayerShroud(Actor self, Player p, PPos[] uv)
|
||||
@@ -57,8 +58,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (CachedTraitDisabled)
|
||||
return WDist.Zero;
|
||||
|
||||
var revealsShroudModifier = rangeModifiers.Select(x => x.GetCreatesShroudModifier());
|
||||
var range = Util.ApplyPercentageModifiers(Info.Range.Length, revealsShroudModifier);
|
||||
var range = Util.ApplyPercentageModifiers(Info.Range.Length, rangeModifiers);
|
||||
return new WDist(range);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
|
||||
protected override bool ShouldRender(Actor self)
|
||||
{
|
||||
if (!rb.Repairers.Any())
|
||||
if (rb.Repairers.Count == 0)
|
||||
return false;
|
||||
|
||||
return base.ShouldRender(self);
|
||||
|
||||
@@ -106,8 +106,10 @@ namespace OpenRA.Mods.Common.Traits.Render
|
||||
if (!Info.Recoils)
|
||||
return t.Position(self);
|
||||
|
||||
var recoilDist = arms.Aggregate(WDist.Zero, (a, b) => a + b.Recoil);
|
||||
var recoil = new WVec(-recoilDist, WDist.Zero, WDist.Zero);
|
||||
var recoilDist = 0;
|
||||
foreach (var arm in arms)
|
||||
recoilDist += arm.Recoil.Length;
|
||||
var recoil = new WVec(new WDist(-recoilDist), WDist.Zero, WDist.Zero);
|
||||
return t.Position(self) + body.LocalToWorld(recoil.Rotate(t.WorldOrientation));
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
|
||||
@@ -29,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
readonly RevealsShroudInfo info;
|
||||
readonly Shroud.SourceType type;
|
||||
IRevealsShroudModifier[] rangeModifiers;
|
||||
IEnumerable<int> rangeModifiers;
|
||||
|
||||
public RevealsShroud(Actor self, RevealsShroudInfo info)
|
||||
: base(self, info)
|
||||
@@ -43,7 +44,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
base.Created(self);
|
||||
|
||||
rangeModifiers = self.TraitsImplementing<IRevealsShroudModifier>().ToArray();
|
||||
rangeModifiers = self.TraitsImplementing<IRevealsShroudModifier>().ToArray().Select(x => x.GetRevealsShroudModifier());
|
||||
}
|
||||
|
||||
protected override void AddCellsToPlayerShroud(Actor self, Player p, PPos[] uv)
|
||||
@@ -63,8 +64,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (CachedTraitDisabled)
|
||||
return WDist.Zero;
|
||||
|
||||
var revealsShroudModifier = rangeModifiers.Select(x => x.GetRevealsShroudModifier());
|
||||
var range = Util.ApplyPercentageModifiers(Info.Range.Length, revealsShroudModifier);
|
||||
var range = Util.ApplyPercentageModifiers(Info.Range.Length, rangeModifiers);
|
||||
return new WDist(range);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +249,8 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
var position = GetTextPosition(text, font, rb);
|
||||
|
||||
var hover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget);
|
||||
// PERF: Avoid LINQ by using Children.Find(...) != null instead of Children.Any(...)
|
||||
var hover = Ui.MouseOverWidget == this || Children.Find(c => c == Ui.MouseOverWidget) != null;
|
||||
DrawBackground(rb, disabled, Depressed, hover, highlighted);
|
||||
if (Contrast)
|
||||
font.DrawTextWithContrast(text, position + stateOffset,
|
||||
|
||||
Reference in New Issue
Block a user