Enable VisibilityType for shroud revealing.
VisibilityType.Footprint reveals from each footprint cell. VisibilityType.CenterPosition reveals from the actor’s CenterPosition only (as the original games did).
This commit is contained in:
@@ -183,21 +183,6 @@ namespace OpenRA.Traits
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Actor vis will be split into separate cases for
|
||||
// "cells that I reveal from" and "cells that reveal me"
|
||||
public static IEnumerable<CPos> GetVisOrigins(Actor a)
|
||||
{
|
||||
var ios = a.OccupiesSpace;
|
||||
if (ios != null)
|
||||
{
|
||||
var cells = ios.OccupiedCells();
|
||||
if (cells.Any())
|
||||
return cells.Select(c => c.First);
|
||||
}
|
||||
|
||||
return new[] { a.World.Map.CellContaining(a.CenterPosition) };
|
||||
}
|
||||
|
||||
public void Explore(World world, IEnumerable<CPos> cells)
|
||||
{
|
||||
var changed = new HashSet<CPos>();
|
||||
|
||||
@@ -18,6 +18,10 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
public readonly WRange Range = WRange.Zero;
|
||||
|
||||
[Desc("Possible values are CenterPosition (measure range from the center) and ",
|
||||
"Footprint (measure range from the footprint)")]
|
||||
public readonly VisibilityType Type = VisibilityType.Footprint;
|
||||
|
||||
public virtual object Create(ActorInitializer init) { return new RevealsShroud(init.Self, this); }
|
||||
}
|
||||
|
||||
@@ -51,9 +55,13 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (range == WRange.Zero)
|
||||
return NoCells;
|
||||
|
||||
return Shroud.GetVisOrigins(self)
|
||||
.SelectMany(c => Shroud.CellsInRange(map, c, range))
|
||||
if (info.Type == VisibilityType.Footprint)
|
||||
return self.OccupiesSpace.OccupiedCells()
|
||||
.SelectMany(kv => Shroud.CellsInRange(map, kv.First, range))
|
||||
.Distinct().ToArray();
|
||||
|
||||
return Shroud.CellsInRange(map, self.CenterPosition, range)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
public void Tick(Actor self)
|
||||
|
||||
Reference in New Issue
Block a user