public static BasicMap CropToContent(this BasicMap m) { int minX = m.Width; int maxX = 0; int minY = m.Height; int maxY = 0; for (int x = 0; x < m.Width; x++) { for (int y = 0; y < m.Height; y++) { if (m.GetTerrain <BasicTerrain>(new Coord(x, y)) != null) { if (minX > x) { minX = x; } if (minY > y) { minY = y; } if (maxX < x) { maxX = x; } if (maxY < y) { maxY = y; } } } } int dx = Math.Abs(maxX - minX + 1); int dy = Math.Abs(maxY - minY + 1); Coord offset = new Coord(-minX, -minY); BasicMap map = new BasicMap(dx, dy, EnumUtils.EnumLength <MapLayer>(), Distance.EUCLIDEAN); map.ForXForY((point) => { if (m.Contains(point - offset)) { BasicTerrain terrain = m.GetTerrain <BasicTerrain>(point - offset); if (terrain != null) { map.SetTerrain(_factory.Copy(terrain, point)); } } }); return(map); }
public void ForXForYTest() { BasicMap map = new BasicMap(25, 25, 1, Distance.EUCLIDEAN); int counter = 0; map.ForXForY((point) => { map.SetTerrain(_factory.Generic(point, counter)); counter++; }); counter = 0; for (int i = 0; i < map.Width; i++) { for (int j = 0; j < map.Height; j++) { BasicTerrain t = map.GetTerrain <BasicTerrain>(new Coord(i, j)); Assert.AreEqual(counter, t.Glyph); counter++; } } }