Resolves #138
Line Renderer now renders based on Pivot and resolves drawing issue with Editor script when using !Relative. However, need to update editor script to work with relative drawing.release
parent
652dd1a646
commit
1482d7c440
|
@ -20,10 +20,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
var oldMatrix = Handles.matrix;
|
var oldMatrix = Handles.matrix;
|
||||||
var transform = curveRenderer.GetComponent<RectTransform>();
|
var transform = curveRenderer.GetComponent<RectTransform>();
|
||||||
//Pivot must be 0,0 to edit
|
//Pivot must be 0,0 to edit
|
||||||
transform.pivot = Vector2.zero;
|
//transform.pivot = Vector2.zero;
|
||||||
Handles.matrix = transform.localToWorldMatrix;
|
Handles.matrix = transform.localToWorldMatrix;
|
||||||
|
|
||||||
var points = curveRenderer.Points;
|
var points = curveRenderer.Points;
|
||||||
|
//Need to transform points to worldspace! when set to Relative
|
||||||
|
|
||||||
for (int i = 0; i < points.Length - 1; i += 2)
|
for (int i = 0; i < points.Length - 1; i += 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,8 @@ using System.Collections.Generic;
|
||||||
namespace UnityEngine.UI.Extensions
|
namespace UnityEngine.UI.Extensions
|
||||||
{
|
{
|
||||||
[AddComponentMenu("UI/Extensions/Primitives/UILineRenderer")]
|
[AddComponentMenu("UI/Extensions/Primitives/UILineRenderer")]
|
||||||
public class UILineRenderer : UIPrimitiveBase
|
[RequireComponent(typeof(RectTransform))]
|
||||||
|
public class UILineRenderer : UIPrimitiveBase
|
||||||
{
|
{
|
||||||
private enum SegmentType
|
private enum SegmentType
|
||||||
{
|
{
|
||||||
|
@ -54,8 +55,6 @@ namespace UnityEngine.UI.Extensions
|
||||||
protected Vector2[] m_points;
|
protected Vector2[] m_points;
|
||||||
|
|
||||||
public float LineThickness = 2;
|
public float LineThickness = 2;
|
||||||
public bool UseMargins;
|
|
||||||
public Vector2 Margin;
|
|
||||||
public bool relativeSize;
|
public bool relativeSize;
|
||||||
|
|
||||||
public bool LineList = false;
|
public bool LineList = false;
|
||||||
|
@ -103,7 +102,7 @@ namespace UnityEngine.UI.Extensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPopulateMesh(VertexHelper vh)
|
protected override void OnPopulateMesh(VertexHelper vh)
|
||||||
{
|
{
|
||||||
if (m_points == null)
|
if (m_points == null)
|
||||||
return;
|
return;
|
||||||
|
@ -132,25 +131,11 @@ namespace UnityEngine.UI.Extensions
|
||||||
pointsToDraw = drawingPoints.ToArray();
|
pointsToDraw = drawingPoints.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
var sizeX = rectTransform.rect.width;
|
// scale based on the size of the rect or use absolute, this is switchable
|
||||||
var sizeY = rectTransform.rect.height;
|
var sizeX = !relativeSize ? 1 : rectTransform.rect.width;
|
||||||
var offsetX = -rectTransform.pivot.x * rectTransform.rect.width;
|
var sizeY = !relativeSize ? 1 : rectTransform.rect.height;
|
||||||
var offsetY = -rectTransform.pivot.y * rectTransform.rect.height;
|
var offsetX = -rectTransform.pivot.x * sizeX;
|
||||||
|
var offsetY = -rectTransform.pivot.y * sizeY;
|
||||||
// don't want to scale based on the size of the rect, so this is switchable now
|
|
||||||
if (!relativeSize)
|
|
||||||
{
|
|
||||||
sizeX = 1;
|
|
||||||
sizeY = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UseMargins)
|
|
||||||
{
|
|
||||||
sizeX -= Margin.x;
|
|
||||||
sizeY -= Margin.y;
|
|
||||||
offsetX += Margin.x / 2f;
|
|
||||||
offsetY += Margin.y / 2f;
|
|
||||||
}
|
|
||||||
|
|
||||||
vh.Clear();
|
vh.Clear();
|
||||||
|
|
||||||
|
@ -279,18 +264,21 @@ namespace UnityEngine.UI.Extensions
|
||||||
|
|
||||||
private UIVertex[] CreateLineSegment(Vector2 start, Vector2 end, SegmentType type)
|
private UIVertex[] CreateLineSegment(Vector2 start, Vector2 end, SegmentType type)
|
||||||
{
|
{
|
||||||
var uvs = middleUvs;
|
Vector2 offset = new Vector2((start.y - end.y), end.x - start.x).normalized * LineThickness / 2;
|
||||||
if (type == SegmentType.Start)
|
|
||||||
uvs = startUvs;
|
|
||||||
else if (type == SegmentType.End)
|
|
||||||
uvs = endUvs;
|
|
||||||
|
|
||||||
Vector2 offset = new Vector2(start.y - end.y, end.x - start.x).normalized * LineThickness / 2;
|
|
||||||
var v1 = start - offset;
|
var v1 = start - offset;
|
||||||
var v2 = start + offset;
|
var v2 = start + offset;
|
||||||
var v3 = end + offset;
|
var v3 = end + offset;
|
||||||
var v4 = end - offset;
|
var v4 = end - offset;
|
||||||
return SetVbo(new[] { v1, v2, v3, v4 }, uvs);
|
//Return the VDO with the correct uvs
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case SegmentType.Start:
|
||||||
|
return SetVbo(new[] { v1, v2, v3, v4 }, startUvs);
|
||||||
|
case SegmentType.End:
|
||||||
|
return SetVbo(new[] { v1, v2, v3, v4 }, endUvs);
|
||||||
|
default:
|
||||||
|
return SetVbo(new[] { v1, v2, v3, v4 }, middleUvs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue