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 class RevealsMap : ConditionalTrait<RevealsMapInfo>, INotifyKilled, INotifyActorDisposing
public class RevealsMap : ConditionalTrait<RevealsMapInfo>, 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);
}
}
}