public void UpdateExposedVoxels() { NumVerts = 0; NumInds = 0; for (int x = 0; x < Width; ++x) { for (int y = 0; y < Height; ++y) { for (int z = 0; z < Depth; ++z) { Voxel voxel = Voxels[x, y, z]; voxel.Exposed = false; voxel.ExposedSides = VoxelSide.None; if (voxel.CanBeSeen()) { Voxel top = voxel.NeighborOrNull(VoxelDirection.Top); Voxel north = voxel.NeighborOrNull(VoxelDirection.North); Voxel east = voxel.NeighborOrNull(VoxelDirection.East); Voxel south = voxel.NeighborOrNull(VoxelDirection.South); Voxel west = voxel.NeighborOrNull(VoxelDirection.West); Voxel bottom = voxel.NeighborOrNull(VoxelDirection.Bottom); if (Voxel.IsSolid(top) == false) { // Exposed Top voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.Top; NumVerts += 4; NumInds += 6; } if (Voxel.IsSolid(north) == false) { // Exposed North voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.North; NumVerts += 4; NumInds += 6; } if (Voxel.IsSolid(east) == false) { // Exposed East voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.East; NumVerts += 4; NumInds += 6; } if (Voxel.IsSolid(south) == false) { // Exposed South voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.South; NumVerts += 4; NumInds += 6; } if (Voxel.IsSolid(west) == false) { // Exposed West voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.West; NumVerts += 4; NumInds += 6; } if (Voxel.IsSolid(bottom) == false) { // Exposed Bottom voxel.Exposed = true; voxel.ExposedSides |= VoxelSide.Bottom; NumVerts += 4; NumInds += 6; } } voxel.Collider.enabled = voxel.Exposed; } } } }