示例#1
0
    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();
    }
示例#2
0
 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));
 }