Cache the notifyAttacks in AttackGarrisoned

This commit is contained in:
dnqbob
2023-05-09 19:49:14 +08:00
committed by abcdefg30
parent 6e6bf1ca81
commit a65bb17d68

View File

@@ -78,6 +78,7 @@ namespace OpenRA.Mods.Common.Traits
public class AttackGarrisoned : AttackFollow, INotifyPassengerEntered, INotifyPassengerExited, IRender
{
public new readonly AttackGarrisonedInfo Info;
INotifyAttack[] notifyAttacks;
readonly Lazy<BodyOrientation> coords;
readonly List<Armament> armaments;
readonly List<AnimationWithOffset> muzzles;
@@ -97,6 +98,12 @@ namespace OpenRA.Mods.Common.Traits
paxRender = new Dictionary<Actor, RenderSprites>();
}
protected override void Created(Actor self)
{
notifyAttacks = self.TraitsImplementing<INotifyAttack>().ToArray();
base.Created(self);
}
protected override Func<IEnumerable<Armament>> InitializeGetArmaments(Actor self)
{
return () => armaments;
@@ -182,7 +189,7 @@ namespace OpenRA.Mods.Common.Traits
muzzleAnim.PlayThen(sequence, () => muzzles.Remove(muzzleFlash));
}
foreach (var npa in self.TraitsImplementing<INotifyAttack>())
foreach (var npa in notifyAttacks)
npa.Attacking(self, target, a, barrel);
}
}