public void SetCornerPointPosition(QuadCorner quadCorner, Vector3 position)
        {
            Vector3 cornerPt = GetCornerPosition(quadCorner);
            Vector3 toCenter = _center - cornerPt;

            Center = position + toCenter;
        }
        public void SetQuadCornerPosition(QuadCorner corner, Vector3 cornerPosition)
        {
            Vector3 toPosition = Position - GetQuadCornerPosition(corner);

            Position = cornerPosition + toPosition;
        }
 public Vector3 GetQuadCornerPosition(QuadCorner corner)
 {
     return(_quad.GetCornerPosition(corner));
 }
Exemple #4
0
        public static Vector3 Calc3DQuadCorner(Vector3 quadCenter, Vector2 quadSize, Quaternion quadRotation, QuadCorner quadCorner)
        {
            Vector3 right   = quadRotation * Vector3.right;
            Vector3 up      = quadRotation * Vector3.up;
            Vector3 extents = quadSize * 0.5f;

            if (quadCorner == QuadCorner.TopLeft)
            {
                return(quadCenter - right * extents.x + up * extents.y);
            }
            else if (quadCorner == QuadCorner.TopRight)
            {
                return(quadCenter + right * extents.x + up * extents.y);
            }
            else if (quadCorner == QuadCorner.BottomRight)
            {
                return(quadCenter + right * extents.x - up * extents.y);
            }
            return(quadCenter - right * extents.x - up * extents.y);
        }
Exemple #5
0
    public QuadToHulls(Vector2 position, float angle, float width, float height)
    {
//		X = x*cos(θ) - y*sin(θ)
//			Y = x*sin(θ) + y*cos(θ)

        angle = angle * Mathf.Deg2Rad;

        float halfWidth  = width / 2f;
        float halfHeight = height / 2f;
        //Find which corner is highest. Knowing this, the two adjacent corners make up the upper hull

        Vector2 topLeft  = rotateVector(-halfWidth, halfHeight, angle);
        Vector2 topRight = rotateVector(halfWidth, halfHeight, angle);
        Vector2 botLeft  = rotateVector(-halfWidth, -halfHeight, angle);
        Vector2 botRight = rotateVector(halfWidth, -halfHeight, angle);

        QuadCorner highestCorner   = QuadCorner.TOP_LEFT;
        Vector2    highestVector   = topLeft;
        Vector2    lowestVector    = botRight;
        Vector2    leftMostVector  = botLeft;
        Vector2    rightMostVector = topRight;

        if (topRight.y > highestVector.y)
        {
            highestVector = topRight;
            highestCorner = QuadCorner.TOP_RIGHT;
        }
        if (botLeft.y > highestVector.y)
        {
            highestVector = botLeft;
            highestCorner = QuadCorner.BOT_LEFT;
        }
        if (botRight.y > highestVector.y)
        {
            highestVector = botRight;
            highestCorner = QuadCorner.BOT_RIGHT;
        }

        switch (highestCorner)
        {
        case QuadCorner.TOP_LEFT:
            leftMostVector  = botLeft;
            rightMostVector = topRight;
            lowestVector    = botRight;
            break;

        case QuadCorner.TOP_RIGHT:
            leftMostVector  = topLeft;
            rightMostVector = botRight;
            lowestVector    = botLeft;
            break;

        case QuadCorner.BOT_LEFT:
            leftMostVector  = botRight;
            rightMostVector = topLeft;
            lowestVector    = topRight;
            break;

        case QuadCorner.BOT_RIGHT:
            leftMostVector  = topRight;
            rightMostVector = botLeft;
            lowestVector    = topLeft;
            break;
        }

        highestVector   = highestVector + position;
        lowestVector    = lowestVector + position;
        leftMostVector  = leftMostVector + position;
        rightMostVector = rightMostVector + position;

        upperHull = new List <Vector2> ();
        lowerHull = new List <Vector2> ();

        upperHull.Add(leftMostVector);
        upperHull.Add(highestVector);
        upperHull.Add(rightMostVector);

        lowerHull.Add(leftMostVector);
        lowerHull.Add(lowestVector);
        lowerHull.Add(rightMostVector);
    }
 public Vector3 GetCornerPosition(QuadCorner quadCorner)
 {
     return(QuadMath.Calc3DQuadCorner(_center, _size, _rotation, quadCorner));
 }