52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace UnityEngine
|
||
|
|
{
|
||
|
|
internal static class RectExtensions
|
||
|
|
{
|
||
|
|
internal static bool Contains(this Rect r, Rect other)
|
||
|
|
{
|
||
|
|
return r.xMin <= other.xMin &&
|
||
|
|
r.xMax >= other.xMax &&
|
||
|
|
r.yMin <= other.yMin &&
|
||
|
|
r.yMax >= other.yMax;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static bool Intersects(this Rect r, Rect other)
|
||
|
|
{
|
||
|
|
return r.xMin < other.xMax &&
|
||
|
|
r.xMax > other.xMin &&
|
||
|
|
r.yMin < other.yMax &&
|
||
|
|
r.yMax > other.yMin;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static Rect Intersect(this Rect rect, Rect other)
|
||
|
|
{
|
||
|
|
float xMin = Mathf.Max(rect.xMin, other.xMin);
|
||
|
|
float xMax = Mathf.Min(rect.xMax, other.xMax);
|
||
|
|
float yMin = Mathf.Max(rect.yMin, other.yMin);
|
||
|
|
float yMax = Mathf.Min(rect.yMax, other.yMax);
|
||
|
|
|
||
|
|
// If there's no intersection, return a rect with zero width/height
|
||
|
|
if (xMax < xMin || yMax < yMin)
|
||
|
|
return new Rect(0, 0, 0, 0);
|
||
|
|
|
||
|
|
return new Rect(xMin, yMin, xMax - xMin, yMax - yMin);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static Rect Inflate(this Rect rect, float amount)
|
||
|
|
{
|
||
|
|
return rect.Inflate(amount, amount);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static Rect Inflate(this Rect rect, float xAmount, float yAmount)
|
||
|
|
{
|
||
|
|
return new Rect(
|
||
|
|
rect.xMin - xAmount,
|
||
|
|
rect.yMin - yAmount,
|
||
|
|
rect.width + (2 * xAmount),
|
||
|
|
rect.height + (2 * yAmount));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|