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); } }
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; } } } } }