1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-22 20:58:34 +01:00

fixed tile map collisions going out of bounds with big areas

This commit is contained in:
Ellpeck 2019-09-25 21:06:56 +02:00
parent edcc7d44b5
commit 45f48cc8fd

View file

@ -43,9 +43,13 @@ namespace MLEM.Extended.Tiled {
public IEnumerable<TileCollisionInfo> GetCollidingTiles(RectangleF area, Func<TileCollisionInfo, bool> included = null) { public IEnumerable<TileCollisionInfo> GetCollidingTiles(RectangleF area, Func<TileCollisionInfo, bool> included = null) {
var inclusionFunc = included ?? (tile => tile.Collisions.Any(c => c.Intersects(area))); var inclusionFunc = included ?? (tile => tile.Collisions.Any(c => c.Intersects(area)));
var minX = Math.Max(0, area.Left.Floor());
var maxX = Math.Min(this.map.Width - 1, area.Right);
var minY = Math.Max(0, area.Top.Floor());
var maxY = Math.Min(this.map.Height - 1, area.Bottom);
for (var i = 0; i < this.map.TileLayers.Count; i++) { for (var i = 0; i < this.map.TileLayers.Count; i++) {
for (var x = area.Left.Floor(); x <= area.Right; x++) { for (var x = minX; x <= maxX; x++) {
for (var y = area.Top.Floor(); y <= area.Bottom; y++) { for (var y = minY; y <= maxY; y++) {
var tile = this.collisionInfos[i, x, y]; var tile = this.collisionInfos[i, x, y];
if (tile == null) if (tile == null)
continue; continue;