private SliceMeshData FaceDataWest(Slice slice, int x, float y, int z, SliceMeshData meshData)
    {
        int sliceXOffset = -(Map.XZOffset * Map.VoxelsInXZ);
        int sliceYOffset = -Map.YOffset;
        int sliceZOffset = -(Map.XZOffset * Map.VoxelsInXZ);

        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y - 0.5f + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y - 0.5f + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddQuadTris();
        meshData.uvs.AddRange(FaceUVs());
        return(meshData);
    }
    // ----- Rendering
    private SliceMeshData FaceDataUp(Slice slice, int x, float y, int z, SliceMeshData meshData, bool IsUndiscovered = false)
    {
        int sliceXOffset = -(Map.XZOffset * Map.VoxelsInXZ);
        int sliceYOffset = -Map.YOffset;
        int sliceZOffset = -(Map.XZOffset * Map.VoxelsInXZ);

        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x + 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z + 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x + 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddVertex(new Vector3(x - 0.5f + sliceXOffset, y + 0.5f + Map.VoxelFloorHeight + sliceYOffset, z - 0.5f + sliceZOffset));
        meshData.AddQuadTris();
        meshData.uvs.AddRange(FaceUVs(IsUndiscovered, true)); // true == IsTop
        return(meshData);
    }