333 lines
8.4 KiB
C#
333 lines
8.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace ProBuilder2.Common
|
|
{
|
|
// Token: 0x02000049 RID: 73
|
|
public class pb_Bounds2D
|
|
{
|
|
// Token: 0x06000232 RID: 562 RVA: 0x0001DF85 File Offset: 0x0001C385
|
|
public pb_Bounds2D()
|
|
{
|
|
}
|
|
|
|
// Token: 0x06000233 RID: 563 RVA: 0x0001DFAE File Offset: 0x0001C3AE
|
|
public pb_Bounds2D(Vector2 center, Vector2 size)
|
|
{
|
|
this.center = center;
|
|
this.size = size;
|
|
}
|
|
|
|
// Token: 0x06000234 RID: 564 RVA: 0x0001DFE5 File Offset: 0x0001C3E5
|
|
public pb_Bounds2D(Vector2[] points)
|
|
{
|
|
this.SetWithPoints(points);
|
|
}
|
|
|
|
// Token: 0x06000235 RID: 565 RVA: 0x0001E015 File Offset: 0x0001C415
|
|
public pb_Bounds2D(Vector2[] points, int[] indices)
|
|
{
|
|
this.SetWithPoints(points, indices);
|
|
}
|
|
|
|
// Token: 0x06000236 RID: 566 RVA: 0x0001E048 File Offset: 0x0001C448
|
|
public pb_Bounds2D(Vector2[] points, pb_Edge[] edges)
|
|
{
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
float num3 = 0f;
|
|
float num4 = 0f;
|
|
if (points.Length > 0 && edges.Length > 0)
|
|
{
|
|
num = points[edges[0].x].x;
|
|
num3 = points[edges[0].x].y;
|
|
num2 = num;
|
|
num4 = num3;
|
|
for (int i = 0; i < edges.Length; i++)
|
|
{
|
|
num = Mathf.Min(num, points[edges[i].x].x);
|
|
num = Mathf.Min(num, points[edges[i].y].x);
|
|
num3 = Mathf.Min(num3, points[edges[i].x].y);
|
|
num3 = Mathf.Min(num3, points[edges[i].y].y);
|
|
num2 = Mathf.Max(num2, points[edges[i].x].x);
|
|
num2 = Mathf.Max(num2, points[edges[i].y].x);
|
|
num4 = Mathf.Max(num4, points[edges[i].x].y);
|
|
num4 = Mathf.Max(num4, points[edges[i].y].y);
|
|
}
|
|
}
|
|
this.center = new Vector2((num + num2) / 2f, (num3 + num4) / 2f);
|
|
this.size = new Vector3(num2 - num, num4 - num3);
|
|
}
|
|
|
|
// Token: 0x06000237 RID: 567 RVA: 0x0001E1F8 File Offset: 0x0001C5F8
|
|
public pb_Bounds2D(Vector2[] points, int length)
|
|
{
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
float num3 = 0f;
|
|
float num4 = 0f;
|
|
if (points.Length > 0)
|
|
{
|
|
num = points[0].x;
|
|
num3 = points[0].y;
|
|
num2 = num;
|
|
num4 = num3;
|
|
for (int i = 1; i < length; i++)
|
|
{
|
|
num = Mathf.Min(num, points[i].x);
|
|
num3 = Mathf.Min(num3, points[i].y);
|
|
num2 = Mathf.Max(num2, points[i].x);
|
|
num4 = Mathf.Max(num4, points[i].y);
|
|
}
|
|
}
|
|
this.center = new Vector2((num + num2) / 2f, (num3 + num4) / 2f);
|
|
this.size = new Vector3(num2 - num, num4 - num3);
|
|
}
|
|
|
|
// Token: 0x17000036 RID: 54
|
|
// (get) Token: 0x06000238 RID: 568 RVA: 0x0001E304 File Offset: 0x0001C704
|
|
// (set) Token: 0x06000239 RID: 569 RVA: 0x0001E30C File Offset: 0x0001C70C
|
|
public Vector2 size
|
|
{
|
|
get
|
|
{
|
|
return this._size;
|
|
}
|
|
set
|
|
{
|
|
this._size = value;
|
|
this._extents.x = this._size.x * 0.5f;
|
|
this._extents.y = this._size.y * 0.5f;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000037 RID: 55
|
|
// (get) Token: 0x0600023A RID: 570 RVA: 0x0001E358 File Offset: 0x0001C758
|
|
public Vector2 extents
|
|
{
|
|
get
|
|
{
|
|
return this._extents;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000038 RID: 56
|
|
// (get) Token: 0x0600023B RID: 571 RVA: 0x0001E360 File Offset: 0x0001C760
|
|
public Vector2[] corners
|
|
{
|
|
get
|
|
{
|
|
return new Vector2[]
|
|
{
|
|
new Vector2(this.center.x - this.extents.x, this.center.y + this.extents.y),
|
|
new Vector2(this.center.x + this.extents.x, this.center.y + this.extents.y),
|
|
new Vector2(this.center.x - this.extents.x, this.center.y - this.extents.y),
|
|
new Vector2(this.center.x + this.extents.x, this.center.y - this.extents.y)
|
|
};
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600023C RID: 572 RVA: 0x0001E48C File Offset: 0x0001C88C
|
|
public bool ContainsPoint(Vector2 point)
|
|
{
|
|
return point.x <= this.center.x + this.extents.x && point.x >= this.center.x - this.extents.x && point.y <= this.center.y + this.extents.y && point.y >= this.center.y - this.extents.y;
|
|
}
|
|
|
|
// Token: 0x0600023D RID: 573 RVA: 0x0001E534 File Offset: 0x0001C934
|
|
public bool IntersectsLineSegment(Vector2 lineStart, Vector2 lineEnd)
|
|
{
|
|
if (this.ContainsPoint(lineStart) || this.ContainsPoint(lineEnd))
|
|
{
|
|
return true;
|
|
}
|
|
Vector2[] corners = this.corners;
|
|
return pb_Math.GetLineSegmentIntersect(corners[0], corners[1], lineStart, lineEnd) || pb_Math.GetLineSegmentIntersect(corners[1], corners[3], lineStart, lineEnd) || pb_Math.GetLineSegmentIntersect(corners[3], corners[2], lineStart, lineEnd) || pb_Math.GetLineSegmentIntersect(corners[2], corners[0], lineStart, lineEnd);
|
|
}
|
|
|
|
// Token: 0x0600023E RID: 574 RVA: 0x0001E5F0 File Offset: 0x0001C9F0
|
|
public bool Intersects(pb_Bounds2D bounds)
|
|
{
|
|
Vector2 vector = this.center - bounds.center;
|
|
Vector2 vector2 = this.size + bounds.size;
|
|
return Mathf.Abs(vector.x) * 2f < vector2.x && Mathf.Abs(vector.y) * 2f < vector2.y;
|
|
}
|
|
|
|
// Token: 0x0600023F RID: 575 RVA: 0x0001E660 File Offset: 0x0001CA60
|
|
public bool Intersects(Rect rect)
|
|
{
|
|
Vector2 vector = this.center - rect.center;
|
|
Vector2 vector2 = this.size + rect.size;
|
|
return Mathf.Abs(vector.x) * 2f < vector2.x && Mathf.Abs(vector.y) * 2f < vector2.y;
|
|
}
|
|
|
|
// Token: 0x06000240 RID: 576 RVA: 0x0001E6D0 File Offset: 0x0001CAD0
|
|
public void SetWithPoints(IList<Vector2> points)
|
|
{
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
float num3 = 0f;
|
|
float num4 = 0f;
|
|
int count = points.Count;
|
|
if (count > 0)
|
|
{
|
|
num = points[0].x;
|
|
num3 = points[0].y;
|
|
num2 = num;
|
|
num4 = num3;
|
|
for (int i = 1; i < count; i++)
|
|
{
|
|
float x = points[i].x;
|
|
float y = points[i].y;
|
|
if (x < num)
|
|
{
|
|
num = x;
|
|
}
|
|
if (x > num2)
|
|
{
|
|
num2 = x;
|
|
}
|
|
if (y < num3)
|
|
{
|
|
num3 = y;
|
|
}
|
|
if (y > num4)
|
|
{
|
|
num4 = y;
|
|
}
|
|
}
|
|
}
|
|
this.center.x = (num + num2) / 2f;
|
|
this.center.y = (num3 + num4) / 2f;
|
|
this._size.x = num2 - num;
|
|
this._size.y = num4 - num3;
|
|
this._extents.x = this._size.x * 0.5f;
|
|
this._extents.y = this._size.y * 0.5f;
|
|
}
|
|
|
|
// Token: 0x06000241 RID: 577 RVA: 0x0001E810 File Offset: 0x0001CC10
|
|
public void SetWithPoints(IList<Vector2> points, IList<int> indices)
|
|
{
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
float num3 = 0f;
|
|
float num4 = 0f;
|
|
if (points.Count > 0 && indices.Count > 0)
|
|
{
|
|
num = points[indices[0]].x;
|
|
num3 = points[indices[0]].y;
|
|
num2 = num;
|
|
num4 = num3;
|
|
for (int i = 1; i < indices.Count; i++)
|
|
{
|
|
float x = points[indices[i]].x;
|
|
float y = points[indices[i]].y;
|
|
if (x < num)
|
|
{
|
|
num = x;
|
|
}
|
|
if (x > num2)
|
|
{
|
|
num2 = x;
|
|
}
|
|
if (y < num3)
|
|
{
|
|
num3 = y;
|
|
}
|
|
if (y > num4)
|
|
{
|
|
num4 = y;
|
|
}
|
|
}
|
|
}
|
|
this.center.x = (num + num2) / 2f;
|
|
this.center.y = (num3 + num4) / 2f;
|
|
this._size.x = num2 - num;
|
|
this._size.y = num4 - num3;
|
|
this._extents.x = this._size.x * 0.5f;
|
|
this._extents.y = this._size.y * 0.5f;
|
|
}
|
|
|
|
// Token: 0x06000242 RID: 578 RVA: 0x0001E974 File Offset: 0x0001CD74
|
|
public static Vector2 Center(Vector2[] points, int length = -1)
|
|
{
|
|
int num = ((length >= 1) ? length : points.Length);
|
|
float num2 = points[0].x;
|
|
float num3 = points[0].y;
|
|
float num4 = num2;
|
|
float num5 = num3;
|
|
for (int i = 1; i < num; i++)
|
|
{
|
|
float x = points[i].x;
|
|
float y = points[i].y;
|
|
if (x < num2)
|
|
{
|
|
num2 = x;
|
|
}
|
|
if (x > num4)
|
|
{
|
|
num4 = x;
|
|
}
|
|
if (y < num3)
|
|
{
|
|
num3 = y;
|
|
}
|
|
if (y > num5)
|
|
{
|
|
num5 = y;
|
|
}
|
|
}
|
|
return new Vector2((num2 + num4) / 2f, (num3 + num5) / 2f);
|
|
}
|
|
|
|
// Token: 0x06000243 RID: 579 RVA: 0x0001EA44 File Offset: 0x0001CE44
|
|
public static Vector2 Center(Vector2[] points, int[] indices)
|
|
{
|
|
int num = indices.Length;
|
|
float num2 = points[indices[0]].x;
|
|
float num3 = points[indices[0]].y;
|
|
float num4 = num2;
|
|
float num5 = num3;
|
|
for (int i = 1; i < num; i++)
|
|
{
|
|
float x = points[indices[i]].x;
|
|
float y = points[indices[i]].y;
|
|
if (x < num2)
|
|
{
|
|
num2 = x;
|
|
}
|
|
if (x > num4)
|
|
{
|
|
num4 = x;
|
|
}
|
|
if (y < num3)
|
|
{
|
|
num3 = y;
|
|
}
|
|
if (y > num5)
|
|
{
|
|
num5 = y;
|
|
}
|
|
}
|
|
return new Vector2((num2 + num4) / 2f, (num3 + num5) / 2f);
|
|
}
|
|
|
|
// Token: 0x06000244 RID: 580 RVA: 0x0001EB0C File Offset: 0x0001CF0C
|
|
public override string ToString()
|
|
{
|
|
return string.Concat(new object[] { "[cen: ", this.center, " size: ", this.size, "]" });
|
|
}
|
|
|
|
// Token: 0x040001A8 RID: 424
|
|
public Vector2 center = Vector2.zero;
|
|
|
|
// Token: 0x040001A9 RID: 425
|
|
[SerializeField]
|
|
private Vector2 _size = Vector2.zero;
|
|
|
|
// Token: 0x040001AA RID: 426
|
|
[SerializeField]
|
|
private Vector2 _extents = Vector2.zero;
|
|
}
|
|
}
|