public void Update() { // we're gonna block updating while in play mode if (Application.isPlaying) { return; } foreach (string updateTag in updateTags) { List <ZST_SmartTile> adjustableTiles = new List <ZST_SmartTile>(); HashSet <ZST_SmartTile.Coord> occupiedCoords = new HashSet <ZST_SmartTile.Coord>(); foreach (ZST_SmartTile tile in tiles) { if (tile.tileTag != null && !tile.tileTag.Equals(updateTag)) { continue; } tile.MarkAsMidUpdate(); ZST_SmartTile.Coord coord = tile.GetCoord(); occupiedCoords.Add(coord); adjustableTiles.Add(tile); } foreach (ZST_SmartTile tile in adjustableTiles) { ZST_SmartTile.Coord coord = tile.GetCoord(); int row = coord.row; int col = coord.col; System.Array cardinalDirs = System.Enum.GetValues(typeof(ZST_SmartTile.CardinalDirection)); foreach (ZST_SmartTile.CardinalDirection dir in cardinalDirs) { ZST_SmartTile.Coord offset = ZST_SmartTile.dirsToCoordOffsets[dir]; tile.hasNeighbor[dir] = HasNeighbor(row + offset.row, col + offset.col, occupiedCoords); } tile.UpdateSprite(); } } updateTags.Clear(); }
private bool HasNeighbor(int row, int col, HashSet <ZST_SmartTile.Coord> occupiedCoords) { ZST_SmartTile.Coord coord = new ZST_SmartTile.Coord(row, col); return(occupiedCoords.Contains(coord)); }