12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #if UNITY_EDITOR
- using UnityEngine;
- using System.Collections.Generic;
- namespace O3DWB
- {
- public static class RectExtensions
- {
- #region Extension Methods
- public static List<Ray2D> GetEdgeRays(this Rect rectangle)
- {
- List<Vector2> cornerPoints = rectangle.GetCornerPoints();
- return new List<Ray2D>
- {
- new Ray2D(cornerPoints[0], cornerPoints[1] - cornerPoints[0]),
- new Ray2D(cornerPoints[1], cornerPoints[2] - cornerPoints[1]),
- new Ray2D(cornerPoints[2], cornerPoints[3] - cornerPoints[2]),
- new Ray2D(cornerPoints[0], cornerPoints[0] - cornerPoints[3])
- };
- }
- public static List<Vector2> GetCornerPoints(this Rect rectangle)
- {
- // Return the points in the following format: bottom left, bottom right, top right, top left.
- return new List<Vector2>
- {
- new Vector2(rectangle.xMin, rectangle.yMin),
- new Vector2(rectangle.xMax, rectangle.yMin),
- new Vector2(rectangle.xMax, rectangle.yMax),
- new Vector2(rectangle.xMin, rectangle.yMax)
- };
- }
- public static List<Vector2> GetCenterAndCornerPoints(this Rect rectangle)
- {
- // Return the points in the following format: center, bottom left, bottom right, top right, top left.
- var points = new List<Vector2>();
- points.Add(rectangle.center);
- points.AddRange(rectangle.GetCornerPoints());
- return points;
- }
- public static List<Vector3> GetWorldCornerPointsInFrontOfCamera(this Rect rectangle, Camera camera, float distanceFromCamNearPlane)
- {
- List<Vector2> cornerPoints = rectangle.GetCornerPoints();
- return Vector2Extensions.GetWorldPointsInFrontOfCamera(cornerPoints, camera, distanceFromCamNearPlane);
- }
- public static Vector3 GetWorldCenterPointInFrontOfCamera(this Rect rectangle, Camera camera, float distanceFromCamNearPlane)
- {
- return rectangle.center.GetWorldPointInFrontOfCamera(camera, distanceFromCamNearPlane);
- }
- public static bool ContainsRectangle(this Rect rectangle, Rect queryRectangle)
- {
- return rectangle.ContainsAllPoints(queryRectangle.GetCornerPoints());
- }
- public static bool ContainsAllPoints(this Rect rectangle, List<Vector2> points)
- {
- foreach (Vector2 point in points)
- {
- if (!rectangle.Contains(point, true)) return false;
- }
- return true;
- }
- public static bool ContainsAnyPoint(this Rect rectangle, List<Vector2> points)
- {
- foreach (Vector2 point in points)
- {
- if (rectangle.Contains(point, true)) return true;
- }
- return false;
- }
- public static bool FullyContainsOrientedBoxCenterAndCornerPointsInScreenSpace(this Rect rectangle, OrientedBox orientedBox, Camera camera)
- {
- List<Vector2> boxCenterAndCornerScreenPoints = orientedBox.GetScreenCenterAndCornerPoints(camera);
- return rectangle.ContainsAllPoints(boxCenterAndCornerScreenPoints);
- }
- #endregion
- }
- }
- #endif
|