protected override void UpdateMeshFunc()
    {
        bool flag = this.Width != 0f && this.Length != 0f && this.Height != 0f;

        if (flag)
        {
            this.mMesh.name = "Pyramid";
            Vector3[] array  = new Vector3[8 + this.HeightSegments * 2 * 4];
            Vector2[] array2 = new Vector2[array.Length];
            int[]     array3 = new int[18 + (this.HeightSegments - 1) * 6 * 4];
            float     num    = this.Width * 0.5f;
            float     num2   = this.Length * 0.5f;
            float     num3   = this.Height / (float)this.HeightSegments;
            int       num4   = 0;
            int       num5   = 0;
            array[0]  = new Vector3(-num, 0f, -num2);
            array[1]  = new Vector3(-num, 0f, num2);
            array[2]  = new Vector3(num, 0f, num2);
            array[3]  = new Vector3(num, 0f, -num2);
            array2[0] = new Vector2(0f, 0f);
            array2[1] = new Vector2(1f, 0f);
            array2[2] = new Vector2(1f, 1f);
            array2[3] = new Vector2(0f, 1f);
            array3[0] = 3;
            array3[1] = 2;
            array3[2] = 1;
            array3[3] = 1;
            array3[4] = 0;
            array3[5] = 3;
            num5     += 6;
            array[4]  = new Vector3(0f, this.Height, 0f);
            array[5]  = new Vector3(0f, this.Height, 0f);
            array[6]  = new Vector3(0f, this.Height, 0f);
            array[7]  = new Vector3(0f, this.Height, 0f);
            array2[4] = new Vector2(0.5f, 1f);
            array2[5] = new Vector2(0.5f, 1f);
            array2[6] = new Vector2(0.5f, 1f);
            array2[7] = new Vector2(0.5f, 1f);
            num4     += 8;
            int num6 = num4;
            for (int i = 0; i < this.HeightSegments; i++)
            {
                float num7 = MathU.scale((float)i, 0f, (float)this.HeightSegments, num, 0f);
                float y    = num3 * (float)i;
                float z    = MathU.scale((float)i, 0f, (float)this.HeightSegments, num2, 0f);
                array[num4]      = new Vector3(-num7, y, z);
                array[num4 + 1]  = new Vector3(num7, y, z);
                array2[num4]     = new Vector2(1f - (float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                array2[num4 + 1] = new Vector2((float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                num4            += 2;
            }
            for (int i = 0; i < this.HeightSegments - 1; i++)
            {
                array3[num5]     = num6 + 2;
                array3[num5 + 1] = num6;
                array3[num5 + 2] = num6 + 1;
                array3[num5 + 3] = num6 + 3;
                array3[num5 + 4] = num6 + 2;
                array3[num5 + 5] = num6 + 1;
                num5            += 6;
                num6            += 2;
            }
            array3[num5]     = num4 - 2;
            array3[num5 + 1] = num4 - 1;
            array3[num5 + 2] = 4;
            num5            += 3;
            num6             = num4;
            for (int i = 0; i < this.HeightSegments; i++)
            {
                float num8 = MathU.scale((float)i, 0f, (float)this.HeightSegments, num, 0f);
                float y2   = num3 * (float)i;
                float z2   = MathU.scale((float)i, 0f, (float)this.HeightSegments, -num2, 0f);
                array[num4]      = new Vector3(-num8, y2, z2);
                array[num4 + 1]  = new Vector3(num8, y2, z2);
                array2[num4]     = new Vector2((float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                array2[num4 + 1] = new Vector2(1f - (float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                num4            += 2;
            }
            for (int i = 0; i < this.HeightSegments - 1; i++)
            {
                array3[num5]     = num6 + 3;
                array3[num5 + 1] = num6 + 1;
                array3[num5 + 2] = num6;
                array3[num5 + 3] = num6;
                array3[num5 + 4] = num6 + 2;
                array3[num5 + 5] = num6 + 3;
                num5            += 6;
                num6            += 2;
            }
            array3[num5]     = num4 - 1;
            array3[num5 + 1] = num4 - 2;
            array3[num5 + 2] = 5;
            num5            += 3;
            num6             = num4;
            for (int i = 0; i < this.HeightSegments; i++)
            {
                float x    = MathU.scale((float)i, 0f, (float)this.HeightSegments, num, 0f);
                float y3   = num3 * (float)i;
                float num9 = MathU.scale((float)i, 0f, (float)this.HeightSegments, num2, 0f);
                array[num4]      = new Vector3(x, y3, -num9);
                array[num4 + 1]  = new Vector3(x, y3, num9);
                array2[num4]     = new Vector2((float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                array2[num4 + 1] = new Vector2(1f - (float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                num4            += 2;
            }
            for (int i = 0; i < this.HeightSegments - 1; i++)
            {
                array3[num5]     = num6;
                array3[num5 + 1] = num6 + 2;
                array3[num5 + 2] = num6 + 3;
                array3[num5 + 3] = num6 + 3;
                array3[num5 + 4] = num6 + 1;
                array3[num5 + 5] = num6;
                num5            += 6;
                num6            += 2;
            }
            array3[num5]     = num4 - 1;
            array3[num5 + 1] = num4 - 2;
            array3[num5 + 2] = 6;
            num5            += 3;
            num6             = num4;
            for (int i = 0; i < this.HeightSegments; i++)
            {
                float x2    = MathU.scale((float)i, 0f, (float)this.HeightSegments, -num, 0f);
                float y4    = num3 * (float)i;
                float num10 = MathU.scale((float)i, 0f, (float)this.HeightSegments, num2, 0f);
                array[num4]      = new Vector3(x2, y4, -num10);
                array[num4 + 1]  = new Vector3(x2, y4, num10);
                array2[num4]     = new Vector2(1f - (float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                array2[num4 + 1] = new Vector2((float)i / (float)this.HeightSegments * 0.5f, (float)i / (float)this.HeightSegments);
                num4            += 2;
            }
            for (int i = 0; i < this.HeightSegments - 1; i++)
            {
                array3[num5]     = num6 + 1;
                array3[num5 + 1] = num6 + 3;
                array3[num5 + 2] = num6 + 2;
                array3[num5 + 3] = num6 + 2;
                array3[num5 + 4] = num6;
                array3[num5 + 5] = num6 + 1;
                num5            += 6;
                num6            += 2;
            }
            array3[num5]         = num4 - 2;
            array3[num5 + 1]     = num4 - 1;
            array3[num5 + 2]     = 7;
            this.mMesh.vertices  = array;
            this.mMesh.uv        = array2;
            this.mMesh.triangles = array3;
            this.mMesh.RecalculateNormals();
            this.mMesh.RecalculateBounds();
        }
    }
Example #2
0
    protected override void UpdateMeshFunc()
    {
        bool flag = this.Radius != 0f && this.Height != 0f;

        if (flag)
        {
            this.mMesh.name = "Capsule";
            int   num  = this.Rings + 1;
            float num2 = this.Height * 0.5f;
            float num3 = this.Height - this.Radius * 2f;
            float num4 = num3 * 0.5f;
            float num5 = (this.Height - num3) * 0.5f;
            int   num6 = this.HeightSegments + 1;
            float num7 = num3 / (float)this.HeightSegments;
            this.Sides++;
            int       num8   = this.Rings * 2 + 1;
            Vector3[] array  = new Vector3[(num8 + 1) * this.Sides + num6 * this.Sides];
            Vector2[] array2 = new Vector2[array.Length];
            Vector3[] array3 = new Vector3[array.Length];
            int[]     array4 = new int[this.Rings * 2 * (this.Sides - 1) * 6 + this.HeightSegments * (this.Sides - 1) * 6];
            float     num9   = 1f / (float)(num8 - 1);
            float     num10  = 1f / (float)(this.Sides - 1);
            int       num11  = 0;
            int       num12  = 0;
            int       num13  = num11;
            for (int i = 0; i < num6; i++)
            {
                for (int j = 0; j < this.Sides; j++)
                {
                    float f     = (float)j / (float)(this.Sides - 1) * 6.28318548f;
                    float num14 = -num4 + num7 * (float)i;
                    float num15 = Mathf.Cos(f);
                    float num16 = Mathf.Sin(f);
                    array[num11]  = new Vector3(this.Radius * num15, num14, this.Radius * num16);
                    array3[num11] = new Vector3(num15, 0f, num16);
                    array2[num11] = new Vector2((float)j * num10, MathU.scale(num14, -(num4 + num5), num4 + num5, 0f, 1f));
                    num11++;
                }
            }
            for (int i = 0; i < num6 - 1; i++)
            {
                for (int j = 0; j < this.Sides - 1; j++)
                {
                    int num17 = num13 + i * this.Sides + j;
                    int num18 = num13 + i * this.Sides + (j + 1);
                    int num19 = num13 + (i + 1) * this.Sides + (j + 1);
                    int num20 = num13 + (i + 1) * this.Sides + j;
                    array4[num12]     = num17;
                    array4[num12 + 1] = num19;
                    array4[num12 + 2] = num18;
                    array4[num12 + 3] = num19;
                    array4[num12 + 4] = num17;
                    array4[num12 + 5] = num20;
                    num12            += 6;
                }
            }
            this.Sides--;
            this.mMesh.vertices  = array;
            this.mMesh.uv        = array2;
            this.mMesh.triangles = array4;
            this.mMesh.normals   = array3;
            this.mMesh.RecalculateBounds();
        }
    }