using UnityEngine;
namespace FairyGUI
{
///
///
///
public class StraightLineMesh : IMeshFactory
{
///
///
///
public Color color;
///
///
///
public Vector3 origin;
///
///
///
public Vector3 end;
///
///
///
public float lineWidth;
///
///
///
public bool repeatFill;
public StraightLineMesh()
{
color = Color.black;
lineWidth = 1;
}
///
///
///
///
///
///
public StraightLineMesh(float lineWidth, Color color, bool repeatFill)
{
this.lineWidth = lineWidth;
this.color = color;
this.repeatFill = repeatFill;
}
public void OnPopulateMesh(VertexBuffer vb)
{
if (origin == end)
return;
float length = Vector2.Distance(origin, end);
Vector3 lineVector = end - origin;
Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1));
widthVector.Normalize();
Vector3 v0, v1, v2, v3;
if (repeatFill)
{
float ratio = length / vb.textureSize.x;
v0 = VertexBuffer.NormalizedUV[0];
v1 = VertexBuffer.NormalizedUV[1];
v2 = new Vector2(ratio, 1);
v3 = new Vector2(ratio, 0);
}
else
{
v0 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMin);
v1 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMax);
v2 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax);
v3 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMin);
}
vb.AddVert(origin - widthVector * lineWidth * 0.5f, color, v0);
vb.AddVert(origin + widthVector * lineWidth * 0.5f, color, v1);
vb.AddVert(end + widthVector * lineWidth * 0.5f, color, v2);
vb.AddVert(end - widthVector * lineWidth * 0.5f, color, v3);
vb.AddTriangles();
}
}
}