Cache traits implementing modifiers

This commit is contained in:
reaperrr
2017-06-17 22:16:02 +02:00
committed by atlimit8
parent 243ed3d76a
commit 779218f381

View File

@@ -108,7 +108,12 @@ namespace OpenRA.Mods.Common.Traits
AmmoPool ammoPool; AmmoPool ammoPool;
BodyOrientation coords; BodyOrientation coords;
INotifyBurstComplete[] notifyBurstComplete; INotifyBurstComplete[] notifyBurstComplete;
IEnumerable<int> rangeModifiers; IEnumerable<int> rangeModifiers;
IEnumerable<int> reloadModifiers;
IEnumerable<int> damageModifiers;
IEnumerable<int> inaccuracyModifiers;
List<Pair<int, Action>> delayedActions = new List<Pair<int, Action>>(); List<Pair<int, Action>> delayedActions = new List<Pair<int, Action>>();
public WDist Recoil; public WDist Recoil;
@@ -142,7 +147,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual WDist MaxRange() public virtual WDist MaxRange()
{ {
return new WDist(Util.ApplyPercentageModifiers(Weapon.Range.Length, rangeModifiers)); return new WDist(Util.ApplyPercentageModifiers(Weapon.Range.Length, rangeModifiers.ToArray()));
} }
protected override void Created(Actor self) protected override void Created(Actor self)
@@ -151,7 +156,11 @@ namespace OpenRA.Mods.Common.Traits
ammoPool = self.TraitsImplementing<AmmoPool>().FirstOrDefault(la => la.Info.Name == Info.AmmoPoolName); ammoPool = self.TraitsImplementing<AmmoPool>().FirstOrDefault(la => la.Info.Name == Info.AmmoPoolName);
coords = self.Trait<BodyOrientation>(); coords = self.Trait<BodyOrientation>();
notifyBurstComplete = self.TraitsImplementing<INotifyBurstComplete>().ToArray(); notifyBurstComplete = self.TraitsImplementing<INotifyBurstComplete>().ToArray();
rangeModifiers = self.TraitsImplementing<IRangeModifier>().ToArray().Select(m => m.GetRangeModifier()); rangeModifiers = self.TraitsImplementing<IRangeModifier>().ToArray().Select(m => m.GetRangeModifier());
reloadModifiers = self.TraitsImplementing<IReloadModifier>().ToArray().Select(m => m.GetReloadModifier());
damageModifiers = self.TraitsImplementing<IFirepowerModifier>().ToArray().Select(m => m.GetFirepowerModifier());
inaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>().ToArray().Select(m => m.GetInaccuracyModifier());
base.Created(self); base.Created(self);
} }
@@ -226,14 +235,11 @@ namespace OpenRA.Mods.Common.Traits
Weapon = Weapon, Weapon = Weapon,
Facing = legacyFacing, Facing = legacyFacing,
DamageModifiers = self.TraitsImplementing<IFirepowerModifier>() DamageModifiers = damageModifiers.ToArray(),
.Select(a => a.GetFirepowerModifier()).ToArray(),
InaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>() InaccuracyModifiers = inaccuracyModifiers.ToArray(),
.Select(a => a.GetInaccuracyModifier()).ToArray(),
RangeModifiers = self.TraitsImplementing<IRangeModifier>() RangeModifiers = rangeModifiers.ToArray(),
.Select(a => a.GetRangeModifier()).ToArray(),
Source = muzzlePosition(), Source = muzzlePosition(),
CurrentSource = muzzlePosition, CurrentSource = muzzlePosition,
@@ -270,8 +276,7 @@ namespace OpenRA.Mods.Common.Traits
FireDelay = Weapon.BurstDelay; FireDelay = Weapon.BurstDelay;
else else
{ {
var modifiers = self.TraitsImplementing<IReloadModifier>() var modifiers = reloadModifiers.ToArray();
.Select(m => m.GetReloadModifier());
FireDelay = Util.ApplyPercentageModifiers(Weapon.ReloadDelay, modifiers); FireDelay = Util.ApplyPercentageModifiers(Weapon.ReloadDelay, modifiers);
Burst = Weapon.Burst; Burst = Weapon.Burst;