using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace ProBuilder2.Common { // Token: 0x0200005A RID: 90 public class pb_Vertex : IEquatable { // Token: 0x06000298 RID: 664 RVA: 0x0001FB4D File Offset: 0x0001DF4D public pb_Vertex(bool hasAllValues = false) { this.hasPosition = hasAllValues; this.hasColor = hasAllValues; this.hasNormal = hasAllValues; this.hasTangent = hasAllValues; this.hasUv0 = hasAllValues; this.hasUv2 = hasAllValues; this.hasUv3 = hasAllValues; this.hasUv4 = hasAllValues; } // Token: 0x06000299 RID: 665 RVA: 0x0001FB90 File Offset: 0x0001DF90 public pb_Vertex(pb_Vertex v) { this.position = v.position; this.hasPosition = v.hasPosition; this.color = v.color; this.hasColor = v.hasColor; this.uv0 = v.uv0; this.hasUv0 = v.hasUv0; this.normal = v.normal; this.hasNormal = v.hasNormal; this.tangent = v.tangent; this.hasTangent = v.hasTangent; this.uv2 = v.uv2; this.hasUv2 = v.hasUv2; this.uv3 = v.uv3; this.hasUv3 = v.hasUv3; this.uv4 = v.uv4; this.hasUv4 = v.hasUv4; } // Token: 0x0600029A RID: 666 RVA: 0x0001FC63 File Offset: 0x0001E063 public override bool Equals(object other) { return other is pb_Vertex && this.Equals(other as pb_Vertex); } // Token: 0x0600029B RID: 667 RVA: 0x0001FC80 File Offset: 0x0001E080 public bool Equals(pb_Vertex other) { return other != null && (this.position.Approx3(other.position, 0.0001f) && this.color.ApproxC(other.color, 0.0001f) && this.normal.Approx3(other.normal, 0.0001f) && this.tangent.Approx4(other.tangent, 0.0001f) && this.uv0.Approx2(other.uv0, 0.0001f) && this.uv2.Approx2(other.uv2, 0.0001f) && this.uv3.Approx4(other.uv3, 0.0001f)) && this.uv4.Approx4(other.uv4, 0.0001f); } // Token: 0x0600029C RID: 668 RVA: 0x0001FD6C File Offset: 0x0001E16C public override int GetHashCode() { int num = 783 + pb_Vector.GetHashCode(this.position); num = num * 29 + pb_Vector.GetHashCode(this.uv0); return num * 31 + pb_Vector.GetHashCode(this.normal); } // Token: 0x0600029D RID: 669 RVA: 0x0001FDB0 File Offset: 0x0001E1B0 public static pb_Vertex operator +(pb_Vertex a, pb_Vertex b) { pb_Vertex pb_Vertex = new pb_Vertex(a); pb_Vertex.Add(b); return pb_Vertex; } // Token: 0x0600029E RID: 670 RVA: 0x0001FDCC File Offset: 0x0001E1CC public void Add(pb_Vertex b) { this.position += b.position; this.color += b.color; this.normal += b.normal; this.tangent += b.tangent; this.uv0 += b.uv0; this.uv2 += b.uv2; this.uv3 += b.uv3; this.uv4 += b.uv4; } // Token: 0x0600029F RID: 671 RVA: 0x0001FE94 File Offset: 0x0001E294 public static pb_Vertex operator -(pb_Vertex a, pb_Vertex b) { pb_Vertex pb_Vertex = new pb_Vertex(a); pb_Vertex.Subtract(b); return pb_Vertex; } // Token: 0x060002A0 RID: 672 RVA: 0x0001FEB0 File Offset: 0x0001E2B0 public void Subtract(pb_Vertex b) { this.position -= b.position; this.color -= b.color; this.normal -= b.normal; this.tangent -= b.tangent; this.uv0 -= b.uv0; this.uv2 -= b.uv2; this.uv3 -= b.uv3; this.uv4 -= b.uv4; } // Token: 0x060002A1 RID: 673 RVA: 0x0001FF78 File Offset: 0x0001E378 public static pb_Vertex operator *(pb_Vertex a, float value) { pb_Vertex pb_Vertex = new pb_Vertex(a); pb_Vertex.Multiply(value); return pb_Vertex; } // Token: 0x060002A2 RID: 674 RVA: 0x0001FF94 File Offset: 0x0001E394 public void Multiply(float value) { this.position *= value; this.color *= value; this.normal *= value; this.tangent *= value; this.uv0 *= value; this.uv2 *= value; this.uv3 *= value; this.uv4 *= value; } // Token: 0x060002A3 RID: 675 RVA: 0x00020034 File Offset: 0x0001E434 public static pb_Vertex operator /(pb_Vertex a, float value) { pb_Vertex pb_Vertex = new pb_Vertex(a); pb_Vertex.Divide(value); return pb_Vertex; } // Token: 0x060002A4 RID: 676 RVA: 0x00020050 File Offset: 0x0001E450 public void Divide(float value) { this.position /= value; this.color /= value; this.normal /= value; this.tangent /= value; this.uv0 /= value; this.uv2 /= value; this.uv3 /= value; this.uv4 /= value; } // Token: 0x060002A5 RID: 677 RVA: 0x000200F0 File Offset: 0x0001E4F0 public void Normalize() { this.position.Normalize(); Vector4 vector = this.color; vector.Normalize(); this.color.r = vector.x; this.color.g = vector.y; this.color.b = vector.z; this.color.a = vector.w; this.normal.Normalize(); this.tangent.Normalize(); this.uv0.Normalize(); this.uv2.Normalize(); this.uv3.Normalize(); this.uv4.Normalize(); } // Token: 0x060002A6 RID: 678 RVA: 0x000201A5 File Offset: 0x0001E5A5 public override string ToString() { return this.position.ToString(); } // Token: 0x060002A7 RID: 679 RVA: 0x000201B8 File Offset: 0x0001E5B8 public static pb_Vertex[] GetVertices(pb_Object pb, IList indices = null) { int vertexCount = pb.vertexCount; int num = ((indices == null) ? pb.vertexCount : indices.Count); pb_Vertex[] array = new pb_Vertex[num]; Vector3[] vertices = pb.vertices; Color[] colors = pb.colors; Vector2[] uv = pb.uv; Vector3[] normals = pb.msh.normals; Vector4[] tangents = pb.msh.tangents; Vector2[] array2 = pb.msh.uv2; List list = new List(); List list2 = new List(); pb.GetUVs(2, list); pb.GetUVs(3, list2); bool flag = vertices != null && vertices.Count() == vertexCount; bool flag2 = colors != null && colors.Count() == vertexCount; bool flag3 = normals != null && normals.Count() == vertexCount; bool flag4 = tangents != null && tangents.Count() == vertexCount; bool flag5 = uv != null && uv.Count() == vertexCount; bool flag6 = array2 != null && array2.Count() == vertexCount; bool flag7 = list != null && list.Count() == vertexCount; bool flag8 = list2 != null && list2.Count() == vertexCount; for (int i = 0; i < num; i++) { array[i] = new pb_Vertex(false); int num2 = ((indices != null) ? indices[i] : i); if (flag) { array[i].hasPosition = true; array[i].position = vertices[num2]; } if (flag2) { array[i].hasColor = true; array[i].color = colors[num2]; } if (flag3) { array[i].hasNormal = true; array[i].normal = normals[num2]; } if (flag4) { array[i].hasTangent = true; array[i].tangent = tangents[num2]; } if (flag5) { array[i].hasUv0 = true; array[i].uv0 = uv[num2]; } if (flag6) { array[i].hasUv2 = true; array[i].uv2 = array2[num2]; } if (flag7) { array[i].hasUv3 = true; array[i].uv3 = list[num2]; } if (flag8) { array[i].hasUv4 = true; array[i].uv4 = list2[num2]; } } return array; } // Token: 0x060002A8 RID: 680 RVA: 0x00020464 File Offset: 0x0001E864 public static pb_Vertex[] GetVertices(Mesh m) { if (m == null) { return null; } int vertexCount = m.vertexCount; pb_Vertex[] array = new pb_Vertex[vertexCount]; Vector3[] vertices = m.vertices; Color[] colors = m.colors; Vector3[] normals = m.normals; Vector4[] tangents = m.tangents; Vector2[] uv = m.uv; Vector2[] array2 = m.uv2; List list = new List(); List list2 = new List(); m.GetUVs(2, list); m.GetUVs(3, list2); bool flag = vertices != null && vertices.Count() == vertexCount; bool flag2 = colors != null && colors.Count() == vertexCount; bool flag3 = normals != null && normals.Count() == vertexCount; bool flag4 = tangents != null && tangents.Count() == vertexCount; bool flag5 = uv != null && uv.Count() == vertexCount; bool flag6 = array2 != null && array2.Count() == vertexCount; bool flag7 = list != null && list.Count() == vertexCount; bool flag8 = list2 != null && list2.Count() == vertexCount; for (int i = 0; i < vertexCount; i++) { array[i] = new pb_Vertex(false); if (flag) { array[i].hasPosition = true; array[i].position = vertices[i]; } if (flag2) { array[i].hasColor = true; array[i].color = colors[i]; } if (flag3) { array[i].hasNormal = true; array[i].normal = normals[i]; } if (flag4) { array[i].hasTangent = true; array[i].tangent = tangents[i]; } if (flag5) { array[i].hasUv0 = true; array[i].uv0 = uv[i]; } if (flag6) { array[i].hasUv2 = true; array[i].uv2 = array2[i]; } if (flag7) { array[i].hasUv3 = true; array[i].uv3 = list[i]; } if (flag8) { array[i].hasUv4 = true; array[i].uv4 = list2[i]; } } return array; } // Token: 0x060002A9 RID: 681 RVA: 0x000206DC File Offset: 0x0001EADC public static void GetArrays(IList vertices, out Vector3[] position, out Color[] color, out Vector2[] uv0, out Vector3[] normal, out Vector4[] tangent, out Vector2[] uv2, out List uv3, out List uv4) { int count = vertices.Count; position = new Vector3[count]; color = new Color[count]; uv0 = new Vector2[count]; normal = new Vector3[count]; tangent = new Vector4[count]; uv2 = new Vector2[count]; uv3 = new List(count); uv4 = new List(count); for (int i = 0; i < count; i++) { position[i] = vertices[i].position; color[i] = vertices[i].color; uv0[i] = vertices[i].uv0; normal[i] = vertices[i].normal; tangent[i] = vertices[i].tangent; uv2[i] = vertices[i].uv2; uv3.Add(vertices[i].uv3); uv4.Add(vertices[i].uv4); } } // Token: 0x060002AA RID: 682 RVA: 0x00020808 File Offset: 0x0001EC08 public static void SetMesh(Mesh m, IList vertices) { Vector3[] array = null; Color[] array2 = null; Vector2[] array3 = null; Vector3[] array4 = null; Vector4[] array5 = null; Vector2[] array6 = null; List list = null; List list2 = null; pb_Vertex.GetArrays(vertices, out array, out array2, out array3, out array4, out array5, out array6, out list, out list2); m.Clear(); pb_Vertex pb_Vertex = vertices[0]; if (pb_Vertex.hasPosition) { m.vertices = array; } if (pb_Vertex.hasColor) { m.colors = array2; } if (pb_Vertex.hasUv0) { m.uv = array3; } if (pb_Vertex.hasNormal) { m.normals = array4; } if (pb_Vertex.hasTangent) { m.tangents = array5; } if (pb_Vertex.hasUv2) { m.uv2 = array6; } if (pb_Vertex.hasUv3 && list != null) { m.SetUVs(2, list); } if (pb_Vertex.hasUv4 && list2 != null) { m.SetUVs(3, list2); } } // Token: 0x060002AB RID: 683 RVA: 0x000208FC File Offset: 0x0001ECFC public static pb_Vertex Average(IList vertices, IList indices = null) { pb_Vertex pb_Vertex = new pb_Vertex(false); int num = ((indices == null) ? vertices.Count : indices.Count); int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; for (int i = 0; i < num; i++) { int num7 = ((indices != null) ? indices[i] : i); pb_Vertex.position += vertices[num7].position; pb_Vertex.color += vertices[num7].color; pb_Vertex.uv0 += vertices[num7].uv0; if (vertices[num7].hasNormal) { num2++; pb_Vertex.normal += vertices[num7].normal; } if (vertices[num7].hasTangent) { num3++; pb_Vertex.tangent += vertices[num7].tangent; } if (vertices[num7].hasUv2) { num4++; pb_Vertex.uv2 += vertices[num7].uv2; } if (vertices[num7].hasUv3) { num5++; pb_Vertex.uv3 += vertices[num7].uv3; } if (vertices[num7].hasUv4) { num6++; pb_Vertex.uv4 += vertices[num7].uv4; } } pb_Vertex.position *= 1f / (float)num; pb_Vertex.color *= 1f / (float)num; pb_Vertex.uv0 *= 1f / (float)num; pb_Vertex.normal *= 1f / (float)num2; pb_Vertex.tangent *= 1f / (float)num3; pb_Vertex.uv2 *= 1f / (float)num4; pb_Vertex.uv3 *= 1f / (float)num5; pb_Vertex.uv4 *= 1f / (float)num6; return pb_Vertex; } // Token: 0x060002AC RID: 684 RVA: 0x00020B94 File Offset: 0x0001EF94 public static pb_Vertex Mix(pb_Vertex x, pb_Vertex y, float a) { float num = 1f - a; pb_Vertex pb_Vertex = new pb_Vertex(false); pb_Vertex.position = x.position * num + y.position * a; pb_Vertex.color = x.color * num + y.color * a; pb_Vertex.uv0 = x.uv0 * num + y.uv0 * a; if (x.hasNormal && y.hasNormal) { pb_Vertex.normal = x.normal * num + y.normal * a; } else if (x.hasNormal) { pb_Vertex.normal = x.normal; } else if (y.hasNormal) { pb_Vertex.normal = y.normal; } if (x.hasTangent && y.hasTangent) { pb_Vertex.tangent = x.tangent * num + y.tangent * a; } else if (x.hasTangent) { pb_Vertex.tangent = x.tangent; } else if (y.hasTangent) { pb_Vertex.tangent = y.tangent; } if (x.hasUv2 && y.hasUv2) { pb_Vertex.uv2 = x.uv2 * num + y.uv2 * a; } else if (x.hasUv2) { pb_Vertex.uv2 = x.uv2; } else if (y.hasUv2) { pb_Vertex.uv2 = y.uv2; } if (x.hasUv3 && y.hasUv3) { pb_Vertex.uv3 = x.uv3 * num + y.uv3 * a; } else if (x.hasUv3) { pb_Vertex.uv3 = x.uv3; } else if (y.hasUv3) { pb_Vertex.uv3 = y.uv3; } if (x.hasUv4 && y.hasUv4) { pb_Vertex.uv4 = x.uv4 * num + y.uv4 * a; } else if (x.hasUv4) { pb_Vertex.uv4 = x.uv4; } else if (y.hasUv4) { pb_Vertex.uv4 = y.uv4; } return pb_Vertex; } // Token: 0x040001D9 RID: 473 public Vector3 position; // Token: 0x040001DA RID: 474 public Color color; // Token: 0x040001DB RID: 475 public Vector3 normal; // Token: 0x040001DC RID: 476 public Vector4 tangent; // Token: 0x040001DD RID: 477 public Vector2 uv0; // Token: 0x040001DE RID: 478 public Vector2 uv2; // Token: 0x040001DF RID: 479 public Vector4 uv3; // Token: 0x040001E0 RID: 480 public Vector4 uv4; // Token: 0x040001E1 RID: 481 public bool hasPosition; // Token: 0x040001E2 RID: 482 public bool hasColor; // Token: 0x040001E3 RID: 483 public bool hasNormal; // Token: 0x040001E4 RID: 484 public bool hasTangent; // Token: 0x040001E5 RID: 485 public bool hasUv0; // Token: 0x040001E6 RID: 486 public bool hasUv2; // Token: 0x040001E7 RID: 487 public bool hasUv3; // Token: 0x040001E8 RID: 488 public bool hasUv4; } }