public SliceMeshData BuildMesh(SliceMeshData.Type meshType) { SliceMeshData sliceMeshData = new SliceMeshData(); for (int x = 0; x < Map.VoxelsInXZ; x++) { for (int z = 0; z < Map.VoxelsInXZ; z++) { sliceMeshData = Voxels[x, z].AddToSliceMeshData(this, x, z, sliceMeshData, meshType); } } return(sliceMeshData); }
public SliceMeshData AddToSliceMeshData(Slice slice, int x, int z, SliceMeshData sliceMeshData, SliceMeshData.Type meshType, bool colliderToo = true) { if (IsTransparent()) { return(sliceMeshData); // Transparent, don't draw faces. Later modify for gas/liquid. } sliceMeshData.useRenderDataForCollider = colliderToo; float y = slice.Y * Map.VoxelFloorHeight; Voxel neighborVoxel = null; if (meshType == SliceMeshData.Type.Sides) { neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y, slice.Z + z + 1); if (neighborVoxel == null || neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataNorth(slice, x, y, z, sliceMeshData); } neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y, slice.Z + z - 1); if (neighborVoxel == null || neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataSouth(slice, x, y, z, sliceMeshData); } neighborVoxel = slice.GetVoxel(slice.X + x + 1, slice.Y, slice.Z + z); if (neighborVoxel == null || neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataEast(slice, x, y, z, sliceMeshData); } neighborVoxel = slice.GetVoxel(slice.X + x - 1, slice.Y, slice.Z + z); if (neighborVoxel == null || neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataWest(slice, x, y, z, sliceMeshData); } if (Map.DrawSliceBottoms) // Default: false - never seen by player. { neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y - 1, slice.Z + z); if (neighborVoxel == null || neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataDown(slice, x, y, z, sliceMeshData); } } } if (meshType == SliceMeshData.Type.Top) { neighborVoxel = slice.GetVoxel(slice.X + x, slice.Y + 1, slice.Z + z); if (neighborVoxel == null || neighborVoxel.IsTransparent() || Map.InDebugMode) { sliceMeshData = FaceDataUp(slice, x, y, z, sliceMeshData); } else if (neighborVoxel != null && !neighborVoxel.IsTransparent()) { sliceMeshData = FaceDataUp(slice, x, y, z, sliceMeshData, true); } } if (meshType == SliceMeshData.Type.Liquids) { // Not much to do here yet... } return(sliceMeshData); }