private Tile InnerApply(TileGridLayer tileLayer, int x, int y) { TileCoord[] coordSet = NeighborCoordSet(x, y); List <int> neighbors = new List <int>(); for (int i = 0; i < coordSet.Length; i++) { if (ContainsMemberTile(tileLayer.TilesAt(coordSet[i]))) { neighbors.Add(i + 1); } } List <LocatedTile> targetStack = new List <LocatedTile>(); foreach (LocatedTile tile in tileLayer.TilesAt(new TileCoord(x, y))) { targetStack.Add(tile); } foreach (LocatedTile tile in targetStack) { if (IsMemberTile(tile)) { tileLayer.RemoveTile(x, y, tile.Tile); } } int index = _brushClass.ApplyRules(neighbors); Tile newTile = null; if (index >= 0 && index < _tiles.Count && _tiles[index].Tile != null) { newTile = _tiles[index].Tile; } if (newTile != null) { tileLayer.AddTile(x, y, newTile); } return(newTile); }
private Tile InnerApply(TileGridLayer tileLayer, int x, int y) { TileCoord[] coordSet = NeighborCoordSet(x, y); List<int> neighbors = new List<int>(); for (int i = 0; i < coordSet.Length; i++) { if (ContainsMemberTile(tileLayer.TilesAt(coordSet[i]))) neighbors.Add(i + 1); } List<LocatedTile> targetStack = new List<LocatedTile>(); foreach (LocatedTile tile in tileLayer.TilesAt(new TileCoord(x, y))) targetStack.Add(tile); foreach (LocatedTile tile in targetStack) { if (IsMemberTile(tile)) tileLayer.RemoveTile(x, y, tile.Tile); } int index = _brushClass.ApplyRules(neighbors); Tile newTile = null; if (index >= 0 && index < _tiles.Count && _tiles[index].Tile != null) newTile = _tiles[index].Tile; if (newTile != null) tileLayer.AddTile(x, y, newTile); return newTile; }