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); }