diff --git a/OpenRA.Mods.Common/Traits/Armament.cs b/OpenRA.Mods.Common/Traits/Armament.cs index 415ee9fc78..05d892d0b0 100644 --- a/OpenRA.Mods.Common/Traits/Armament.cs +++ b/OpenRA.Mods.Common/Traits/Armament.cs @@ -108,7 +108,12 @@ namespace OpenRA.Mods.Common.Traits AmmoPool ammoPool; BodyOrientation coords; INotifyBurstComplete[] notifyBurstComplete; + IEnumerable rangeModifiers; + IEnumerable reloadModifiers; + IEnumerable damageModifiers; + IEnumerable inaccuracyModifiers; + List> delayedActions = new List>(); public WDist Recoil; @@ -142,7 +147,7 @@ namespace OpenRA.Mods.Common.Traits 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) @@ -151,7 +156,11 @@ namespace OpenRA.Mods.Common.Traits ammoPool = self.TraitsImplementing().FirstOrDefault(la => la.Info.Name == Info.AmmoPoolName); coords = self.Trait(); notifyBurstComplete = self.TraitsImplementing().ToArray(); + rangeModifiers = self.TraitsImplementing().ToArray().Select(m => m.GetRangeModifier()); + reloadModifiers = self.TraitsImplementing().ToArray().Select(m => m.GetReloadModifier()); + damageModifiers = self.TraitsImplementing().ToArray().Select(m => m.GetFirepowerModifier()); + inaccuracyModifiers = self.TraitsImplementing().ToArray().Select(m => m.GetInaccuracyModifier()); base.Created(self); } @@ -226,14 +235,11 @@ namespace OpenRA.Mods.Common.Traits Weapon = Weapon, Facing = legacyFacing, - DamageModifiers = self.TraitsImplementing() - .Select(a => a.GetFirepowerModifier()).ToArray(), + DamageModifiers = damageModifiers.ToArray(), - InaccuracyModifiers = self.TraitsImplementing() - .Select(a => a.GetInaccuracyModifier()).ToArray(), + InaccuracyModifiers = inaccuracyModifiers.ToArray(), - RangeModifiers = self.TraitsImplementing() - .Select(a => a.GetRangeModifier()).ToArray(), + RangeModifiers = rangeModifiers.ToArray(), Source = muzzlePosition(), CurrentSource = muzzlePosition, @@ -270,8 +276,7 @@ namespace OpenRA.Mods.Common.Traits FireDelay = Weapon.BurstDelay; else { - var modifiers = self.TraitsImplementing() - .Select(m => m.GetReloadModifier()); + var modifiers = reloadModifiers.ToArray(); FireDelay = Util.ApplyPercentageModifiers(Weapon.ReloadDelay, modifiers); Burst = Weapon.Burst;