Ejemplo n.º 1
0
    /// <summary>
    /// Finds a shelf near to the location passed in.
    /// </summary>
    /// <param name="startX"></param>
    /// <param name="startY"></param>
    /// <returns></returns>
    public List <int[]> FindShelf(int startX, int startY)
    {
        PriorityQueue <Tile> tilesToSearch = new PriorityQueue <Tile>(TileGrid.getGridSize() * 4);

        visitedTiles = new HashSet <string>();
        tilesToSearch.add(new Tile(Optional <Tile> .empty(), startX, startY), 0);


        while (tilesToSearch.hasElements())
        {
            int  currentDist = tilesToSearch.TopPriority();
            Tile currentTile = tilesToSearch.take();

            visitedTiles.Add(TileGrid.getKey(currentTile.x, currentTile.y));

            if (UnitPlacement.canAccessShelf(currentTile.x, currentTile.y) && UnityEngine.Random.Range(0, 5) == 0)
            {
                return(traceBackRoute(currentTile));
            }

            foreach (int[] tile in getAdjIndexes(currentTile.x, currentTile.y))
            {
                if (checkFree(tile[0], tile[1]) && !visitedTiles.Contains(TileGrid.getKey(tile[0], tile[1])))
                {
                    tilesToSearch.add(new Tile(Optional <Tile> .of(currentTile), tile[0], tile[1]), currentDist - 1);
                }
            }
        }

        return(null);
    }