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