diff --git a/OpenRA.Game/Traits/World/SpatialBins.cs b/OpenRA.Game/Traits/World/SpatialBins.cs index ddfac0fbec..1a02379331 100644 --- a/OpenRA.Game/Traits/World/SpatialBins.cs +++ b/OpenRA.Game/Traits/World/SpatialBins.cs @@ -52,6 +52,8 @@ namespace OpenRA.Traits IEnumerable ActorsInBins(int i1, int i2, int j1, int j2) { + j1 = Math.Max(0, j1); j2 = Math.Min(j2, bins.GetUpperBound(1) - 1); + i1 = Math.Max(0, i1); i2 = Math.Min(i2, bins.GetUpperBound(0) - 1); for (var j = j1; j <= j2; j++) for (var i = i1; i <= i2; i++) foreach (var a in bins[i, j]) @@ -60,13 +62,9 @@ namespace OpenRA.Traits public IEnumerable ActorsInBox(int2 a, int2 b) { - var r = RectangleF.FromLTRB( a.X, a.Y, b.X, b.Y ); + var r = RectangleF.FromLTRB(a.X, a.Y, b.X, b.Y); - return ActorsInBins( - a.X / scale, - a.Y / scale, - b.X / scale, - b.Y / scale) + return ActorsInBins(a.X / scale, a.Y / scale, b.X / scale, b.Y / scale) .Distinct() .Where(u => u.GetBounds(true).IntersectsWith(r)); }