Remove unnecessary trait lookups when cloaking/decloaking.
This commit is contained in:
@@ -68,6 +68,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Sync] int remainingTime;
|
[Sync] int remainingTime;
|
||||||
bool isDocking;
|
bool isDocking;
|
||||||
ConditionManager conditionManager;
|
ConditionManager conditionManager;
|
||||||
|
Cloak[] otherCloaks;
|
||||||
|
|
||||||
CPos? lastPos;
|
CPos? lastPos;
|
||||||
bool wasCloaked = false;
|
bool wasCloaked = false;
|
||||||
@@ -83,6 +84,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
protected override void Created(Actor self)
|
protected override void Created(Actor self)
|
||||||
{
|
{
|
||||||
conditionManager = self.TraitOrDefault<ConditionManager>();
|
conditionManager = self.TraitOrDefault<ConditionManager>();
|
||||||
|
otherCloaks = self.TraitsImplementing<Cloak>()
|
||||||
|
.Where(c => c != this)
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
if (Cloaked)
|
if (Cloaked)
|
||||||
{
|
{
|
||||||
@@ -157,7 +161,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
cloakedToken = conditionManager.GrantCondition(self, Info.CloakedCondition);
|
cloakedToken = conditionManager.GrantCondition(self, Info.CloakedCondition);
|
||||||
|
|
||||||
// Sounds shouldn't play if the actor starts cloaked
|
// Sounds shouldn't play if the actor starts cloaked
|
||||||
if (!(firstTick && Info.InitialDelay == 0) && !self.TraitsImplementing<Cloak>().Any(a => a != this && a.Cloaked))
|
if (!(firstTick && Info.InitialDelay == 0) && !otherCloaks.Any(a => a.Cloaked))
|
||||||
Game.Sound.Play(SoundType.World, Info.CloakSound, self.CenterPosition);
|
Game.Sound.Play(SoundType.World, Info.CloakSound, self.CenterPosition);
|
||||||
}
|
}
|
||||||
else if (!isCloaked && wasCloaked)
|
else if (!isCloaked && wasCloaked)
|
||||||
@@ -165,7 +169,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (cloakedToken != ConditionManager.InvalidConditionToken)
|
if (cloakedToken != ConditionManager.InvalidConditionToken)
|
||||||
cloakedToken = conditionManager.RevokeCondition(self, cloakedToken);
|
cloakedToken = conditionManager.RevokeCondition(self, cloakedToken);
|
||||||
|
|
||||||
if (!(firstTick && Info.InitialDelay == 0) && !self.TraitsImplementing<Cloak>().Any(a => a != this && a.Cloaked))
|
if (!(firstTick && Info.InitialDelay == 0) && !otherCloaks.Any(a => a.Cloaked))
|
||||||
Game.Sound.Play(SoundType.World, Info.UncloakSound, self.CenterPosition);
|
Game.Sound.Play(SoundType.World, Info.UncloakSound, self.CenterPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user