/// <summary> /// Converts a direction into a vector /// </summary> private Vector3 DirToVector(Direction dir) { switch (dir) { case Direction.Top: return(Vector3.up); case Direction.Bottom: return(Vector3.down); case Direction.Left: return(Vector3.left); case Direction.Right: return(Vector3.right); case Direction.Forward: return(Vector3.forward); case Direction.Back: return(Vector3.back); } return(Vector3.zero); }
/// <summary> /// Generates the associated quad for a particular direction and position /// </summary> private void GenerateFace(int x, int y, int z, Vector3 pos, Direction dir) { // Sets the associated vertices for a particular face switch (dir) { case Direction.Top: vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z); vertices[vertexCount++].Set(pos.x, pos.y, pos.z); break; case Direction.Bottom: vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); break; case Direction.Left: vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x, pos.y, pos.z); vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z); break; case Direction.Right: vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); break; case Direction.Forward: vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x, pos.y, pos.z + Voxel.VoxelSize); vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z + Voxel.VoxelSize); break; case Direction.Back: vertices[vertexCount++].Set(pos.x, pos.y - Voxel.VoxelSize, pos.z); vertices[vertexCount++].Set(pos.x, pos.y, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y, pos.z); vertices[vertexCount++].Set(pos.x + Voxel.VoxelSize, pos.y - Voxel.VoxelSize, pos.z); break; } // Set normals for (int i = vertexCount - 4; i < vertexCount; i++) { Vector3 vDir = DirToVector(dir); normals[i].Set(vDir.x, vDir.y, vDir.z); } // Set UVs uvs[vertexCount - 4].Set(colourCoordinates[Voxels[x][y][z] - 1].x, 0f); uvs[vertexCount - 3].Set(colourCoordinates[Voxels[x][y][z] - 1].y, 0f); uvs[vertexCount - 2].Set(colourCoordinates[Voxels[x][y][z] - 1].x, 1f); uvs[vertexCount - 1].Set(colourCoordinates[Voxels[x][y][z] - 1].y, 1f); }