diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 2746f526c2..1050c2559e 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.Common.Traits public class CloakType { } [Desc("This unit can cloak and uncloak in specific situations.")] - public class CloakInfo : ConditionalTraitInfo + public class CloakInfo : PausableConditionalTraitInfo { [Desc("Measured in game ticks.")] public readonly int InitialDelay = 10; @@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new Cloak(this); } } - public class Cloak : ConditionalTrait, IRenderModifier, INotifyDamage, INotifyUnload, INotifyDemolition, INotifyInfiltration, + public class Cloak : PausableConditionalTrait, IRenderModifier, INotifyDamage, INotifyUnload, INotifyDemolition, INotifyInfiltration, INotifyAttack, ITick, IVisibilityModifier, IRadarColorModifier, INotifyCreated, INotifyHarvesterAction { [Sync] int remainingTime; @@ -102,7 +102,7 @@ namespace OpenRA.Mods.Common.Traits base.Created(self); } - public bool Cloaked { get { return !IsTraitDisabled && remainingTime <= 0; } } + public bool Cloaked { get { return !IsTraitDisabled && !IsTraitPaused && remainingTime <= 0; } } public void Uncloak() { Uncloak(Info.CloakDelay); } @@ -126,7 +126,7 @@ namespace OpenRA.Mods.Common.Traits IEnumerable IRenderModifier.ModifyRender(Actor self, WorldRenderer wr, IEnumerable r) { - if (remainingTime > 0 || IsTraitDisabled) + if (remainingTime > 0 || IsTraitDisabled || IsTraitPaused) return r; if (Cloaked && IsVisible(self, self.World.RenderPlayer)) @@ -148,7 +148,7 @@ namespace OpenRA.Mods.Common.Traits void ITick.Tick(Actor self) { - if (!IsTraitDisabled) + if (!IsTraitDisabled && !IsTraitPaused) { if (remainingTime > 0 && !isDocking) remainingTime--; @@ -183,6 +183,11 @@ namespace OpenRA.Mods.Common.Traits firstTick = false; } + protected override void TraitEnabled(Actor self) + { + remainingTime = Info.InitialDelay; + } + protected override void TraitDisabled(Actor self) { Uncloak(); } public bool IsVisible(Actor self, Player viewer)