Fix RevealsMap's effect not being removed for non-owners.

This commit is contained in:
Mustafa Alperen Seki
2021-02-10 18:19:20 +03:00
committed by Matthias Mailänder
parent c6dacb50e8
commit 721210eafe

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new RevealsMap(this); } public override object Create(ActorInitializer init) { return new RevealsMap(this); }
} }
public class RevealsMap : ConditionalTrait<RevealsMapInfo>, INotifyKilled, INotifyActorDisposing public class RevealsMap : ConditionalTrait<RevealsMapInfo>, INotifyKilled, INotifyActorDisposing, INotifyOwnerChanged
{ {
readonly Shroud.SourceType type; readonly Shroud.SourceType type;
@@ -51,25 +51,42 @@ namespace OpenRA.Mods.Common.Traits
return self.World.Map.ProjectedCells; 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) 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) 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) protected override void TraitEnabled(Actor self)
{ {
var cells = ProjectedCells(self);
foreach (var player in self.World.Players) foreach (var player in self.World.Players)
AddCellsToPlayerShroud(self, player, ProjectedCells(self)); AddCellsToPlayerShroud(self, player, cells);
} }
protected override void TraitDisabled(Actor self) protected override void TraitDisabled(Actor self)
{ {
RemoveCellsFromPlayerShroud(self, self.Owner); foreach (var player in self.World.Players)
RemoveCellsFromPlayerShroud(self, player);
} }
} }
} }