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)
|
public void Explore(World world, IEnumerable<CPos> cells)
|
||||||
{
|
{
|
||||||
var changed = new HashSet<CPos>();
|
var changed = new HashSet<CPos>();
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
public readonly WRange Range = WRange.Zero;
|
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); }
|
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)
|
if (range == WRange.Zero)
|
||||||
return NoCells;
|
return NoCells;
|
||||||
|
|
||||||
return Shroud.GetVisOrigins(self)
|
if (info.Type == VisibilityType.Footprint)
|
||||||
.SelectMany(c => Shroud.CellsInRange(map, c, range))
|
return self.OccupiesSpace.OccupiedCells()
|
||||||
|
.SelectMany(kv => Shroud.CellsInRange(map, kv.First, range))
|
||||||
.Distinct().ToArray();
|
.Distinct().ToArray();
|
||||||
|
|
||||||
|
return Shroud.CellsInRange(map, self.CenterPosition, range)
|
||||||
|
.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(Actor self)
|
public void Tick(Actor self)
|
||||||
|
|||||||
Reference in New Issue
Block a user