Merge pull request #7093 from RoosterDragon/frozen-stream
Make FrozenActorsInBox a streaming enumerable.
This commit is contained in:
@@ -175,15 +175,17 @@ namespace OpenRA.Traits
|
|||||||
var right = (r.Right / info.BinSize).Clamp(0, cols - 1);
|
var right = (r.Right / info.BinSize).Clamp(0, cols - 1);
|
||||||
var top = (r.Top / info.BinSize).Clamp(0, rows - 1);
|
var top = (r.Top / info.BinSize).Clamp(0, rows - 1);
|
||||||
var bottom = (r.Bottom / info.BinSize).Clamp(0, rows - 1);
|
var bottom = (r.Bottom / info.BinSize).Clamp(0, rows - 1);
|
||||||
|
var bins = frozen[p];
|
||||||
|
|
||||||
var frozenInBox = new List<FrozenActor>();
|
var actorsChecked = new HashSet<FrozenActor>();
|
||||||
for (var j = top; j <= bottom; j++)
|
for (var j = top; j <= bottom; j++)
|
||||||
for (var i = left; i <= right; i++)
|
for (var i = left; i <= right; i++)
|
||||||
frozenInBox.AddRange(frozen[p][j * cols + i]
|
foreach (var kvp in bins[j * cols + i])
|
||||||
.Where(kv => kv.Key.IsValid && kv.Value.IntersectsWith(r))
|
{
|
||||||
.Select(kv => kv.Key));
|
var actor = kvp.Key;
|
||||||
|
if (actor.IsValid && kvp.Value.IntersectsWith(r) && actorsChecked.Add(actor))
|
||||||
return frozenInBox.Distinct();
|
yield return actor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user