Cache traits implementing modifiers
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user