public static BlockMeshBuilder GenerateBlockMesh(bool top, bool front, bool left, bool bottom, bool right, bool back)
        {
            BlockMeshBuilder mesh = new BlockMeshBuilder();

            if (top)
            {
                mesh.Top = BlockFace.GenerateFace(FaceDirection.Top);
            }
            if (front)
            {
                mesh.Front = BlockFace.GenerateFace(FaceDirection.Front);
            }
            if (left)
            {
                mesh.Left = BlockFace.GenerateFace(FaceDirection.Left);
            }
            if (bottom)
            {
                mesh.Bottom = BlockFace.GenerateFace(FaceDirection.Bottom);
            }
            if (right)
            {
                mesh.Right = BlockFace.GenerateFace(FaceDirection.Right);
            }
            if (back)
            {
                mesh.Back = BlockFace.GenerateFace(FaceDirection.Back);
            }
            return(mesh);
        }
 public static BlockMeshBuilder GenerateBlock(BlockFaceVisibility visibility)
 {
     return(BlockMeshBuilder.GenerateBlockMesh(
                visibility.Top,
                visibility.Front,
                visibility.Left,
                visibility.Bottom,
                visibility.Right,
                visibility.Back));
 }
        public static void GenerateChunk(Chunk chunk)
        {
            Dictionary <Block, CubeMesh> blockMeshes = new Dictionary <Block, CubeMesh>(chunk.Blocks.Count);
            List <float> vertices = new List <float>(108);
            List <float> uvs      = new List <float>(108);
            List <float> normals  = new List <float>(108);

            for (int y = 0; y < GridLatch.ChunkHeight; y++)
            {
                for (int x = 0; x < GridLatch.ChunkWidth; x++)
                {
                    for (int z = 0; z < GridLatch.ChunkWidth; z++)
                    {
                        Block block = chunk.GetBlockAt(x, y, z);
                        if (block == null)
                        {
                            continue;
                        }

                        BlockMeshBuilder meshBuilder = GenerateBlock(GetVisibleFaces(block));
                        meshBuilder.WriteVertices(vertices);
                        meshBuilder.WriteUVs(uvs);
                        meshBuilder.WriteNormals(normals, vertices);

                        CubeMesh mesh = new CubeMesh(vertices.ToList(), uvs.ToList(), normals.ToList())
                        {
                            Location = block.Location
                        };
                        blockMeshes.Add(block, mesh);

                        vertices.Clear();
                        uvs.Clear();
                        normals.Clear();
                    }
                }
            }

            WorldMeshMap.AddChunkCubeMeshMap(chunk, blockMeshes);
        }