void ProcessReqs()
    {
        while (LSubTerrainMgr.Instance != null)
        {
            int n = CntInProcess;
            if (n > 0)
            {
                try{
                    for (int i = 0; i < n; i++)
                    {
                        LSubTerrain node = new LSubTerrain();
                        node.Index = _lstNodesIdx[i];
                        ReadOrgDataToBuff(node.Index);
                        node.ApplyData(DataBuff, DataLen);
                        _lstNodes.Add(node);
                    }
                } catch {}

                lock (_lstNodesIdx){
                    _lstNodesIdx.Clear();
                }
            }
            Thread.Sleep(1);
        }
    }
    public bool TryFill(IntVector3 ipos, Dictionary <int, LSubTerrain> dicNodes)
    {
        int nExpand = LSubTerrainMgr.Instance.NumDataExpands;

        for (int x = ipos.x - nExpand; x <= ipos.x + nExpand; x++)
        {
            for (int z = ipos.z - nExpand; z <= ipos.z + nExpand; z++)
            {
                if (x < 0 || x >= LSubTerrConstant.XCount ||
                    z < 0 || z >= LSubTerrConstant.ZCount)
                {
                    continue;
                }

                int idx = LSubTerrUtils.PosToIndex(x, z);
                if (!dicNodes.ContainsKey(idx))
                {
                    LSubTerrain node = new LSubTerrain();
                    node.Index = idx;
                    ReadOrgDataToBuff(node.Index);
                    node.ApplyData(DataBuff, DataLen);
                    dicNodes.Add(idx, node);
                    return(false);
                }
            }
        }
        return(true);
    }