diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 7f6bf3fe33..1f571a7f0a 100644 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -284,7 +284,7 @@ namespace OpenRA w.Write(UIntFromActor(Target.SerializableActor)); break; case TargetType.FrozenActor: - w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID); + w.Write(Target.FrozenActor.Viewer.PlayerActor.ActorID); w.Write(Target.FrozenActor.ID); break; case TargetType.Terrain: diff --git a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs index 825b303e77..0f2ac4963a 100644 --- a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs +++ b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs @@ -32,6 +32,7 @@ namespace OpenRA.Traits public readonly PPos[] Footprint; public readonly WPos CenterPosition; readonly Actor actor; + readonly Player viewer; readonly Shroud shroud; public Player Owner { get; private set; } @@ -59,10 +60,11 @@ namespace OpenRA.Traits int flashTicks; - public FrozenActor(Actor self, PPos[] footprint, Shroud shroud, bool startsRevealed) + public FrozenActor(Actor actor, PPos[] footprint, Player viewer, bool startsRevealed) { - actor = self; - this.shroud = shroud; + this.actor = actor; + this.viewer = viewer; + shroud = viewer.Shroud; NeedRenderables = startsRevealed; // Consider all cells inside the map area (ignoring the current map bounds) @@ -81,11 +83,11 @@ namespace OpenRA.Traits footprint.Select(p => p.ToString()).JoinWith("|"), footprint.Select(p => shroud.Contains(p).ToString()).JoinWith("|"))); - CenterPosition = self.CenterPosition; + CenterPosition = actor.CenterPosition; TargetTypes = new HashSet(); - tooltips = self.TraitsImplementing().ToArray(); - health = self.TraitOrDefault(); + tooltips = actor.TraitsImplementing().ToArray(); + health = actor.TraitOrDefault(); UpdateVisibility(); } @@ -94,6 +96,7 @@ namespace OpenRA.Traits public bool IsValid { get { return Owner != null; } } public ActorInfo Info { get { return actor.Info; } } public Actor Actor { get { return !actor.IsDead ? actor : null; } } + public Player Viewer { get { return viewer; } } public void RefreshState() { diff --git a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs index c83aed1aef..5886a43694 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/FrozenUnderFog.cs @@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits { frozenStates = new PlayerDictionary(self.World, (player, playerIndex) => { - var frozenActor = new FrozenActor(self, footprint, player.Shroud, startsRevealed); + var frozenActor = new FrozenActor(self, footprint, player, startsRevealed); if (startsRevealed) UpdateFrozenActor(self, frozenActor, playerIndex); player.PlayerActor.Trait().Add(frozenActor);