59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
|
using System;
|
||
|
using Unity.Mathematics;
|
||
|
|
||
|
namespace NativeQuadTree
|
||
|
{
|
||
|
[Serializable]
|
||
|
public struct AABB2D {
|
||
|
public float2 Center;
|
||
|
public float2 Extents;
|
||
|
|
||
|
public float2 Size => Extents * 2;
|
||
|
public float2 Min => Center - Extents;
|
||
|
public float2 Max => Center + Extents;
|
||
|
|
||
|
public AABB2D(float2 center, float2 extents)
|
||
|
{
|
||
|
Center = center;
|
||
|
Extents = extents;
|
||
|
}
|
||
|
|
||
|
public bool Contains(float2 point) {
|
||
|
if (point[0] < Center[0] - Extents[0]) {
|
||
|
return false;
|
||
|
}
|
||
|
if (point[0] > Center[0] + Extents[0]) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (point[1] < Center[1] - Extents[1]) {
|
||
|
return false;
|
||
|
}
|
||
|
if (point[1] > Center[1] + Extents[1]) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public bool Contains(AABB2D b) {
|
||
|
return Contains(b.Center + new float2(-b.Extents.x, -b.Extents.y)) &&
|
||
|
Contains(b.Center + new float2(-b.Extents.x, b.Extents.y)) &&
|
||
|
Contains(b.Center + new float2(b.Extents.x, -b.Extents.y)) &&
|
||
|
Contains(b.Center + new float2(b.Extents.x, b.Extents.y));
|
||
|
}
|
||
|
|
||
|
public bool Intersects(AABB2D b)
|
||
|
{
|
||
|
//bool noOverlap = Min[0] > b.Max[0] ||
|
||
|
// b.Min[0] > Max[0]||
|
||
|
// Min[1] > b.Max[1] ||
|
||
|
// b.Min[1] > Max[1];
|
||
|
//
|
||
|
//return !noOverlap;
|
||
|
|
||
|
return (math.abs(Center[0] - b.Center[0]) < (Extents[0] + b.Extents[0])) &&
|
||
|
(math.abs(Center[1] - b.Center[1]) < (Extents[1] + b.Extents[1]));
|
||
|
}
|
||
|
}
|
||
|
}
|