diff --git a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs index 0cae87a5ee..002c65feb6 100644 --- a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs +++ b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs @@ -36,13 +36,15 @@ namespace OpenRA.Traits readonly Actor actor; readonly Shroud shroud; - public Player Owner; + public Player Owner { get; private set; } - public ITooltipInfo TooltipInfo; - public Player TooltipOwner; + public ITooltipInfo TooltipInfo { get; private set; } + public Player TooltipOwner { get; private set; } + readonly ITooltip tooltip; - public int HP; - public DamageState DamageState; + public int HP { get; private set; } + public DamageState DamageState { get; private set; } + readonly IHealth health; public bool Visible = true; public bool Shrouded { get; private set; } @@ -68,6 +70,9 @@ namespace OpenRA.Traits Bounds = self.Bounds; TargetTypes = self.GetEnabledTargetTypes().ToHashSet(); + tooltip = self.TraitsImplementing().FirstOrDefault(); + health = self.TraitOrDefault(); + UpdateVisibility(); } @@ -76,6 +81,23 @@ namespace OpenRA.Traits public ActorInfo Info { get { return actor.Info; } } public Actor Actor { get { return !actor.IsDead ? actor : null; } } + public void RefreshState() + { + Owner = actor.Owner; + + if (health != null) + { + HP = health.HP; + DamageState = health.DamageState; + } + + if (tooltip != null) + { + TooltipInfo = tooltip.TooltipInfo; + TooltipOwner = tooltip.Owner; + } + } + public void Tick() { if (flashTicks > 0) diff --git a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs index 131edee0d0..969a644c5b 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs @@ -37,8 +37,6 @@ namespace OpenRA.Mods.Common.Traits readonly PPos[] footprint; PlayerDictionary frozenStates; - ITooltip tooltip; - Health health; bool isRendering; class FrozenState @@ -65,9 +63,6 @@ namespace OpenRA.Mods.Common.Traits public void Created(Actor self) { - tooltip = self.TraitsImplementing().FirstOrDefault(); - health = self.TraitOrDefault(); - frozenStates = new PlayerDictionary(self.World, (player, playerIndex) => { var frozenActor = new FrozenActor(self, footprint, player.Shroud, startsRevealed); @@ -81,20 +76,7 @@ namespace OpenRA.Mods.Common.Traits void UpdateFrozenActor(Actor self, FrozenActor frozenActor, int playerIndex) { VisibilityHash |= 1 << (playerIndex % 32); - - frozenActor.Owner = self.Owner; - - if (health != null) - { - frozenActor.HP = health.HP; - frozenActor.DamageState = health.DamageState; - } - - if (tooltip != null) - { - frozenActor.TooltipInfo = tooltip.TooltipInfo; - frozenActor.TooltipOwner = tooltip.Owner; - } + frozenActor.RefreshState(); } bool IsVisibleInner(Actor self, Player byPlayer)