public static void GoToNewPosition(GameObject obj) { float yAngle = obj.transform.rotation.eulerAngles.y; Vector3 newPosition; Vector3 currentPosition = obj.transform.position; if (TankUtils.FloatsAreEqual(yAngle, Constants.AngleUp, Constants.MaxDifferenceForAngles)) { newPosition = new Vector3(currentPosition.x - Constants.MoveLength, currentPosition.y, currentPosition.z); } else if (TankUtils.FloatsAreEqual(yAngle, Constants.AngleDown, Constants.MaxDifferenceForAngles)) { newPosition = new Vector3(currentPosition.x + Constants.MoveLength, currentPosition.y, currentPosition.z); } else if (TankUtils.FloatsAreEqual(yAngle, Constants.AngleLeft, Constants.MaxDifferenceForAngles)) { newPosition = new Vector3(currentPosition.x, currentPosition.y, currentPosition.z - Constants.MoveLength); } else { newPosition = new Vector3(currentPosition.x, currentPosition.y, currentPosition.z + Constants.MoveLength); } obj.transform.position = newPosition; }
Vector2 FindNextField() { Vector2 nextField = Vector2.negativeInfinity; float yAngle = transform.rotation.eulerAngles.y; int xCoordinate = (int)Math.Round(transform.position.x); int zCoordinate = (int)Math.Round(transform.position.z); int row = (xCoordinate - 1) / 2; int column = (zCoordinate - 1) / 2; if (row > 0 && TankUtils.FloatsAreEqual(yAngle, Constants.AngleUp, Constants.MaxDifferenceForAngles)) { nextField = new Vector2(row - 1, column); } else if (row < 19 && TankUtils.FloatsAreEqual(yAngle, Constants.AngleDown, Constants.MaxDifferenceForAngles)) { nextField = new Vector2(row + 1, column); } else if (column > 0 && TankUtils.FloatsAreEqual(yAngle, Constants.AngleLeft, Constants.MaxDifferenceForAngles)) { nextField = new Vector2(row, column - 1); } else if (column < 19 && TankUtils.FloatsAreEqual(yAngle, Constants.AngleRight, Constants.MaxDifferenceForAngles)) { nextField = new Vector2(row, column + 1); } return(nextField); }
List <Vector2> FindFreeNeighbourFields(int row, int column) { List <Vector2> fields = new List <Vector2>(); if (column - 1 >= 0 && !mapManagerScript.obstacleMatrix[row, column - 1] && !TankUtils.FloatsAreEqual(transform.rotation.eulerAngles.y, 360, Constants.MaxDifferenceForAngles) && !TankUtils.FloatsAreEqual(transform.rotation.eulerAngles.y, 0, Constants.MaxDifferenceForAngles)) { fields.Add(new Vector2(row, column - 1)); } if (column + 1 < Constants.NumOfColums && !mapManagerScript.obstacleMatrix[row, column + 1] && !TankUtils.FloatsAreEqual(transform.rotation.eulerAngles.y, 180, Constants.MaxDifferenceForAngles)) { fields.Add(new Vector2(row, column + 1)); } if (row - 1 >= 0 && !mapManagerScript.obstacleMatrix[row - 1, column] && !TankUtils.FloatsAreEqual(transform.rotation.eulerAngles.y, 90, Constants.MaxDifferenceForAngles)) { fields.Add(new Vector2(row - 1, column)); } if (row + 1 < Constants.NumOfRows && !mapManagerScript.obstacleMatrix[row + 1, column] && !TankUtils.FloatsAreEqual(transform.rotation.eulerAngles.y, 270, Constants.MaxDifferenceForAngles)) { fields.Add(new Vector2(row + 1, column - 1)); } return(fields); }