Beispiel #1
0
    public void CorrectPosition()
    {
        Vector3 cubeSideOrigin = cube.GetCubeSideOrigin(cubeSide, cubeDistance);
        Vector3 up             = cube.GetCubeSideGravity(cubeSide);

        Vector3 pos = transform.position;

        float scaleLimit = (cube.scale * 0.5f) + cubeDistance;

        if (cubeSide == Cube.CubeSide.RIGHT || cubeSide == Cube.CubeSide.LEFT)
        {
            float diffZ = pos.z - cubeSideOrigin.z;

            transform.position = new Vector3(cubeSideOrigin.x, pos.y, diffZ);

            if (diffZ * -up.x > scaleLimit)
            {
                cubeSide = cube.GetNextCubeSide(cubeSide, true);
            }
            else if (diffZ * -up.x < -scaleLimit)
            {
                cubeSide = cube.GetNextCubeSide(cubeSide, false);
            }
        }
        else if (cubeSide == Cube.CubeSide.FRONT || cubeSide == Cube.CubeSide.BACK)
        {
            float diffX = pos.x - cubeSideOrigin.x;

            transform.position = new Vector3(diffX, pos.y, cubeSideOrigin.z);

            if (diffX * -up.z > scaleLimit)
            {
                cubeSide = cube.GetNextCubeSide(cubeSide, false);
            }
            else if (diffX * -up.z < -scaleLimit)
            {
                cubeSide = cube.GetNextCubeSide(cubeSide, true);
            }
        }
    }
Beispiel #2
0
    public Cube.CubeSide GetNextCubeSide(Cube.CubeSide cubeSize, bool right = true)
    {
        if (right)
        {
            switch (cubeSize)
            {
            case Cube.CubeSide.RIGHT:
                return(Cube.CubeSide.FRONT);

            case Cube.CubeSide.FRONT:
                return(Cube.CubeSide.LEFT);

            case Cube.CubeSide.LEFT:
                return(Cube.CubeSide.BACK);

            case Cube.CubeSide.BACK:
                return(Cube.CubeSide.RIGHT);
            }
        }
        else
        {
            switch (cubeSize)
            {
            case Cube.CubeSide.RIGHT:
                return(Cube.CubeSide.BACK);

            case Cube.CubeSide.BACK:
                return(Cube.CubeSide.LEFT);

            case Cube.CubeSide.LEFT:
                return(Cube.CubeSide.FRONT);

            case Cube.CubeSide.FRONT:
                return(Cube.CubeSide.RIGHT);
            }
        }

        return(Cube.CubeSide.NONE);
    }
Beispiel #3
0
    public Vector3 GetCubeSideOrigin(Cube.CubeSide cubeSide, float addDistance = 0)
    {
        Vector3 cubePosition = transform.position;

        float distance = (scale * 0.5f) + addDistance;

        switch (cubeSide)
        {
        case Cube.CubeSide.RIGHT:
            return(cubePosition + (transform.right * distance));

        case Cube.CubeSide.LEFT:
            return(cubePosition + (-transform.right * distance));

        case Cube.CubeSide.FRONT:
            return(cubePosition + (transform.forward * distance));

        case Cube.CubeSide.BACK:
            return(cubePosition + (-transform.forward * distance));

        default:
            return(transform.position);
        }
    }
Beispiel #4
0
    public Vector3 GetCubeSideGravity(Cube.CubeSide cubeSide)
    {
        switch (cubeSide)
        {
        case Cube.CubeSide.FRONT:
            return(-transform.forward);

        case Cube.CubeSide.BACK:
            return(transform.forward);

        case Cube.CubeSide.RIGHT:
            return(-transform.right);

        case Cube.CubeSide.LEFT:
            return(transform.right);

        /*case Cube.CubeSide.TOP:
         *  return -transform.up;
         * case Cube.CubeSide.BOTTOM:
         *  return transform.up;*/
        default:
            return(new Vector3(0, 0, 0));
        }
    }
Beispiel #5
0
 public void CorrectCubeSide()
 {
     cubeSide = cube.GetCubeSide(transform.position);
 }