public void CalculateAutotiles(ulong randSeed, Loc rectStart, Loc rectSize) { HashSet <int> floortilesets = new HashSet <int>(); for (int ii = rectStart.X; ii < rectStart.X + rectSize.X; ii++) { for (int jj = rectStart.Y; jj < rectStart.Y + rectSize.Y; jj++) { if (Collision.InBounds(Width, Height, new Loc(ii, jj))) { if (Tiles[ii][jj].AutoTileset > -1) { floortilesets.Add(Tiles[ii][jj].AutoTileset); } } } } foreach (int tileset in floortilesets) { Data.AutoTileData entry = Data.DataManager.Instance.GetAutoTile(tileset); entry.Tiles.AutoTileArea(randSeed, rectStart, rectSize, new Loc(Width, Height), (int x, int y, int neighborCode) => { Tiles[x][y].NeighborCode = neighborCode; }, (int x, int y) => { if (!Collision.InBounds(Width, Height, new Loc(x, y))) { return(true); } return(Tiles[x][y].AutoTileset == tileset); }, (int x, int y) => { if (!Collision.InBounds(Width, Height, new Loc(x, y))) { return(true); } return(Tiles[x][y].AutoTileset == tileset || Tiles[x][y].Associates.Contains(tileset)); }); } }
public void CalculateAutotiles(Loc rectStart, Loc rectSize) { HashSet <int> floortilesets = new HashSet <int>(); HashSet <int> blocktilesets = new HashSet <int>(); for (int ii = rectStart.X; ii < rectStart.X + rectSize.X; ii++) { for (int jj = rectStart.Y; jj < rectStart.Y + rectSize.Y; jj++) { if (Collision.InBounds(Width, Height, new Loc(ii, jj))) { AutoTile outTile; if (Tiles[ii][jj].FloorTile.Layers.Count == 0) { Tiles[ii][jj].FloorTile = FloorBG.Copy(); } if (TextureMap.TryGetValue(Tiles[ii][jj].Data.ID, out outTile)) { Tiles[ii][jj].Data.TileTex = outTile.Copy(); } if (Tiles[ii][jj].FloorTile.AutoTileset > -1) { floortilesets.Add(Tiles[ii][jj].FloorTile.AutoTileset); } if (Tiles[ii][jj].Data.TileTex.AutoTileset > -1) { blocktilesets.Add(Tiles[ii][jj].Data.TileTex.AutoTileset); } } } } foreach (int tileset in floortilesets) { Data.AutoTileData entry = Data.DataManager.Instance.GetAutoTile(tileset); entry.Tiles.AutoTileArea(Rand, rectStart, rectSize, (int x, int y, List <TileLayer> tile) => { if (Collision.InBounds(Width, Height, new Loc(x, y))) { Tiles[x][y].FloorTile.Layers = tile; } }, (int x, int y) => { if (!Collision.InBounds(Width, Height, new Loc(x, y))) { return(true); } if (Tiles[x][y].Data.TileTex.AutoTileset != -1 && Tiles[x][y].Data.TileTex.AutoTileset == Tiles[x][y].FloorTile.BorderTileset) { return(false); } return(Tiles[x][y].FloorTile.AutoTileset == tileset); }); } foreach (int tileset in blocktilesets) { Data.AutoTileData entry = Data.DataManager.Instance.GetAutoTile(tileset); entry.Tiles.AutoTileArea(Rand, rectStart, rectSize, (int x, int y, List <TileLayer> tile) => { if (Collision.InBounds(Width, Height, new Loc(x, y))) { Tiles[x][y].Data.TileTex.Layers = tile; } }, (int x, int y) => { if (!Collision.InBounds(Width, Height, new Loc(x, y))) { return(true); } return(Tiles[x][y].Data.TileTex.AutoTileset == tileset); }); } }