diff --git a/OpenRA.Mods.Common/Traits/RevealsMap.cs b/OpenRA.Mods.Common/Traits/RevealsMap.cs index 5ca22337e5..baad3d515f 100644 --- a/OpenRA.Mods.Common/Traits/RevealsMap.cs +++ b/OpenRA.Mods.Common/Traits/RevealsMap.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Traits public override object Create(ActorInitializer init) { return new RevealsMap(this); } } - public class RevealsMap : ConditionalTrait, INotifyKilled, INotifyActorDisposing + public class RevealsMap : ConditionalTrait, INotifyKilled, INotifyActorDisposing, INotifyOwnerChanged { readonly Shroud.SourceType type; @@ -51,25 +51,42 @@ namespace OpenRA.Mods.Common.Traits return self.World.Map.ProjectedCells; } + void INotifyOwnerChanged.OnOwnerChanged(Actor self, Player oldOwner, Player newOwner) + { + if (!IsTraitDisabled) + { + var cells = ProjectedCells(self); + foreach (var player in self.World.Players) + { + RemoveCellsFromPlayerShroud(self, player); + AddCellsToPlayerShroud(self, player, cells); + } + } + } + void INotifyActorDisposing.Disposing(Actor self) { - RemoveCellsFromPlayerShroud(self, self.Owner); + foreach (var player in self.World.Players) + RemoveCellsFromPlayerShroud(self, player); } void INotifyKilled.Killed(Actor self, AttackInfo e) { - RemoveCellsFromPlayerShroud(self, self.Owner); + foreach (var player in self.World.Players) + RemoveCellsFromPlayerShroud(self, player); } protected override void TraitEnabled(Actor self) { + var cells = ProjectedCells(self); foreach (var player in self.World.Players) - AddCellsToPlayerShroud(self, player, ProjectedCells(self)); + AddCellsToPlayerShroud(self, player, cells); } protected override void TraitDisabled(Actor self) { - RemoveCellsFromPlayerShroud(self, self.Owner); + foreach (var player in self.World.Players) + RemoveCellsFromPlayerShroud(self, player); } } }