public void moveCameraForCell(Cell moveToThisCell)
    {
        // Imposto il caller
        caller = CALLER.TO_CELL;
        // Dimensione della tavola in larghezza e lunghezza
        float board = 1850;
        // Altezza fissa della telecamera
        float height = 600;
        // Distanza x e/o z della telecamera dalla board
        float distance = 700;
        // Misura di mezza larghezza di cella
        float halfCell = 75;

        // Componenti del vettore finale di posizione
        float newX = 0;
        float newY = height;
        float newZ = 0;
        // Componenti del vettore finale di rotazione
        float newRX = 27;
        float newRY = 0;
        float newRZ = 0;
        // Vettore finale di posizione
        Vector3 newPosition;
        // Vettore finale di rotazione
        Vector3 newRotation;

        // GameObject di riferimento alla cella
        GameObject cell = GameObject.FindWithTag(moveToThisCell.getPosition().ToString());

        // Muovo la telecamera lungo gli assi diversamente a seconda del lato della cella
        if (moveToThisCell.getSide() == 1)
        {
            // Se la cella e' d'angolo, imposto coordinate fisse
            if (moveToThisCell.isCorner())
            {
                newX = -distance;
                newZ = -distance;
            }
            else
            {
                // Ottengo i valori della x e z
                newX = cell.transform.position.x + halfCell;
                newZ = -distance;
            }
        }
        else if (moveToThisCell.getSide() == 2)
        {
            // Se la cella e' d'angolo, imposto coordinate fisse
            if (moveToThisCell.isCorner())
            {
                newX = -distance;
                newZ = board + distance;
            }
            else
            {
                // Ottengo i valori della x e z
                newX = -distance;
                newZ = cell.transform.position.z + halfCell;
            }
        } else if (moveToThisCell.getSide() == 3)
        {
            // Se la cella e' d'angolo, imposto coordinate fisse
            if (moveToThisCell.isCorner())
            {
                newX = board + distance;
                newZ = board + distance;
            }
            else
            {
                // Ottengo i valori della x e z
                newX = cell.transform.position.x + halfCell;
                newZ = board + distance;
            }
        }
        else if (moveToThisCell.getSide() == 4)
        {
            // Se la cella e' d'angolo, imposto coordinate fisse
            if (moveToThisCell.isCorner())
            {
                newX = board + distance;
                newZ = -distance;
            }
            else
            {
                // Ottengo i valori della x e z
                newX = board + distance;
                newZ = cell.transform.position.z + halfCell;
            }
        }

        // La rotazione della telecamera sulle Y e' facilmente ottenibile a partire dal lato della cella
        newRY = (moveToThisCell.getSide() - 1) * 90;
        // Se la cella e' corner, devo aggiungere 45 alla rotazione sulle Y
        if (moveToThisCell.isCorner())
        {
            newRY += 45;
        }

        // Creo il vettore di posizione della telecamera
        newPosition = new Vector3(newX, newY, newZ);
        // Creo il vettore di rotazione della telecamera
        newRotation = new Vector3(newRX, newRY, newRZ);

        moveCameraTo(newPosition, 0.5F);
        rotateCameraTo(newRotation, 0.5F);
    }
    public List<Vector3> getPositionsByCell(Cell cell)
    {
        List<Vector3> positions = new List<Vector3>();

        Vector3 newHighPosition = new Vector3();
        Vector3 newLowPosition = new Vector3();

        // Ottengo l'oggetto da spostare
        GameObject Token = gameObject;

        // Controllo se c'e' qualche altro giocatore nella cella adiacente e in quella attuale.
        // In tal caso, lo spostamento sara' shiftato di 50m per ogni pedina in piu'.
        int endRefactorValue = cell.getTokensOnCell();

        // Se la prossima cella e' d'angolo, mi comporto in una maniera
        if (cell.isCorner())
        {
            if (cell.getSide() == 1)
            {
                float xValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    57,
                    0,
                    140 + (50 * endRefactorValue)
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x - (Token.transform.position.x - newLowPosition.x) / 2,
                    highnessValue,
                    Token.transform.position.z
                    );
            }
            else if (cell.getSide() == 2)
            {
                float zValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    140 + (50 * endRefactorValue),
                    0,
                    1790
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x,
                    highnessValue,
                    Token.transform.position.z - (Token.transform.position.z - newLowPosition.z) / 2
                    );
            }
            else if (cell.getSide() == 3)
            {
                float xValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    1790,
                    0,
                    1750 + (50 * endRefactorValue)
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x - (Token.transform.position.x - newLowPosition.x) / 2,
                    highnessValue,
                    Token.transform.position.z
                    );
            }
            else if (cell.getSide() == 4)
            {
                float zValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    1710 + (50 * endRefactorValue),
                    0,
                    57
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x,
                    highnessValue,
                    Token.transform.position.z - (Token.transform.position.z - newLowPosition.z) / 2
                    );

            }
        }
        // altrimenti faccio avanzare verso destra/sinistra/alto/basso normalmente
        else
        {
            // Se la cella si trova sul primo lato, devo diminuire le X di 150 +/- i refactors
            if (cell.getSide() == 1)
            {
                float xValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    xValue + 100 - (50 * endRefactorValue),
                    0,
                    57
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x - (Token.transform.position.x - newLowPosition.x) / 2,
                    highnessValue,
                    57
                    );
            }
            else if (cell.getSide() == 2)
            {
                float zValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.z;
                newLowPosition = new Vector3(
                    57,
                    0,
                    zValue + 50 + (50 * endRefactorValue)
                    );

                newHighPosition = new Vector3(
                    57,
                    highnessValue,
                    Token.transform.position.z - (Token.transform.position.z - newLowPosition.z) / 2
                    );
            }
            else if (cell.getSide() == 3)
            {
                float xValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.x;
                newLowPosition = new Vector3(
                    xValue + 40 + (50 * endRefactorValue),
                    0,
                    1790
                    );

                newHighPosition = new Vector3(
                    Token.transform.position.x - (Token.transform.position.x - newLowPosition.x) / 2,
                    highnessValue,
                    1790
                    );
            }
            else if (cell.getSide() == 4)
            {
                float zValue = GameObject.FindWithTag(cell.getPosition().ToString()).transform.position.z;
                newLowPosition = new Vector3(
                    1790,
                    0,
                    zValue - 50 + (50 * endRefactorValue)
                    );

                newHighPosition = new Vector3(
                    1790,
                    highnessValue,
                    Token.transform.position.z - (Token.transform.position.z - newLowPosition.z) / 2
                    );
            }
        }

        positions.Add(newHighPosition);
        positions.Add(newLowPosition);

        return positions;
    }