using System; using System.Collections.Generic; using System.Text; using UnityEngine; namespace ProBuilder2.Common { // Token: 0x0200003D RID: 61 public class pb_ShapeGenerator { // Token: 0x060001FC RID: 508 RVA: 0x00019210 File Offset: 0x00017610 public static pb_Object StairGenerator(Vector3 size, int steps, bool buildSides) { Vector3[] array = new Vector3[4 * steps * 2]; pb_Face[] array2 = new pb_Face[steps * 2]; int num = 0; int num2 = 0; for (int i = 0; i < steps; i++) { float num3 = (float)i / (float)steps; float num4 = (float)(i + 1) / (float)steps; float x = size.x; float num5 = 0f; float num6 = size.y * num3; float num7 = size.y * num4; float num8 = size.z * num3; float num9 = size.z * num4; array[num] = new Vector3(x, num6, num8); array[num + 1] = new Vector3(num5, num6, num8); array[num + 2] = new Vector3(x, num7, num8); array[num + 3] = new Vector3(num5, num7, num8); array[num + 4] = new Vector3(x, num7, num8); array[num + 5] = new Vector3(num5, num7, num8); array[num + 6] = new Vector3(x, num7, num9); array[num + 7] = new Vector3(num5, num7, num9); array2[num2] = new pb_Face(new int[] { num, num + 1, num + 2, num + 1, num + 3, num + 2 }); array2[num2 + 1] = new pb_Face(new int[] { num + 4, num + 5, num + 6, num + 5, num + 7, num + 6 }); num += 8; num2 += 2; } if (buildSides) { float num10 = 0f; for (int j = 0; j < 2; j++) { Vector3[] array3 = new Vector3[steps * 4 + (steps - 1) * 3]; pb_Face[] array4 = new pb_Face[steps + steps - 1]; int num11 = 0; int num12 = 0; for (int k = 0; k < steps; k++) { float num13 = (float)Mathf.Max(k, 1) / (float)steps * size.y; float num14 = (float)(k + 1) / (float)steps * size.y; float num15 = (float)k / (float)steps * size.z; float num16 = (float)(k + 1) / (float)steps * size.z; array3[num11] = new Vector3(num10, 0f, num15); array3[num11 + 1] = new Vector3(num10, 0f, num16); array3[num11 + 2] = new Vector3(num10, num13, num15); array3[num11 + 3] = new Vector3(num10, num14, num16); pb_Face[] array5 = array4; int num17 = num12++; int[] array7; if (j % 2 == 0) { int[] array6 = new int[6]; array6[0] = num; array6[1] = num + 1; array6[2] = num + 2; array6[3] = num + 1; array6[4] = num + 3; array7 = array6; array6[5] = num + 2; } else { int[] array8 = new int[6]; array8[0] = num + 2; array8[1] = num + 1; array8[2] = num; array8[3] = num + 2; array8[4] = num + 3; array7 = array8; array8[5] = num + 1; } array5[num17] = new pb_Face(array7); array4[num12 - 1].textureGroup = j + 1; num += 4; num11 += 4; if (k > 0) { array3[num11] = new Vector3(num10, num13, num15); array3[num11 + 1] = new Vector3(num10, num14, num15); array3[num11 + 2] = new Vector3(num10, num14, num16); pb_Face[] array9 = array4; int num18 = num12++; int[] array11; if (j % 2 == 0) { int[] array10 = new int[3]; array10[0] = num + 2; array10[1] = num + 1; array11 = array10; array10[2] = num; } else { int[] array12 = new int[3]; array12[0] = num; array12[1] = num + 1; array11 = array12; array12[2] = num + 2; } array9[num18] = new pb_Face(array11); array4[num12 - 1].textureGroup = j + 1; num += 3; num11 += 3; } } array = array.Concat(array3); array2 = array2.Concat(array4); num10 += size.x; } array = array.Concat(new Vector3[] { new Vector3(0f, 0f, size.z), new Vector3(size.x, 0f, size.z), new Vector3(0f, size.y, size.z), new Vector3(size.x, size.y, size.z) }); array2 = array2.Add(new pb_Face(new int[] { num, num + 1, num + 2, num + 1, num + 3, num + 2 })); } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(array, array2); pb_Object.gameObject.name = "Stairs"; return pb_Object; } // Token: 0x060001FD RID: 509 RVA: 0x00019730 File Offset: 0x00017B30 public static pb_Object CurvedStairGenerator(float stairWidth, float height, float innerRadius, float circumference, int steps, bool buildSides) { bool flag = innerRadius < Mathf.Epsilon; Vector3[] array = new Vector3[4 * steps + ((!flag) ? 4 : 3) * steps]; pb_Face[] array2 = new pb_Face[steps * 2]; int num = 0; int num2 = 0; float num3 = Mathf.Abs(circumference) * 0.017453292f; float num4 = innerRadius + stairWidth; for (int i = 0; i < steps; i++) { float num5 = (float)i / (float)steps * num3; float num6 = (float)(i + 1) / (float)steps * num3; float num7 = (float)i / (float)steps * height; float num8 = (float)(i + 1) / (float)steps * height; Vector3 vector = new Vector3(-Mathf.Cos(num5), 0f, Mathf.Sin(num5)); Vector3 vector2 = new Vector3(-Mathf.Cos(num6), 0f, Mathf.Sin(num6)); array[num] = vector * innerRadius; array[num + 1] = vector * num4; array[num + 2] = vector * innerRadius; array[num + 3] = vector * num4; array[num].y = num7; array[num + 1].y = num7; array[num + 2].y = num8; array[num + 3].y = num8; array[num + 4] = array[num + 2]; array[num + 5] = array[num + 3]; array[num + 6] = vector2 * num4; array[num + 6].y = num8; if (!flag) { array[num + 7] = vector2 * innerRadius; array[num + 7].y = num8; } array2[num2] = new pb_Face(new int[] { num, num + 1, num + 2, num + 1, num + 3, num + 2 }); if (flag) { array2[num2 + 1] = new pb_Face(new int[] { num + 4, num + 5, num + 6 }); } else { array2[num2 + 1] = new pb_Face(new int[] { num + 4, num + 5, num + 6, num + 4, num + 6, num + 7 }); } float num9 = (num6 + num5) * -0.5f * 57.29578f; num9 %= 360f; if (num9 < 0f) { num9 = 360f + num9; } array2[num2 + 1].uv.rotation = num9; num += ((!flag) ? 8 : 7); num2 += 2; } if (buildSides) { float num10 = ((!flag) ? innerRadius : (innerRadius + stairWidth)); for (int j = ((!flag) ? 0 : 1); j < 2; j++) { Vector3[] array3 = new Vector3[steps * 4 + (steps - 1) * 3]; pb_Face[] array4 = new pb_Face[steps + steps - 1]; int num11 = 0; int num12 = 0; for (int k = 0; k < steps; k++) { float num13 = (float)k / (float)steps * num3; float num14 = (float)(k + 1) / (float)steps * num3; float num15 = (float)Mathf.Max(k, 1) / (float)steps * height; float num16 = (float)(k + 1) / (float)steps * height; Vector3 vector3 = new Vector3(-Mathf.Cos(num13), 0f, Mathf.Sin(num13)) * num10; Vector3 vector4 = new Vector3(-Mathf.Cos(num14), 0f, Mathf.Sin(num14)) * num10; array3[num11] = vector3; array3[num11 + 1] = vector4; array3[num11 + 2] = vector3; array3[num11 + 3] = vector4; array3[num11].y = 0f; array3[num11 + 1].y = 0f; array3[num11 + 2].y = num15; array3[num11 + 3].y = num16; pb_Face[] array5 = array4; int num17 = num12++; int[] array7; if (j % 2 == 0) { int[] array6 = new int[6]; array6[0] = num + 2; array6[1] = num + 1; array6[2] = num; array6[3] = num + 2; array6[4] = num + 3; array7 = array6; array6[5] = num + 1; } else { int[] array8 = new int[6]; array8[0] = num; array8[1] = num + 1; array8[2] = num + 2; array8[3] = num + 1; array8[4] = num + 3; array7 = array8; array8[5] = num + 2; } array5[num17] = new pb_Face(array7); array4[num12 - 1].smoothingGroup = j + 1; num += 4; num11 += 4; if (k > 0) { array4[num12 - 1].textureGroup = j * steps + k; array3[num11] = vector3; array3[num11 + 1] = vector4; array3[num11 + 2] = vector3; array3[num11].y = num15; array3[num11 + 1].y = num16; array3[num11 + 2].y = num16; pb_Face[] array9 = array4; int num18 = num12++; int[] array11; if (j % 2 == 0) { int[] array10 = new int[3]; array10[0] = num + 2; array10[1] = num + 1; array11 = array10; array10[2] = num; } else { int[] array12 = new int[3]; array12[0] = num; array12[1] = num + 1; array11 = array12; array12[2] = num + 2; } array9[num18] = new pb_Face(array11); array4[num12 - 1].textureGroup = j * steps + k; array4[num12 - 1].smoothingGroup = j + 1; num += 3; num11 += 3; } } array = array.Concat(array3); array2 = array2.Concat(array4); num10 += stairWidth; } float num19 = -Mathf.Cos(num3); float num20 = Mathf.Sin(num3); array = array.Concat(new Vector3[] { new Vector3(num19, 0f, num20) * innerRadius, new Vector3(num19, 0f, num20) * num4, new Vector3(num19 * innerRadius, height, num20 * innerRadius), new Vector3(num19 * num4, height, num20 * num4) }); array2 = array2.Add(new pb_Face(new int[] { num + 2, num + 1, num, num + 2, num + 3, num + 1 })); } if (circumference < 0f) { Vector3 vector5 = new Vector3(-1f, 1f, 1f); for (int l = 0; l < array.Length; l++) { array[l].Scale(vector5); } foreach (pb_Face pb_Face in array2) { pb_Face.ReverseIndices(); } } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(array, array2); pb_Object.gameObject.name = "Stairs"; return pb_Object; } // Token: 0x060001FE RID: 510 RVA: 0x00019E8C File Offset: 0x0001828C public static pb_Object StairGenerator(int steps, float width, float height, float depth, bool sidesGoToFloor, bool generateBack, bool platformsOnly) { List list = new List(); Vector3[] array = ((!platformsOnly) ? new Vector3[16] : new Vector3[8]); float num = height / (float)steps; float num2 = depth / (float)steps; for (int i = 0; i < steps; i++) { float num3 = width / 2f; float num4 = (float)i * num; float num5 = (float)i * num2; if (sidesGoToFloor) { num4 = 0f; } float num6 = (float)i * num + num; array[0] = new Vector3(num3, (float)i * num, num5); array[1] = new Vector3(-num3, (float)i * num, num5); array[2] = new Vector3(num3, num6, num5); array[3] = new Vector3(-num3, num6, num5); array[4] = new Vector3(num3, num6, num5); array[5] = new Vector3(-num3, num6, num5); array[6] = new Vector3(num3, num6, num5 + num2); array[7] = new Vector3(-num3, num6, num5 + num2); if (!platformsOnly) { array[8] = new Vector3(num3, num4, num5 + num2); array[9] = new Vector3(num3, num4, num5); array[10] = new Vector3(num3, num6, num5 + num2); array[11] = new Vector3(num3, num6, num5); array[12] = new Vector3(-num3, num4, num5); array[13] = new Vector3(-num3, num4, num5 + num2); array[14] = new Vector3(-num3, num6, num5); array[15] = new Vector3(-num3, num6, num5 + num2); } list.AddRange(array); } if (generateBack) { list.Add(new Vector3(-width / 2f, 0f, depth)); list.Add(new Vector3(width / 2f, 0f, depth)); list.Add(new Vector3(-width / 2f, height, depth)); list.Add(new Vector3(width / 2f, height, depth)); } pb_Object pb_Object = pb_Object.CreateInstanceWithPoints(list.ToArray()); pb_Object.gameObject.name = "Stairs"; return pb_Object; } // Token: 0x060001FF RID: 511 RVA: 0x0001A134 File Offset: 0x00018534 public static pb_Object CubeGenerator(Vector3 size) { Vector3[] array = new Vector3[pb_Constant.TRIANGLES_CUBE.Length]; for (int i = 0; i < pb_Constant.TRIANGLES_CUBE.Length; i++) { array[i] = Vector3.Scale(pb_Constant.VERTICES_CUBE[pb_Constant.TRIANGLES_CUBE[i]], size); } pb_Object pb_Object = pb_Object.CreateInstanceWithPoints(array); pb_Object.gameObject.name = "Cube"; return pb_Object; } // Token: 0x06000200 RID: 512 RVA: 0x0001A1A8 File Offset: 0x000185A8 public static pb_Object CylinderGenerator(int axisDivisions, float radius, float height, int heightCuts, int smoothing = -1) { if (axisDivisions % 2 != 0) { axisDivisions++; } if (axisDivisions > 64) { axisDivisions = 64; } float num = 360f / (float)axisDivisions; float num2 = height / (float)(heightCuts + 1); Vector3[] array = new Vector3[axisDivisions]; for (int i = 0; i < axisDivisions; i++) { float num3 = num * (float)i * 0.017453292f; float num4 = Mathf.Cos(num3) * radius; float num5 = Mathf.Sin(num3) * radius; array[i] = new Vector3(num4, 0f, num5); } Vector3[] array2 = new Vector3[axisDivisions * (heightCuts + 1) * 4 + axisDivisions * 6]; pb_Face[] array3 = new pb_Face[axisDivisions * (heightCuts + 1) + axisDivisions * 2]; int num6 = 0; for (int j = 0; j < heightCuts + 1; j++) { float num7 = (float)j * num2; float num8 = (float)(j + 1) * num2; for (int k = 0; k < axisDivisions; k++) { array2[num6] = new Vector3(array[k].x, num7, array[k].z); array2[num6 + 1] = new Vector3(array[k].x, num8, array[k].z); if (k != axisDivisions - 1) { array2[num6 + 2] = new Vector3(array[k + 1].x, num7, array[k + 1].z); array2[num6 + 3] = new Vector3(array[k + 1].x, num8, array[k + 1].z); } else { array2[num6 + 2] = new Vector3(array[0].x, num7, array[0].z); array2[num6 + 3] = new Vector3(array[0].x, num8, array[0].z); } num6 += 4; } } int num9 = 0; for (int l = 0; l < heightCuts + 1; l++) { for (int m = 0; m < axisDivisions * 4; m += 4) { int num10 = l * (axisDivisions * 4) + m; int num11 = num10; int num12 = num10 + 1; int num13 = num10 + 2; int num14 = num10 + 3; array3[num9++] = new pb_Face(new int[] { num11, num12, num13, num12, num14, num13 }, pb_Constant.DefaultMaterial, new pb_UV(), smoothing, -1, -1, false); } } int num15 = axisDivisions * (heightCuts + 1) * 4; int num16 = axisDivisions * (heightCuts + 1); for (int n = 0; n < axisDivisions; n++) { array2[num15] = new Vector3(array[n].x, 0f, array[n].z); array2[num15 + 1] = Vector3.zero; if (n != axisDivisions - 1) { array2[num15 + 2] = new Vector3(array[n + 1].x, 0f, array[n + 1].z); } else { array2[num15 + 2] = new Vector3(array[0].x, 0f, array[0].z); } array3[num16 + n] = new pb_Face(new int[] { num15 + 2, num15 + 1, num15 }); num15 += 3; array2[num15] = new Vector3(array[n].x, height, array[n].z); array2[num15 + 1] = new Vector3(0f, height, 0f); if (n != axisDivisions - 1) { array2[num15 + 2] = new Vector3(array[n + 1].x, height, array[n + 1].z); } else { array2[num15 + 2] = new Vector3(array[0].x, height, array[0].z); } array3[num16 + (n + axisDivisions)] = new pb_Face(new int[] { num15, num15 + 1, num15 + 2 }); num15 += 3; } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(array2, array3); pb_Object.gameObject.name = "Cylinder"; return pb_Object; } // Token: 0x06000201 RID: 513 RVA: 0x0001A688 File Offset: 0x00018A88 public static pb_Object PrismGenerator(Vector3 size) { size.y *= 2f; Vector3[] array = new Vector3[] { Vector3.Scale(new Vector3(-0.5f, 0f, -0.5f), size), Vector3.Scale(new Vector3(0.5f, 0f, -0.5f), size), Vector3.Scale(new Vector3(0f, 0.5f, -0.5f), size), Vector3.Scale(new Vector3(-0.5f, 0f, 0.5f), size), Vector3.Scale(new Vector3(0.5f, 0f, 0.5f), size), Vector3.Scale(new Vector3(0f, 0.5f, 0.5f), size) }; Vector3[] array2 = new Vector3[] { array[0], array[1], array[2], array[1], array[4], array[2], array[5], array[4], array[3], array[5], array[3], array[0], array[5], array[2], array[0], array[1], array[3], array[4] }; pb_Face[] array3 = new pb_Face[5]; int num = 0; int[] array4 = new int[3]; array4[0] = 2; array4[1] = 1; array3[num] = new pb_Face(array4); array3[1] = new pb_Face(new int[] { 5, 4, 3, 5, 6, 4 }); array3[2] = new pb_Face(new int[] { 9, 8, 7 }); array3[3] = new pb_Face(new int[] { 12, 11, 10, 12, 13, 11 }); array3[4] = new pb_Face(new int[] { 14, 15, 16, 15, 17, 16 }); pb_Face[] array5 = array3; pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(array2, array5); pb_Object.gameObject.name = "Prism"; return pb_Object; } // Token: 0x06000202 RID: 514 RVA: 0x0001A9F0 File Offset: 0x00018DF0 public static pb_Object DoorGenerator(float totalWidth, float totalHeight, float ledgeHeight, float legWidth, float depth) { float num = totalWidth / 2f; legWidth = num - legWidth; ledgeHeight = totalHeight - ledgeHeight; Vector3[] array = new Vector3[] { new Vector3(-num, 0f, depth), new Vector3(-legWidth, 0f, depth), new Vector3(legWidth, 0f, depth), new Vector3(num, 0f, depth), new Vector3(-num, ledgeHeight, depth), new Vector3(-legWidth, ledgeHeight, depth), new Vector3(legWidth, ledgeHeight, depth), new Vector3(num, ledgeHeight, depth), new Vector3(-num, totalHeight, depth), new Vector3(-legWidth, totalHeight, depth), new Vector3(legWidth, totalHeight, depth), new Vector3(num, totalHeight, depth) }; List list = new List(); list.Add(array[0]); list.Add(array[1]); list.Add(array[4]); list.Add(array[5]); list.Add(array[2]); list.Add(array[3]); list.Add(array[6]); list.Add(array[7]); list.Add(array[4]); list.Add(array[5]); list.Add(array[8]); list.Add(array[9]); list.Add(array[6]); list.Add(array[7]); list.Add(array[10]); list.Add(array[11]); list.Add(array[5]); list.Add(array[6]); list.Add(array[9]); list.Add(array[10]); List list2 = new List(); for (int i = 0; i < list.Count; i += 4) { list2.Add(list[i + 1] - Vector3.forward * depth); list2.Add(list[i] - Vector3.forward * depth); list2.Add(list[i + 3] - Vector3.forward * depth); list2.Add(list[i + 2] - Vector3.forward * depth); } list.AddRange(list2); list.Add(array[6]); list.Add(array[5]); list.Add(array[6] - Vector3.forward * depth); list.Add(array[5] - Vector3.forward * depth); list.Add(array[2] - Vector3.forward * depth); list.Add(array[2]); list.Add(array[6] - Vector3.forward * depth); list.Add(array[6]); list.Add(array[1]); list.Add(array[1] - Vector3.forward * depth); list.Add(array[5]); list.Add(array[5] - Vector3.forward * depth); pb_Object pb_Object = pb_Object.CreateInstanceWithPoints(list.ToArray()); pb_Object.gameObject.name = "Door"; return pb_Object; } // Token: 0x06000203 RID: 515 RVA: 0x0001AEA8 File Offset: 0x000192A8 public static pb_Object PlaneGenerator(float _width, float _height, int widthCuts, int heightCuts, Axis axis, bool smooth) { int num = widthCuts + 1; int num2 = heightCuts + 1; Vector2[] array = ((!smooth) ? new Vector2[num * num2 * 4] : new Vector2[num * num2]); Vector3[] array2 = ((!smooth) ? new Vector3[num * num2 * 4] : new Vector3[num * num2]); pb_Face[] array3 = new pb_Face[num * num2]; int i = 0; int num3 = 0; for (int j = 0; j < num2; j++) { for (int k = 0; k < num; k++) { float num4 = (float)k * (_width / (float)num) - _width / 2f - _width / (float)num / (float)num; float num5 = (float)(k + 1) * (_width / (float)num) - _width / 2f - _width / (float)num / (float)num; float num6 = (float)j * (_height / (float)num2) - _height / 2f - _height / (float)num2 / (float)num2; float num7 = (float)(j + 1) * (_height / (float)num2) - _height / 2f - _height / (float)num2 / (float)num2; array[i] = new Vector2(num4, num6); array[i + 1] = new Vector2(num5, num6); array[i + 2] = new Vector2(num4, num7); array[i + 3] = new Vector2(num5, num7); array3[num3++] = new pb_Face(new int[] { i, i + 1, i + 2, i + 1, i + 3, i + 2 }); i += 4; } } switch (axis) { case Axis.Right: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(0f, array[i].x, array[i].y); } break; case Axis.Left: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(0f, array[i].y, array[i].x); } break; case Axis.Up: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(array[i].y, 0f, array[i].x); } break; case Axis.Down: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(array[i].x, 0f, array[i].y); } break; case Axis.Forward: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(array[i].x, array[i].y, 0f); } break; case Axis.Backward: for (i = 0; i < array2.Length; i++) { array2[i] = new Vector3(array[i].y, array[i].x, 0f); } break; } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(array2, array3); pb_Object.gameObject.name = "Plane"; Vector3 vector = Vector3.zero; Vector3[] array4 = pb_Object.VerticesInWorldSpace(); foreach (Vector3 vector2 in array4) { vector += vector2; } vector /= (float)array4.Length; Vector3 vector3 = pb_Object.transform.position - vector; pb_Object.transform.position = vector; pb_Object.TranslateVertices_World(pb_Object.msh.triangles, vector3); return pb_Object; } // Token: 0x06000204 RID: 516 RVA: 0x0001B30C File Offset: 0x0001970C public static pb_Object PipeGenerator(float radius, float height, float thickness, int subdivAxis, int subdivHeight) { Vector2[] array = new Vector2[subdivAxis]; Vector2[] array2 = new Vector2[subdivAxis]; for (int i = 0; i < subdivAxis; i++) { array[i] = pb_Math.PointInCircumference(radius, (float)i * (360f / (float)subdivAxis), Vector2.zero); array2[i] = pb_Math.PointInCircumference(radius - thickness, (float)i * (360f / (float)subdivAxis), Vector2.zero); } List list = new List(); subdivHeight++; for (int j = 0; j < subdivHeight; j++) { float num = (float)j * (height / (float)subdivHeight); float num2 = (float)(j + 1) * (height / (float)subdivHeight); for (int k = 0; k < subdivAxis; k++) { Vector2 vector = array[k]; Vector2 vector2 = ((k >= subdivAxis - 1) ? array[0] : array[k + 1]); Vector3[] array3 = new Vector3[] { new Vector3(vector2.x, num, vector2.y), new Vector3(vector.x, num, vector.y), new Vector3(vector2.x, num2, vector2.y), new Vector3(vector.x, num2, vector.y) }; vector = array2[k]; vector2 = ((k >= subdivAxis - 1) ? array2[0] : array2[k + 1]); Vector3[] array4 = new Vector3[] { new Vector3(vector.x, num, vector.y), new Vector3(vector2.x, num, vector2.y), new Vector3(vector.x, num2, vector.y), new Vector3(vector2.x, num2, vector2.y) }; list.AddRange(array3); list.AddRange(array4); } } for (int l = 0; l < subdivAxis; l++) { Vector2 vector = array[l]; Vector2 vector2 = ((l >= subdivAxis - 1) ? array[0] : array[l + 1]); Vector2 vector3 = array2[l]; Vector2 vector4 = ((l >= subdivAxis - 1) ? array2[0] : array2[l + 1]); Vector3[] array5 = new Vector3[] { new Vector3(vector2.x, height, vector2.y), new Vector3(vector.x, height, vector.y), new Vector3(vector4.x, height, vector4.y), new Vector3(vector3.x, height, vector3.y) }; Vector3[] array6 = new Vector3[] { new Vector3(vector.x, 0f, vector.y), new Vector3(vector2.x, 0f, vector2.y), new Vector3(vector3.x, 0f, vector3.y), new Vector3(vector4.x, 0f, vector4.y) }; list.AddRange(array6); list.AddRange(array5); } pb_Object pb_Object = pb_Object.CreateInstanceWithPoints(list.ToArray()); pb_Object.gameObject.name = "Pipe"; return pb_Object; } // Token: 0x06000205 RID: 517 RVA: 0x0001B74C File Offset: 0x00019B4C public static pb_Object ConeGenerator(float radius, float height, int subdivAxis) { Vector3[] array = new Vector3[subdivAxis]; for (int i = 0; i < subdivAxis; i++) { Vector2 vector = pb_Math.PointInCircumference(radius, (float)i * (360f / (float)subdivAxis), Vector2.zero); array[i] = new Vector3(vector.x, 0f, vector.y); } List list = new List(); List list2 = new List(); for (int j = 0; j < subdivAxis; j++) { list.Add(array[j]); list.Add((j >= subdivAxis - 1) ? array[0] : array[j + 1]); list.Add(Vector3.up * height); list.Add(array[j]); list.Add((j >= subdivAxis - 1) ? array[0] : array[j + 1]); list.Add(Vector3.zero); } for (int k = 0; k < subdivAxis * 6; k += 6) { list2.Add(new pb_Face(new int[] { k + 2, k + 1, k })); list2.Add(new pb_Face(new int[] { k + 3, k + 4, k + 5 })); } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(list.ToArray(), list2.ToArray()); pb_Object.gameObject.name = "Cone"; return pb_Object; } // Token: 0x06000206 RID: 518 RVA: 0x0001B900 File Offset: 0x00019D00 public static pb_Object ArchGenerator(float angle, float radius, float width, float depth, int radialCuts, bool insideFaces, bool outsideFaces, bool frontFaces, bool backFaces, bool endCaps) { Vector2[] array = new Vector2[radialCuts]; Vector2[] array2 = new Vector2[radialCuts]; for (int i = 0; i < radialCuts; i++) { array[i] = pb_Math.PointInCircumference(radius, (float)i * (angle / (float)(radialCuts - 1)), Vector2.zero); array2[i] = pb_Math.PointInCircumference(radius - width, (float)i * (angle / (float)(radialCuts - 1)), Vector2.zero); } List list = new List(); float num = 0f; for (int j = 0; j < radialCuts - 1; j++) { Vector2 vector = array[j]; Vector2 vector2 = ((j >= radialCuts - 1) ? array[j] : array[j + 1]); Vector3[] array3 = new Vector3[] { new Vector3(vector.x, vector.y, num), new Vector3(vector2.x, vector2.y, num), new Vector3(vector.x, vector.y, depth), new Vector3(vector2.x, vector2.y, depth) }; vector = array2[j]; vector2 = ((j >= radialCuts - 1) ? array2[j] : array2[j + 1]); Vector3[] array4 = new Vector3[] { new Vector3(vector2.x, vector2.y, num), new Vector3(vector.x, vector.y, num), new Vector3(vector2.x, vector2.y, depth), new Vector3(vector.x, vector.y, depth) }; if (outsideFaces) { list.AddRange(array3); } if (j != radialCuts - 1 && insideFaces) { list.AddRange(array4); } if (angle < 360f && endCaps) { if (j == 0) { list.AddRange(new Vector3[] { new Vector3(array[j].x, array[j].y, depth), new Vector3(array2[j].x, array2[j].y, depth), new Vector3(array[j].x, array[j].y, num), new Vector3(array2[j].x, array2[j].y, num) }); } if (j == radialCuts - 2) { list.AddRange(new Vector3[] { new Vector3(array2[j + 1].x, array2[j + 1].y, depth), new Vector3(array[j + 1].x, array[j + 1].y, depth), new Vector3(array2[j + 1].x, array2[j + 1].y, num), new Vector3(array[j + 1].x, array[j + 1].y, num) }); } } } for (int k = 0; k < radialCuts - 1; k++) { Vector2 vector = array[k]; Vector2 vector2 = ((k >= radialCuts - 1) ? array[k] : array[k + 1]); Vector2 vector3 = array2[k]; Vector2 vector4 = ((k >= radialCuts - 1) ? array2[k] : array2[k + 1]); Vector3[] array5 = new Vector3[] { new Vector3(vector.x, vector.y, depth), new Vector3(vector2.x, vector2.y, depth), new Vector3(vector3.x, vector3.y, depth), new Vector3(vector4.x, vector4.y, depth) }; Vector3[] array6 = new Vector3[] { new Vector3(vector2.x, vector2.y, 0f), new Vector3(vector.x, vector.y, 0f), new Vector3(vector4.x, vector4.y, 0f), new Vector3(vector3.x, vector3.y, 0f) }; if (frontFaces) { list.AddRange(array5); } if (backFaces) { list.AddRange(array6); } } pb_Object pb_Object = pb_Object.CreateInstanceWithPoints(list.ToArray()); pb_Object.gameObject.name = "Arch"; return pb_Object; } // Token: 0x06000207 RID: 519 RVA: 0x0001BEF4 File Offset: 0x0001A2F4 public static pb_Object IcosahedronGenerator(float radius, int subdivisions) { Vector3[] array = new Vector3[pb_ShapeGenerator.ICOSAHEDRON_TRIANGLES.Length]; for (int i = 0; i < pb_ShapeGenerator.ICOSAHEDRON_TRIANGLES.Length; i += 3) { array[i] = pb_ShapeGenerator.ICOSAHEDRON_VERTICES[pb_ShapeGenerator.ICOSAHEDRON_TRIANGLES[i]].normalized * radius; array[i + 1] = pb_ShapeGenerator.ICOSAHEDRON_VERTICES[pb_ShapeGenerator.ICOSAHEDRON_TRIANGLES[i + 1]].normalized * radius; array[i + 2] = pb_ShapeGenerator.ICOSAHEDRON_VERTICES[pb_ShapeGenerator.ICOSAHEDRON_TRIANGLES[i + 2]].normalized * radius; } for (int j = 0; j < subdivisions; j++) { array = pb_ShapeGenerator.SubdivideIcosahedron(array, radius); } pb_Face[] array2 = new pb_Face[array.Length / 3]; for (int k = 0; k < array.Length; k += 3) { array2[k / 3] = new pb_Face(new int[] { k, k + 1, k + 2 }); array2[k / 3].manualUV = true; } GameObject gameObject = new GameObject(); pb_Object pb_Object = gameObject.AddComponent(); pb_Object.SetVertices(array); pb_Object.SetUV(new Vector2[array.Length]); pb_Object.SetFaces(array2); pb_IntArray[] array3 = new pb_IntArray[array.Length]; for (int l = 0; l < array3.Length; l++) { array3[l] = new pb_IntArray(new int[] { l }); } pb_Object.SetSharedIndices(array3); pb_Object.ToMesh(); pb_Object.Refresh(RefreshMask.All); pb_Object.gameObject.name = "Icosphere"; return pb_Object; } // Token: 0x06000208 RID: 520 RVA: 0x0001C0AC File Offset: 0x0001A4AC private static Vector3[] SubdivideIcosahedron(Vector3[] vertices, float radius) { Vector3[] array = new Vector3[vertices.Length * 4]; int num = 0; Vector3 vector = Vector3.zero; Vector3 vector2 = Vector3.zero; Vector3 vector3 = Vector3.zero; Vector3 vector4 = Vector3.zero; Vector3 vector5 = Vector3.zero; Vector3 vector6 = Vector3.zero; for (int i = 0; i < vertices.Length; i += 3) { vector = vertices[i]; vector3 = vertices[i + 1]; vector6 = vertices[i + 2]; vector2 = ((vector + vector3) * 0.5f).normalized * radius; vector4 = ((vector + vector6) * 0.5f).normalized * radius; vector5 = ((vector3 + vector6) * 0.5f).normalized * radius; array[num++] = vector; array[num++] = vector2; array[num++] = vector4; array[num++] = vector2; array[num++] = vector3; array[num++] = vector5; array[num++] = vector2; array[num++] = vector5; array[num++] = vector4; array[num++] = vector4; array[num++] = vector5; array[num++] = vector6; } return array; } // Token: 0x06000209 RID: 521 RVA: 0x0001C274 File Offset: 0x0001A674 private static Vector3[] CircleVertices(int segments, float radius, float circumference, Quaternion rotation, float offset) { float num = (float)segments - 1f; Vector3[] array = new Vector3[(segments - 1) * 2]; array[0] = new Vector3(Mathf.Cos(0f / num * circumference * 0.017453292f) * radius, Mathf.Sin(0f / num * circumference * 0.017453292f) * radius, 0f); array[1] = new Vector3(Mathf.Cos(1f / num * circumference * 0.017453292f) * radius, Mathf.Sin(1f / num * circumference * 0.017453292f) * radius, 0f); array[0] = rotation * (array[0] + Vector3.right * offset); array[1] = rotation * (array[1] + Vector3.right * offset); int num2 = 2; StringBuilder stringBuilder = new StringBuilder(); for (int i = 2; i < segments; i++) { float num3 = (float)i / num * circumference * 0.017453292f; stringBuilder.AppendLine(num3.ToString()); array[num2] = array[num2 - 1]; array[num2 + 1] = rotation * (new Vector3(Mathf.Cos(num3) * radius, Mathf.Sin(num3) * radius, 0f) + Vector3.right * offset); num2 += 2; } return array; } // Token: 0x0600020A RID: 522 RVA: 0x0001C418 File Offset: 0x0001A818 public static pb_Object TorusGenerator(int InRows, int InColumns, float InRadius, float InTubeRadius, bool InSmooth, float InHorizontalCircumference, float InVerticalCircumference) { int num = Mathf.Clamp(InRows + 1, 4, 128); int num2 = Mathf.Clamp(InColumns + 1, 4, 128); float num3 = Mathf.Clamp(InRadius, 0.01f, 2048f); float num4 = Mathf.Clamp(InTubeRadius, 0.01f, num3); num3 -= num4; float num5 = Mathf.Clamp(InHorizontalCircumference, 0.01f, 360f); float num6 = Mathf.Clamp(InVerticalCircumference, 0.01f, 360f); List list = new List(); int num7 = num2 - 1; Vector3[] array = pb_ShapeGenerator.CircleVertices(num, num4, num6, Quaternion.Euler(Vector3.up * 0f * num5), num3); for (int i = 1; i < num2; i++) { list.AddRange(array); Quaternion quaternion = Quaternion.Euler(Vector3.up * ((float)i / (float)num7 * num5)); array = pb_ShapeGenerator.CircleVertices(num, num4, num6, quaternion, num3); list.AddRange(array); } List list2 = new List(); int num8 = 0; for (int j = 0; j < (num2 - 1) * 2; j += 2) { for (int k = 0; k < num - 1; k++) { int num9 = j * ((num - 1) * 2) + k * 2; int num10 = (j + 1) * ((num - 1) * 2) + k * 2; int num11 = j * ((num - 1) * 2) + k * 2 + 1; int num12 = (j + 1) * ((num - 1) * 2) + k * 2 + 1; list2.Add(new pb_Face(new int[] { num9, num10, num11, num10, num12, num11 })); list2[num8].smoothingGroup = ((!InSmooth) ? (-1) : 1); list2[num8].manualUV = true; num8++; } } pb_Object pb_Object = pb_Object.CreateInstanceWithVerticesFaces(list.ToArray(), list2.ToArray()); pb_Object.gameObject.name = "Torus"; return pb_Object; } // Token: 0x04000174 RID: 372 private static readonly Vector3[] ICOSAHEDRON_VERTICES = new Vector3[] { new Vector3(-1f, 1.618034f, 0f), new Vector3(1f, 1.618034f, 0f), new Vector3(-1f, -1.618034f, 0f), new Vector3(1f, -1.618034f, 0f), new Vector3(0f, -1f, 1.618034f), new Vector3(0f, 1f, 1.618034f), new Vector3(0f, -1f, -1.618034f), new Vector3(0f, 1f, -1.618034f), new Vector3(1.618034f, 0f, -1f), new Vector3(1.618034f, 0f, 1f), new Vector3(-1.618034f, 0f, -1f), new Vector3(-1.618034f, 0f, 1f) }; // Token: 0x04000175 RID: 373 private static readonly int[] ICOSAHEDRON_TRIANGLES = new int[] { 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 }; } }