diff --git a/OpenRA.Game/Orders/UnitOrderGenerator.cs b/OpenRA.Game/Orders/UnitOrderGenerator.cs index 4a4713d5c0..4613ee6dff 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.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi.Location) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi) .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.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi.Location) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, mi) .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 32726547b0..6b102bff94 100755 --- a/OpenRA.Game/Traits/World/ScreenMap.cs +++ b/OpenRA.Game/Traits/World/ScreenMap.cs @@ -110,24 +110,29 @@ namespace OpenRA.Traits } public static readonly IEnumerable NoFrozenActors = new FrozenActor[0].AsEnumerable(); - public IEnumerable FrozenActorsAt(Player viewer, int2 pxPos) + public IEnumerable FrozenActorsAt(Player viewer, int2 worldPx) { 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); + var i = (worldPx.X / info.BinSize).Clamp(0, cols - 1); + var j = (worldPx.Y / info.BinSize).Clamp(0, rows - 1); return frozen[viewer][j*cols + i] - .Where(kv => kv.Key.IsValid && kv.Value.Contains(pxPos)) + .Where(kv => kv.Key.IsValid && kv.Value.Contains(worldPx)) .Select(kv => kv.Key); } - public IEnumerable ActorsAt(int2 pxPos) + public IEnumerable FrozenActorsAt(Player viewer, MouseInput mi) { - var i = (pxPos.X / info.BinSize).Clamp(0, cols - 1); - var j = (pxPos.Y / info.BinSize).Clamp(0, rows - 1); + return FrozenActorsAt(viewer, worldRenderer.Viewport.ViewToWorldPx(mi.Location)); + } + + public IEnumerable ActorsAt(int2 worldPx) + { + var i = (worldPx.X / info.BinSize).Clamp(0, cols - 1); + var j = (worldPx.Y / info.BinSize).Clamp(0, rows - 1); return actors[j * cols + i] - .Where(kv => kv.Key.IsInWorld && kv.Value.Contains(pxPos)) + .Where(kv => kv.Key.IsInWorld && kv.Value.Contains(worldPx)) .Select(kv => kv.Key); } diff --git a/OpenRA.Game/Widgets/ViewportControllerWidget.cs b/OpenRA.Game/Widgets/ViewportControllerWidget.cs index b6dd8ddfd6..8ee5bc8052 100644 --- a/OpenRA.Game/Widgets/ViewportControllerWidget.cs +++ b/OpenRA.Game/Widgets/ViewportControllerWidget.cs @@ -117,7 +117,7 @@ namespace OpenRA.Widgets return; } - var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, Viewport.LastMousePos) + var frozen = world.ScreenMap.FrozenActorsAt(world.RenderPlayer, worldRenderer.Viewport.ViewToWorldPx(Viewport.LastMousePos)) .Where(a => a.TooltipName != null) .OrderByDescending(a => a.Info.SelectionPriority()) .FirstOrDefault();