diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index 379157d741..4a4713d5c0 100644 --- a/OpenRA.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRA.Game/Orders/UnitOrderGenerator.cs @@ -29,7 +29,7 @@ namespace OpenRA.Orders target = Target.FromActor(underCursor); else { - var frozen = world.FindFrozenActorsAtMouse(mi.Location) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi.Location) .Where(a => a.Info.Traits.Contains()) .OrderByDescending(a => a.Info.SelectionPriority()) .FirstOrDefault(); @@ -77,7 +77,7 @@ namespace OpenRA.Orders target = Target.FromActor(underCursor); else { - var frozen = world.FindFrozenActorsAtMouse(mi.Location) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi.Location) .Where(a => a.Info.Traits.Contains()) .OrderByDescending(a => a.Info.SelectionPriority()) .FirstOrDefault(); diff --git a/OpenRA.Game/Traits/World/ScreenMap.cs b/OpenRA.Game/Traits/World/ScreenMap.cs index 8c0ae310a8..32726547b0 100755 --- a/OpenRA.Game/Traits/World/ScreenMap.cs +++ b/OpenRA.Game/Traits/World/ScreenMap.cs @@ -109,8 +109,12 @@ namespace OpenRA.Traits Add(a); } + public static readonly IEnumerable NoFrozenActors = new FrozenActor[0].AsEnumerable(); public IEnumerable FrozenActorsAt(Player viewer, int2 pxPos) { + if (viewer == null) + return NoFrozenActors; + var i = (pxPos.X / info.BinSize).Clamp(0, cols - 1); var j = (pxPos.Y / info.BinSize).Clamp(0, rows - 1); return frozen[viewer][j*cols + i] diff --git a/OpenRA.Game/Widgets/ViewportControllerWidget.cs b/OpenRA.Game/Widgets/ViewportControllerWidget.cs index bf01e158de..9bcdd0f892 100644 --- a/OpenRA.Game/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportControllerWidget.cs @@ -117,7 +117,7 @@ namespace OpenRA.Widgets return; } - var frozen = world.FindFrozenActorsAtMouse(Viewport.LastMousePos) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, Viewport.LastMousePos) .Where(a => a.TooltipName != null) .OrderByDescending(a => a.Info.SelectionPriority()) .FirstOrDefault(); diff --git a/OpenRA.Game/WorldUtils.cs b/OpenRA.Game/WorldUtils.cs index 19450fe65f..eb5490e097 100755 --- a/OpenRA.Game/WorldUtils.cs +++ b/OpenRA.Game/WorldUtils.cs @@ -21,15 +21,6 @@ namespace OpenRA { public static class WorldUtils { - public static readonly IEnumerable NoFrozenActors = new FrozenActor[0].AsEnumerable(); - public static IEnumerable FindFrozenActorsAtMouse(this World world, int2 mouseLocation) - { - if (world.RenderPlayer == null) - return NoFrozenActors; - - return world.ScreenMap.FrozenActorsAt(world.RenderPlayer, Game.viewport.ViewToWorldPx(mouseLocation)); - } - public static IEnumerable FindActorsInBox(this World world, CPos tl, CPos br) { // TODO: Support diamond boxes for isometric maps?