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