예제 #1
0
    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;
    }
예제 #2
0
    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);
    }
예제 #3
0
    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);
    }