Example #1
0
        // Token: 0x06004299 RID: 17049 RVA: 0x0015278C File Offset: 0x00150B8C
        public GameObject CreateGameObject(bool doubleSide)
        {
            if (this.contours.Count == 0 || this.contours[0].Length < 3)
            {
                return(null);
            }
            List <Vector3[]> worldContours = this.GetWorldContours();
            List <Polygon>   list          = new List <Polygon>(worldContours.Count);
            Mesh             mesh          = new Mesh();
            List <int>       list2         = new List <int>();
            List <Vector3>   list3         = new List <Vector3>();
            List <Vector3>   list4         = new List <Vector3>();
            List <Vector2>   list5         = new List <Vector2>();
            int num = 0;

            PrimitivesPro.Utils.Plane plane = new PrimitivesPro.Utils.Plane(ContourData.GetNormal(worldContours[0]), worldContours[0][0]);
            Matrix4x4 planeMatrix           = plane.GetPlaneMatrix();
            Matrix4x4 inverse = planeMatrix.inverse;
            float     z       = (inverse * worldContours[0][0]).z;

            foreach (Vector3[] array in worldContours)
            {
                Vector2[] array2 = new Vector2[array.Length];
                for (int i = 0; i < array.Length; i++)
                {
                    array2[i] = inverse * array[i];
                }
                list.Add(new Polygon(array2));
            }
            ContourData.CollapsePolygons(list);
            foreach (Polygon polygon in list)
            {
                List <int> list6 = polygon.Triangulate();
                float      num2  = Mathf.Min(polygon.Min.x, polygon.Min.y);
                float      num3  = Mathf.Max(polygon.Max.x, polygon.Max.y);
                float      num4  = num2 - num3;
                foreach (Vector2 vector in polygon.Points)
                {
                    Vector3 item = planeMatrix * new Vector3(vector.x, vector.y, z);
                    list3.Add(item);
                    list4.Add(plane.Normal);
                    list5.Add(new Vector2((vector.x - num2) / num4, (vector.y - num2) / num4));
                }
                foreach (int num5 in list6)
                {
                    list2.Add(num5 + num);
                }
                num += list6.Count;
            }
            if (doubleSide)
            {
                int count = list3.Count;
                for (int k = 0; k < count; k++)
                {
                    list3.Add(list3[k]);
                    list4.Add(-list4[0]);
                    list5.Add(list5[k]);
                }
                count = list2.Count;
                for (int l = 0; l < count; l++)
                {
                    list2.Add(list2[count - l - 1]);
                }
            }
            mesh.vertices  = list3.ToArray();
            mesh.normals   = list3.ToArray();
            mesh.uv        = list5.ToArray();
            mesh.triangles = list2.ToArray();
            GameObject gameObject = GameObject.Find("ContourObject");

            if (gameObject)
            {
                UnityEngine.Object.Destroy(gameObject);
            }
            GameObject gameObject2 = new GameObject("ContourObject");

            gameObject2.AddComponent <MeshFilter>().sharedMesh       = mesh;
            gameObject2.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Diffuse"));
            return(gameObject2);
        }