Fix mine layer desync.

World.FogObscures depends on the local RenderPlayer and should not
be used from simulation code!
This commit is contained in:
Paul Chote
2020-04-11 10:04:11 +01:00
committed by abcdefg30
parent e5457a3390
commit f0a243ca10
2 changed files with 2 additions and 2 deletions

View File

@@ -109,7 +109,7 @@ namespace OpenRA.Mods.Cnc.Activities
var positionable = (IPositionable)movement;
minefield.RemoveAll(c => self.World.ActorMap.GetActorsAt(c)
.Any(a => a.Info.Name == minelayer.Info.Mine.ToLowerInvariant() && a.CanBeViewedByPlayer(self.Owner)) ||
(!positionable.CanEnterCell(c, null, BlockedByActor.Immovable) && !self.World.FogObscures(c)));
(!positionable.CanEnterCell(c, null, BlockedByActor.Immovable) && self.Owner.Shroud.IsVisible(c)));
}
}

View File

@@ -115,7 +115,7 @@ namespace OpenRA.Mods.Cnc.Traits
var movement = self.Trait<IPositionable>();
var minefield = GetMinefieldCells(minefieldStart, cell, Info.MinefieldDepth)
.Where(c => movement.CanEnterCell(c, null, BlockedByActor.Immovable) || self.World.FogObscures(c))
.Where(c => movement.CanEnterCell(c, null, BlockedByActor.Immovable) || !self.Owner.Shroud.IsVisible(c))
.OrderBy(c => (c - minefieldStart).LengthSquared).ToList();
self.QueueActivity(order.Queued, new LayMines(self, minefield));