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; }