Serialize the correct player in FrozenActor-targeting orders.
This commit is contained in:
@@ -284,7 +284,7 @@ namespace OpenRA
|
|||||||
w.Write(UIntFromActor(Target.SerializableActor));
|
w.Write(UIntFromActor(Target.SerializableActor));
|
||||||
break;
|
break;
|
||||||
case TargetType.FrozenActor:
|
case TargetType.FrozenActor:
|
||||||
w.Write(Target.FrozenActor.Owner.PlayerActor.ActorID);
|
w.Write(Target.FrozenActor.Viewer.PlayerActor.ActorID);
|
||||||
w.Write(Target.FrozenActor.ID);
|
w.Write(Target.FrozenActor.ID);
|
||||||
break;
|
break;
|
||||||
case TargetType.Terrain:
|
case TargetType.Terrain:
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ namespace OpenRA.Traits
|
|||||||
public readonly PPos[] Footprint;
|
public readonly PPos[] Footprint;
|
||||||
public readonly WPos CenterPosition;
|
public readonly WPos CenterPosition;
|
||||||
readonly Actor actor;
|
readonly Actor actor;
|
||||||
|
readonly Player viewer;
|
||||||
readonly Shroud shroud;
|
readonly Shroud shroud;
|
||||||
|
|
||||||
public Player Owner { get; private set; }
|
public Player Owner { get; private set; }
|
||||||
@@ -59,10 +60,11 @@ namespace OpenRA.Traits
|
|||||||
|
|
||||||
int flashTicks;
|
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.actor = actor;
|
||||||
this.shroud = shroud;
|
this.viewer = viewer;
|
||||||
|
shroud = viewer.Shroud;
|
||||||
NeedRenderables = startsRevealed;
|
NeedRenderables = startsRevealed;
|
||||||
|
|
||||||
// Consider all cells inside the map area (ignoring the current map bounds)
|
// 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 => p.ToString()).JoinWith("|"),
|
||||||
footprint.Select(p => shroud.Contains(p).ToString()).JoinWith("|")));
|
footprint.Select(p => shroud.Contains(p).ToString()).JoinWith("|")));
|
||||||
|
|
||||||
CenterPosition = self.CenterPosition;
|
CenterPosition = actor.CenterPosition;
|
||||||
TargetTypes = new HashSet<string>();
|
TargetTypes = new HashSet<string>();
|
||||||
|
|
||||||
tooltips = self.TraitsImplementing<ITooltip>().ToArray();
|
tooltips = actor.TraitsImplementing<ITooltip>().ToArray();
|
||||||
health = self.TraitOrDefault<IHealth>();
|
health = actor.TraitOrDefault<IHealth>();
|
||||||
|
|
||||||
UpdateVisibility();
|
UpdateVisibility();
|
||||||
}
|
}
|
||||||
@@ -94,6 +96,7 @@ namespace OpenRA.Traits
|
|||||||
public bool IsValid { get { return Owner != null; } }
|
public bool IsValid { get { return Owner != null; } }
|
||||||
public ActorInfo Info { get { return actor.Info; } }
|
public ActorInfo Info { get { return actor.Info; } }
|
||||||
public Actor Actor { get { return !actor.IsDead ? actor : null; } }
|
public Actor Actor { get { return !actor.IsDead ? actor : null; } }
|
||||||
|
public Player Viewer { get { return viewer; } }
|
||||||
|
|
||||||
public void RefreshState()
|
public void RefreshState()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
frozenStates = new PlayerDictionary<FrozenState>(self.World, (player, playerIndex) =>
|
frozenStates = new PlayerDictionary<FrozenState>(self.World, (player, playerIndex) =>
|
||||||
{
|
{
|
||||||
var frozenActor = new FrozenActor(self, footprint, player.Shroud, startsRevealed);
|
var frozenActor = new FrozenActor(self, footprint, player, startsRevealed);
|
||||||
if (startsRevealed)
|
if (startsRevealed)
|
||||||
UpdateFrozenActor(self, frozenActor, playerIndex);
|
UpdateFrozenActor(self, frozenActor, playerIndex);
|
||||||
player.PlayerActor.Trait<FrozenActorLayer>().Add(frozenActor);
|
player.PlayerActor.Trait<FrozenActorLayer>().Add(frozenActor);
|
||||||
|
|||||||
Reference in New Issue
Block a user