Perform FogObscures as late as possible

FogObscures is more expensive than simpler boolean, player or HasTraitInfo checks, so in these places it makes sense to perform the other checks first.
This commit is contained in:
reaperrr
2017-08-05 22:43:09 +02:00
committed by abcdefg30
parent 99dac05fd7
commit d949e17b88
7 changed files with 11 additions and 13 deletions

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Orders
static Target TargetForInput(World world, CPos cell, int2 worldPixel, MouseInput mi)
{
var actor = world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && a.Info.HasTraitInfo<ITargetableInfo>())
.Where(a => a.Info.HasTraitInfo<ITargetableInfo>() && !world.FogObscures(a))
.WithHighestSelectionPriority(worldPixel);
if (actor != null)

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Mods.Common.Effects
public IEnumerable<IRenderable> Render(WorldRenderer wr)
{
if (world.FogObscures(pos) && !visibleThroughFog)
if (!visibleThroughFog && world.FogObscures(pos))
return SpriteRenderable.None;
var zoom = scaleSizeWithZoom ? 1f / wr.Viewport.Zoom : 1f;

View File

@@ -57,9 +57,10 @@ namespace OpenRA.Mods.Common.Orders
static IEnumerable<Actor> FriendlyGuardableUnits(World world, MouseInput mi)
{
return world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && !a.IsDead &&
.Where(a => !a.IsDead &&
a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) &&
a.Info.HasTraitInfo<GuardableInfo>());
a.Info.HasTraitInfo<GuardableInfo>() &&
!world.FogObscures(a));
}
}
}

View File

@@ -159,10 +159,7 @@ namespace OpenRA.Mods.Common.Traits.Render
if (info.ShadowImage == null)
return Enumerable.Empty<IRenderable>();
if (IsTraitDisabled)
return Enumerable.Empty<IRenderable>();
if (self.IsDead || !self.IsInWorld)
if (IsTraitDisabled || self.IsDead || !self.IsInWorld)
return Enumerable.Empty<IRenderable>();
if (self.World.FogObscures(self))

View File

@@ -49,10 +49,10 @@ namespace OpenRA.Mods.Common.Traits.Render
IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{
if (self.World.FogObscures(self))
if (self.Owner != wr.World.LocalPlayer)
yield break;
if (self.Owner != wr.World.LocalPlayer)
if (self.World.FogObscures(self))
yield break;
var pal = wr.Palette(Info.Palette);

View File

@@ -66,10 +66,10 @@ namespace OpenRA.Mods.Common.Traits.Render
IEnumerable<IRenderable> IRenderAboveShroudWhenSelected.RenderAboveShroud(Actor self, WorldRenderer wr)
{
if (self.World.FogObscures(self))
if (self.Owner != wr.World.LocalPlayer)
yield break;
if (self.Owner != wr.World.LocalPlayer)
if (self.World.FogObscures(self))
yield break;
foreach (var r in DrawControlGroup(self, wr))

View File

@@ -185,7 +185,7 @@ namespace OpenRA.Mods.Common.Widgets
var worldPixel = worldRenderer.Viewport.ViewToWorldPx(Viewport.LastMousePos);
var underCursor = world.ScreenMap.ActorsAt(worldPixel)
.Where(a => !world.FogObscures(a) && a.Info.HasTraitInfo<ITooltipInfo>())
.Where(a => a.Info.HasTraitInfo<ITooltipInfo>() && !world.FogObscures(a))
.WithHighestSelectionPriority(worldPixel);
if (underCursor != null)