Squircle primitive respects rectTransform's pivot
Squircle primitive now renders properly and doesn't move around on changing it's rectTransform's pivot.pull/473/head
parent
35b9985bf2
commit
5fb6c0844f
|
@ -31,7 +31,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
private float a, b;
|
private float a, b;
|
||||||
private List<Vector2> vert = new List<Vector2>();
|
private List<Vector2> vert = new List<Vector2>();
|
||||||
|
|
||||||
|
|
||||||
private float SquircleFunc(float t, bool xByY)
|
private float SquircleFunc(float t, bool xByY)
|
||||||
{
|
{
|
||||||
if (xByY)
|
if (xByY)
|
||||||
|
@ -42,13 +41,19 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
protected override void OnPopulateMesh(VertexHelper vh)
|
protected override void OnPopulateMesh(VertexHelper vh)
|
||||||
{
|
{
|
||||||
|
|
||||||
float dx = 0;
|
float dx = 0;
|
||||||
float dy = 0;
|
float dy = 0;
|
||||||
|
|
||||||
float width = rectTransform.rect.width / 2;
|
float width = rectTransform.rect.width / 2;
|
||||||
float height = rectTransform.rect.height / 2;
|
float height = rectTransform.rect.height / 2;
|
||||||
|
|
||||||
|
// Adjust vertices based on pivot offset
|
||||||
|
Vector2 pivotOffset = new Vector2(rectTransform.pivot.x - 0.5f, rectTransform.pivot.y - 0.5f);
|
||||||
|
float pivotOffsetX = pivotOffset.x * rectTransform.rect.width;
|
||||||
|
float pivotOffsetXTimesTwo = pivotOffsetX * 2;
|
||||||
|
float pivotOffsetY = pivotOffset.y * rectTransform.rect.height;
|
||||||
|
float pivotOffsetYTimesTwo = pivotOffsetY * 2;
|
||||||
|
|
||||||
if (squircleType == Type.Classic)
|
if (squircleType == Type.Classic)
|
||||||
{
|
{
|
||||||
a = width;
|
a = width;
|
||||||
|
@ -63,16 +68,14 @@ namespace UnityEngine.UI.Extensions
|
||||||
dy = height - a;
|
dy = height - a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float x = 0;
|
float x = 0;
|
||||||
float y = 1;
|
float y = 1;
|
||||||
vert.Clear();
|
vert.Clear();
|
||||||
vert.Add(new Vector2(0, height));
|
vert.Add(new Vector2(pivotOffsetX, height - pivotOffsetY));
|
||||||
while (x < y)
|
while (x < y)
|
||||||
{
|
{
|
||||||
y = SquircleFunc(x, true);
|
y = SquircleFunc(x, true);
|
||||||
vert.Add(new Vector2(dx + x, dy + y));
|
vert.Add(new Vector2(dx + x - pivotOffsetX, dy + y - pivotOffsetY));
|
||||||
x += delta;
|
x += delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,11 +87,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
while (y > 0)
|
while (y > 0)
|
||||||
{
|
{
|
||||||
x = SquircleFunc(y, false);
|
x = SquircleFunc(y, false);
|
||||||
vert.Add(new Vector2(dx + x, dy + y));
|
vert.Add(new Vector2(dx + x - pivotOffsetX, dy + y - pivotOffsetY));
|
||||||
y -= delta;
|
y -= delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
vert.Add(new Vector2(width, 0));
|
vert.Add(new Vector2(width - pivotOffsetX, pivotOffsetY));
|
||||||
|
|
||||||
for (int i = 1; i < vert.Count - 1; i++)
|
for (int i = 1; i < vert.Count - 1; i++)
|
||||||
{
|
{
|
||||||
|
@ -109,9 +112,9 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
vert.AddRange(vert.AsEnumerable().Reverse().Select(t => new Vector2(t.x, -t.y - pivotOffsetYTimesTwo)));
|
||||||
|
vert.AddRange(vert.AsEnumerable().Reverse().Select(t => new Vector2(-t.x - pivotOffsetXTimesTwo, t.y)));
|
||||||
|
|
||||||
vert.AddRange(vert.AsEnumerable().Reverse().Select(t => new Vector2(t.x, -t.y)));
|
|
||||||
vert.AddRange(vert.AsEnumerable().Reverse().Select(t => new Vector2(-t.x, t.y)));
|
|
||||||
|
|
||||||
vh.Clear();
|
vh.Clear();
|
||||||
|
|
||||||
|
@ -119,9 +122,9 @@ namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
vh.AddVert(vert[i], color, Vector2.zero);
|
vh.AddVert(vert[i], color, Vector2.zero);
|
||||||
vh.AddVert(vert[i + 1], color, Vector2.zero);
|
vh.AddVert(vert[i + 1], color, Vector2.zero);
|
||||||
vh.AddVert(Vector2.zero, color, Vector2.zero);
|
vh.AddVert(new Vector2(-pivotOffsetX, -pivotOffsetY), color, Vector2.zero);
|
||||||
|
int timesThree = i * 3;
|
||||||
vh.AddTriangle(i * 3, i * 3 + 1, i * 3 + 2);
|
vh.AddTriangle(timesThree, timesThree + 1, timesThree + 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue