Fix RevealsMap's effect not being removed for non-owners.
This commit is contained in:
committed by
Matthias Mailänder
parent
c6dacb50e8
commit
721210eafe
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user