using UnityEngine; public class UIGeometry { public BetterList verts = new BetterList(); public BetterList uvs = new BetterList(); public BetterList cols = new BetterList(); private BetterList mRtpVerts = new BetterList(); private Vector3 mRtpNormal; private Vector4 mRtpTan; public bool hasVertices => verts.size > 0; public bool hasTransformed { get { if (mRtpVerts != null && mRtpVerts.size > 0) { return mRtpVerts.size == verts.size; } return false; } } public void Clear() { verts.Clear(); uvs.Clear(); cols.Clear(); mRtpVerts.Clear(); } public void ApplyTransform(Matrix4x4 widgetToPanel, bool generateNormals = true) { if (verts.size > 0) { mRtpVerts.Clear(); int i = 0; for (int size = verts.size; i < size; i++) { mRtpVerts.Add(widgetToPanel.MultiplyPoint3x4(verts[i])); } if (generateNormals) { mRtpNormal = widgetToPanel.MultiplyVector(Vector3.back).normalized; Vector3 normalized = widgetToPanel.MultiplyVector(Vector3.right).normalized; mRtpTan = new Vector4(normalized.x, normalized.y, normalized.z, -1f); } } else { mRtpVerts.Clear(); } } public void WriteToBuffers(BetterList v, BetterList u, BetterList c, BetterList n, BetterList t) { if (mRtpVerts == null || mRtpVerts.size <= 0) { return; } if (n == null) { for (int i = 0; i < mRtpVerts.size; i++) { v.Add(mRtpVerts.buffer[i]); u.Add(uvs.buffer[i]); c.Add(cols.buffer[i]); } return; } for (int j = 0; j < mRtpVerts.size; j++) { v.Add(mRtpVerts.buffer[j]); u.Add(uvs.buffer[j]); c.Add(cols.buffer[j]); n.Add(mRtpNormal); t.Add(mRtpTan); } } }