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);
    }
    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);
        }
    }
Exemple #3
0
 public static LSubTerrainGo CreateNodeGo(LSubTerrain nodeData)
 {
     if (nodeData != null)
     {
         GameObject    go     = new GameObject();
         LSubTerrainGo nodeGo = go.AddComponent <LSubTerrainGo> ();
         nodeGo._nodeData          = nodeData;
         nodeGo.transform.parent   = LSubTerrainMgr.GO.transform;
         nodeGo.name               = "L SubTerrain Node [" + nodeData.xIndex + "," + nodeData.zIndex + "]";
         nodeGo.transform.position = nodeData.wPos;
         nodeGo.transform.rotation = Quaternion.identity;
         return(nodeGo);
     }
     return(null);
 }
    public static void AddTree(Vector3 wpos, int prototype, float width_scale = 1, float height_scale = 1)
    {
        if (s_Instance == null)
        {
            return;
        }

        int        terIdx  = LSubTerrUtils.WorldPosToIndex(wpos);
        IntVector3 terrpos = LSubTerrUtils.IndexToPos(terIdx);
        IntVector3 campos  = _iCurCamPos;

        if (Mathf.Abs(terrpos.x - campos.x) > 1)
        {
            return;
        }
        if (Mathf.Abs(terrpos.z - campos.z) > 1)
        {
            return;
        }

        if (s_Instance.m_Nodes.ContainsKey(terIdx))
        {
            LSubTerrain TargetNode = Node(terIdx);
            if (TargetNode == null)
            {
                return;
            }

            // Read TreeInfo
            TreeInfo ti = TargetNode.AddTreeInfo(wpos, prototype, width_scale, height_scale);
            if (ti != null)
            {
                float height = s_Instance.GlobalPrototypeBounds[ti.m_protoTypeIdx].extents.y * 2F;
                for (int l = s_Instance.Layers.Count - 1; l >= 0; --l)
                {
                    // Trees in this layer
                    if (s_Instance.Layers[l].MinTreeHeight <= height && height < s_Instance.Layers[l].MaxTreeHeight)
                    {
                        s_Instance.LayerCreators[l].m_allTreesInLayer[terIdx].Add(ti);
                        break;
                    }
                }
            }
        }
    }