Merge pull request #8432 from pchote/shroud-wpos

Add WPos shroud visibility queries.
This commit is contained in:
Oliver Brakmann
2015-06-07 21:57:39 +02:00
13 changed files with 25 additions and 24 deletions

View File

@@ -292,6 +292,11 @@ namespace OpenRA.Traits
Invalidate(changed);
}
public bool IsExplored(WPos pos)
{
return IsExplored(map.CellContaining(pos));
}
public bool IsExplored(CPos cell)
{
return IsExplored(cell.ToMPos(map));
@@ -334,6 +339,11 @@ namespace OpenRA.Traits
return GetVisOrigins(a).Any(IsExplored);
}
public bool IsVisible(WPos pos)
{
return IsVisible(map.CellContaining(pos));
}
public bool IsVisible(CPos cell)
{
var uv = cell.ToMPos(map);

View File

@@ -72,8 +72,10 @@ namespace OpenRA
public bool FogObscures(Actor a) { return RenderPlayer != null && !RenderPlayer.Shroud.IsVisible(a); }
public bool FogObscures(CPos p) { return RenderPlayer != null && !RenderPlayer.Shroud.IsVisible(p); }
public bool FogObscures(WPos pos) { return RenderPlayer != null && !RenderPlayer.Shroud.IsVisible(pos); }
public bool ShroudObscures(Actor a) { return RenderPlayer != null && !RenderPlayer.Shroud.IsExplored(a); }
public bool ShroudObscures(CPos p) { return RenderPlayer != null && !RenderPlayer.Shroud.IsExplored(p); }
public bool ShroudObscures(WPos pos) { return RenderPlayer != null && !RenderPlayer.Shroud.IsExplored(pos); }
public bool ShroudObscures(MPos uv) { return RenderPlayer != null && !RenderPlayer.Shroud.IsExplored(uv); }
public Func<MPos, bool> FogObscuresTest(CellRegion region)

View File

@@ -158,8 +158,7 @@ namespace OpenRA.Mods.Common.Effects
if (anim == null || ticks >= length)
yield break;
var cell = wr.World.Map.CellContaining(pos);
if (!args.SourceActor.World.FogObscures(cell))
if (!args.SourceActor.World.FogObscures(pos))
{
if (info.Shadow)
{

View File

@@ -18,7 +18,6 @@ namespace OpenRA.Mods.Common.Effects
{
readonly World world;
readonly WPos pos;
readonly CPos cell;
readonly string paletteName;
readonly Animation anim;
@@ -26,7 +25,6 @@ namespace OpenRA.Mods.Common.Effects
{
this.world = world;
this.pos = pos;
this.cell = world.Map.CellContaining(pos);
this.paletteName = paletteName;
anim = new Animation(world, image);
anim.PlayThen(sequence, () => world.AddFrameEndTask(w => w.Remove(this)));
@@ -36,7 +34,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (world.FogObscures(cell))
if (world.FogObscures(pos))
return SpriteRenderable.None;
return anim.Render(pos, wr.Palette(paletteName));

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (!a.IsInWorld || a.World.FogObscures(a.Location))
if (!a.IsInWorld || a.World.FogObscures(a.CenterPosition))
return SpriteRenderable.None;
return anim.Render(a.CenterPosition, wr.Palette(palette));

View File

@@ -20,13 +20,11 @@ namespace OpenRA.Mods.Common.Effects
readonly string palette;
readonly Animation anim;
WPos pos;
CPos cell;
public Explosion(World world, WPos pos, string sequence, string palette)
{
this.world = world;
this.pos = pos;
this.cell = world.Map.CellContaining(pos);
this.palette = palette;
anim = new Animation(world, "explosion");
anim.PlayThen(sequence, () => world.AddFrameEndTask(w => w.Remove(this)));
@@ -36,7 +34,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (world.FogObscures(cell))
if (world.FogObscures(pos))
return SpriteRenderable.None;
return anim.Render(pos, wr.Palette(palette));

View File

@@ -46,7 +46,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (wr.World.FogObscures(wr.World.Map.CellContaining(pos)))
if (wr.World.FogObscures(pos))
yield break;
yield return new TextRenderable(font, pos, 0, color, text);

View File

@@ -78,8 +78,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
var cell = wr.World.Map.CellContaining(pos);
if (!args.SourceActor.World.FogObscures(cell))
if (!args.SourceActor.World.FogObscures(pos))
{
if (info.Shadow)
{

View File

@@ -85,8 +85,8 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (wr.World.FogObscures(wr.World.Map.CellContaining(target)) &&
wr.World.FogObscures(wr.World.Map.CellContaining(args.Source)))
if (wr.World.FogObscures(target) &&
wr.World.FogObscures(args.Source))
yield break;
if (ticks < info.BeamDuration)

View File

@@ -210,7 +210,7 @@ namespace OpenRA.Mods.Common.Effects
if (info.ContrailLength > 0)
yield return contrail;
if (!args.SourceActor.World.FogObscures(wr.World.Map.CellContaining(pos)))
if (!args.SourceActor.World.FogObscures(pos))
{
if (info.Shadow)
{

View File

@@ -18,7 +18,6 @@ namespace OpenRA.Mods.Common.Effects
{
readonly World world;
readonly WPos pos;
readonly CPos cell;
readonly Animation anim;
readonly string palette;
@@ -26,7 +25,6 @@ namespace OpenRA.Mods.Common.Effects
{
this.world = world;
this.pos = pos;
this.cell = world.Map.CellContaining(pos);
this.palette = palette;
anim = new Animation(world, trail);
@@ -38,7 +36,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (world.FogObscures(cell))
if (world.FogObscures(pos))
return SpriteRenderable.None;
return anim.Render(pos, wr.Palette(palette));

View File

@@ -65,20 +65,17 @@ namespace OpenRA.Mods.Common.Graphics
// Start of the first line segment is the tail of the list - don't smooth it.
var curPos = trail[Index(next - skip - 1)];
var curCell = wr.World.Map.CellContaining(curPos);
var curColor = color;
for (var i = 0; i < length - skip - 4; i++)
{
var j = next - skip - i - 2;
var nextPos = Average(trail[Index(j)], trail[Index(j - 1)], trail[Index(j - 2)], trail[Index(j - 3)]);
var nextCell = wr.World.Map.CellContaining(nextPos);
var nextColor = Exts.ColorLerp(i * 1f / (length - 4), color, Color.Transparent);
if (!world.FogObscures(curCell) && !world.FogObscures(nextCell))
if (!world.FogObscures(curPos) && !world.FogObscures(nextPos))
wlr.DrawLine(wr.ScreenPosition(curPos), wr.ScreenPosition(nextPos), curColor, nextColor);
curPos = nextPos;
curCell = nextCell;
curColor = nextColor;
}

View File

@@ -70,8 +70,8 @@ namespace OpenRA.Mods.RA.Graphics
public void RenderDebugGeometry(WorldRenderer wr) { }
public void Render(WorldRenderer wr)
{
if (wr.World.FogObscures(wr.World.Map.CellContaining(pos)) &&
wr.World.FogObscures(wr.World.Map.CellContaining(pos + length)))
if (wr.World.FogObscures(pos) &&
wr.World.FogObscures(pos + length))
return;
if (!cache.Any() || length != cachedLength || pos != cachedPos)