Esempio n. 1
0
        void OnEnable()
        {
            so        = new SerializedObject(target);
            colorTool = (MiniblockVertexColorTool)target;

            SetupReorderableList();
            return;
        }
        void OnEnable()
        {
            so = new SerializedObject(target);
              colorTool = (MiniblockVertexColorTool)target;

              SetupReorderableList();
              return;
        }
        public void GenerateMesh()
        {
            Mesh mesh = new Mesh();

            List <Vector3> verts  = new List <Vector3>();
            List <int>     tris   = new List <int>();
            List <Color32> colors = new List <Color32>();

            MiniblockVertexColorTool miniblockVertexColorTool = gameObject.GetComponent <MiniblockVertexColorTool>();
            bool hasVertexColorTool = (miniblockVertexColorTool != null);

            for (int xi = 0; xi < blockIdMap.grid.GetLength(0); xi++)
            {
                for (int yi = 0; yi < blockIdMap.grid.GetLength(1); yi++)
                {
                    for (int zi = 0; zi < blockIdMap.grid.GetLength(2); zi++)
                    {
                        if (blockIdMap.grid[xi, yi, zi] == 0)
                        {
                            continue;
                        }

                        int facesDrawn = 0;

                        // Generate Back Faces
                        if (blockIdMap.CellIsEmpty(xi, yi, zi - 1))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, false));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi, yi, zi), Vector3.up, Vector3.right));
                            facesDrawn++;
                        }

                        // Generate Front Faces
                        if (blockIdMap.CellIsEmpty(xi, yi, zi + 1))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, true));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi, yi, zi + 1), Vector3.up, Vector3.right));
                            facesDrawn++;
                        }

                        // Generate Right Faces
                        if (blockIdMap.CellIsEmpty(xi + 1, yi, zi))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, false));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi + 1, yi, zi), Vector3.up, Vector3.forward));
                            facesDrawn++;
                        }

                        // Generate Left Faces
                        if (blockIdMap.CellIsEmpty(xi - 1, yi, zi))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, true));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi, yi, zi), Vector3.up, Vector3.forward));
                            facesDrawn++;
                        }

                        // Generate Top Faces
                        if (blockIdMap.CellIsEmpty(xi, yi + 1, zi))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, false));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi, yi + 1, zi), Vector3.forward, Vector3.right));
                            facesDrawn++;
                        }

                        // Generate Bottom Faces
                        if (blockIdMap.CellIsEmpty(xi, yi - 1, zi))
                        {
                            tris.AddRange(BuildFaceTris(verts.Count, true));
                            verts.AddRange(BuildFaceVerts(new Vector3(xi, yi, zi), Vector3.forward, Vector3.right));
                            facesDrawn++;
                        }

                        // Color Face Vertices
                        if (hasVertexColorTool && facesDrawn > 0)
                        {
                            colors.AddRange(miniblockVertexColorTool.BuildFaceColors(blockIdMap.grid[xi, yi, zi], facesDrawn));
                        }
                    }
                }
            }

            mesh.vertices  = verts.ToArray();
            mesh.triangles = tris.ToArray();
            if (hasVertexColorTool)
            {
                mesh.colors32 = colors.ToArray();
            }

            mesh.RecalculateBounds();
            mesh.RecalculateNormals();

            gameObject.GetComponent <MeshFilter>().mesh = mesh;

            return;
        }