public MahjongMapData ConvertLoadedMap()
    {
        List <Vector3Int> pieces = new List <Vector3Int>();

        for (int i = 0; i < horizontalSize; i++)
        {
            for (int p = 0; p < verticalSize; p++)
            {
                for (int u = 0; u < heightSize; u++)
                {
                    if (map[i, p, u].piece)
                    {
                        pieces.Add(new Vector3Int(i, p, u));
                    }
                }
            }
        }
        MahjongMapData data = new MahjongMapData(pieces.Count, pieceSize);

        for (int i = 0; i < data.pieceCount; i++)
        {
            data.pieceHorizontalIndex[i] = pieces[i].x;
            data.pieceVerticalIndex[i]   = pieces[i].y;
            data.pieceHeightIndex[i]     = pieces[i].z;
        }
        return(data);
    }
    public void LoadMap(MahjongMapData data)
    {
        if (data.pieceCount % 2 != 0)
        {
            Debug.LogError("Non-even map piece size. Cancelling...");
            return;
        }

        UnloadMap();

        for (int i = 0; i < data.pieceCount; i++)
        {
            TryPlace(new Vector3Int(data.pieceHorizontalIndex[i], data.pieceVerticalIndex[i], data.pieceHeightIndex[i]));
        }

        availableDebug = availablePieceLeadIndexes.Values.ToArray().Select(ind => map[ind.x, ind.y, ind.z].piece).ToList();
    }