Esempio n. 1
0
    public HeuristicTile(HeuristicTile tile, Vector2Int goal)
    {
        path.AddRange(tile.path);

        direction = tile.direction;

        directionChanges = tile.directionChanges;

        CalculateDistToGoal(goal);
    }
Esempio n. 2
0
    private List <HeuristicTile> NewPositionsAvailableEnd(Vector2Int destino, HeuristicTile tile) //Retorna novas casas.
    {
        List <HeuristicTile> newTiles = new List <HeuristicTile>();

        for (int i = 0; i < 4; i++)
        {
            Vector2Int newDir = Vector2Int.zero;

            Vector2Int newPosition = tile.path[tile.path.Count - 1];

            switch (i) //Gera a nova casa.
            {
            case 0:
                newDir       = Vector2Int.up;
                newPosition += newDir;
                break;

            case 1:
                newDir       = Vector2Int.down;
                newPosition += newDir;
                break;

            case 2:
                newDir       = Vector2Int.left;
                newPosition += newDir;
                break;

            case 3:
                newDir       = Vector2Int.right;
                newPosition += newDir;
                break;
            }

            //Vefirica-se se não já se passou alina, se faz parte do grid e se não está ocupada e consolida a nova casa.
            if (!tile.path.Contains(newPosition) && VerifyTileIsInGrid(newPosition) && (!IsOccupied(newPosition)))
            {
                HeuristicTile newTile = new HeuristicTile(tile, destino);

                newTile.path.Add(newPosition);

                if (tile.direction != newDir)
                {
                    newTile.direction = newDir;

                    newTile.directionChanges++;
                }

                newTile.CalculateDistToGoal(destino);

                newTiles.Add(newTile);
            }
        }

        return(newTiles);
    }