// Start is called before the first frame update void Start() { TreeStruct tree = DecorGenerator.GenerateTreeStruct(settings); GetComponent <DecorRenderer>().Render(tree); //Debug.Log(tree.ToString()); }
private static List <TreeStruct> AddTree(List <CategoryStructViewModel> datas, int parentId, int breakLevel) { var ds = datas.Where(v => v.ParentId == parentId); var list = new List <TreeStruct>(); foreach (var item in ds) { if (item.Depth > breakLevel) { return(list); } var treeNode = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; var childs = AddTree(datas.Where(v => v.Depth > item.Depth).ToList(), item.Id, breakLevel); treeNode.Childs = childs; list.Add(treeNode); } return(list); }
/// <summary> /// Add a tree instance into storage - must be called after the initial load call /// </summary> /// <param name="position"></param> /// <param name="prototypeIdx"></param> public void AddTree(TreeStruct tree) { if (m_terrainTreeLocations == null) { return; } m_terrainTreeLocations.Insert(tree.position.x, tree.position.z, tree); }
public void Render(TreeStruct treeStruct) { treeStructFolder = new GameObject("Tree").transform; treeStructFolder.SetParent(this.transform); treeStructFolder.localPosition = new Vector3(0, 0, 0); foreach (Tree tr in treeStruct.Trees) { RenderTree(tr, treeStructFolder); } foreach (Grass gr in treeStruct.GrassStruct) { RenderGrass(gr, treeStructFolder); } foreach (RandObjStruct ra in treeStruct.RandObjStruct) { RenderRandObjStruct(ra, treeStructFolder); } }
private static List<TreeStruct> AddTree(List<CategoryStructViewModel> datas, int parentId, int breakLevel) { var ds = datas.Where(v => v.ParentId == parentId); var list = new List<TreeStruct>(); foreach (var item in ds) { if (item.Depth > breakLevel) { return list; } var treeNode = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; var childs = AddTree(datas.Where(v => v.Depth > item.Depth).ToList(), item.Id, breakLevel); treeNode.Childs = childs; list.Add(treeNode); } return list; }
public ActionResult GetAll(string fromat) { const string rawSql = @" WITH DATA AS ( SELECT [Id] ,[Name] ,[SecName] ,[Index] ,[ParentId] ,[Description] ,[Type] ,[User_Id] ,[Status] ,[SortOrder] ,[CreatedDate] ,[CreatedUser] ,[UpdatedDate] ,[UpdatedUser] ,CAST([Id] AS VARCHAR) AS Ids ,CAST([Name] AS NVARCHAR) AS [Path] ,0 AS Depth ,ROW_NUMBER() OVER(ORDER BY [SortOrder] DESC) AS RowNumber FROM [dbo].[Category] AS g WITH (NOLOCK) WHERE [User_Id] = {0} AND g.ParentId = 0 UNION ALL SELECT s.[Id] ,s.[Name] ,s.[SecName] ,s.[Index] ,s.[ParentId] ,s.[Description] ,s.[Type] ,s.[User_Id] ,s.[Status] ,s.[SortOrder] ,s.[CreatedDate] ,s.[CreatedUser] ,s.[UpdatedDate] ,s.[UpdatedUser] ,CAST(DATA.Ids + '->' + CAST(s.[Id] AS VARCHAR) AS VARCHAR) AS Ids ,CAST(DATA.[Path] + '->' + s.[Name] AS NVARCHAR) AS [Path] ,DATA.[Depth] + 1 AS Depth ,DATA.RowNumber FROM [dbo].[Category] AS s WITH(NOLOCK) INNER JOIN DATA ON s.ParentID = DATA.Id ) SELECT * FROM DATA ORDER BY RowNumber ,Depth ,[SortOrder] DESC;"; var datas = ServiceInvoke(u => u.DbContext.Database.SqlQuery<CategoryStructViewModel>(rawSql, CurrentUser.CustomerId).ToList()); var list = new List<TreeStruct>(); TreeStruct lastTree = null; TreeStruct l2 = null; foreach (var item in datas) { if (item.Depth == 0) { lastTree = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; list.Add(lastTree); continue; } if (lastTree == null) { continue; } if (item.Depth == 1) { l2 = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; lastTree.Childs.Add(l2); continue; } if (l2 == null) { continue; } l2.Childs.Add(new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }); } var content = new ContentResult {Content = GTree(list)}; return content; }
#pragma warning restore 414 /// <summary> /// Load the trees in from the terrain /// </summary> public void LoadTreesFromTerrain() { //Destroy previous contents m_terrainTrees = null; m_terrainTreeLocations = null; //Work out the bounds of the environment float minY = float.NaN; float minX = float.NaN; float maxX = float.NaN; float minZ = float.NaN; float maxZ = float.NaN; Terrain sampleTerrain = null; foreach (Terrain terrain in Terrain.activeTerrains) { if (float.IsNaN(minY)) { sampleTerrain = terrain; minY = terrain.transform.position.y; minX = terrain.transform.position.x; minZ = terrain.transform.position.z; maxX = minX + terrain.terrainData.size.x; maxZ = minZ + terrain.terrainData.size.z; } else { if (terrain.transform.position.x < minX) { minX = terrain.transform.position.x; } if (terrain.transform.position.z < minZ) { minZ = terrain.transform.position.z; } if ((terrain.transform.position.x + terrain.terrainData.size.x) > maxX) { maxX = terrain.transform.position.x + terrain.terrainData.size.x; } if ((terrain.transform.position.z + terrain.terrainData.size.z) > maxZ) { maxZ = terrain.transform.position.z + terrain.terrainData.size.z; } } } if (sampleTerrain != null) { Rect terrainBounds = new Rect(minX, minZ, maxX - minX, maxZ - minZ); m_terrainTreeLocations = new Quadtree <TreeStruct>(terrainBounds, 32); m_terrainTrees = new List <TreePrototype>(sampleTerrain.terrainData.treePrototypes); foreach (Terrain terrain in Terrain.activeTerrains) { float terrainOffsetX = terrain.transform.position.x; float terrainOffsetY = terrain.transform.position.y; float terrainOffsetZ = terrain.transform.position.z; float terrainWidth = terrain.terrainData.size.x; float terrainHeight = terrain.terrainData.size.y; float terrainDepth = terrain.terrainData.size.z; TreeInstance[] terrainTreeInstances = terrain.terrainData.treeInstances; for (int treeIdx = 0; treeIdx < terrainTreeInstances.Length; treeIdx++) { TreeInstance treeInstance = terrainTreeInstances[treeIdx]; TreeStruct newTree = new TreeStruct(); newTree.position = new Vector3(terrainOffsetX + (treeInstance.position.x * terrainWidth), terrainOffsetY + (treeInstance.position.y * terrainHeight), terrainOffsetZ + (treeInstance.position.z * terrainDepth)); newTree.prototypeID = terrainTreeInstances[treeIdx].prototypeIndex; m_terrainTreeLocations.Insert(newTree.position.x, newTree.position.z, newTree); } } } }
public ActionResult GetAll(string fromat) { const string rawSql = @" WITH DATA AS ( SELECT [Id] ,[Name] ,[SecName] ,[Index] ,[ParentId] ,[Description] ,[Type] ,[User_Id] ,[Status] ,[SortOrder] ,[CreatedDate] ,[CreatedUser] ,[UpdatedDate] ,[UpdatedUser] ,CAST([Id] AS VARCHAR) AS Ids ,CAST([Name] AS NVARCHAR) AS [Path] ,0 AS Depth ,ROW_NUMBER() OVER(ORDER BY [SortOrder] DESC) AS RowNumber FROM [dbo].[Category] AS g WITH (NOLOCK) WHERE [User_Id] = {0} AND g.ParentId = 0 UNION ALL SELECT s.[Id] ,s.[Name] ,s.[SecName] ,s.[Index] ,s.[ParentId] ,s.[Description] ,s.[Type] ,s.[User_Id] ,s.[Status] ,s.[SortOrder] ,s.[CreatedDate] ,s.[CreatedUser] ,s.[UpdatedDate] ,s.[UpdatedUser] ,CAST(DATA.Ids + '->' + CAST(s.[Id] AS VARCHAR) AS VARCHAR) AS Ids ,CAST(DATA.[Path] + '->' + s.[Name] AS NVARCHAR) AS [Path] ,DATA.[Depth] + 1 AS Depth ,DATA.RowNumber FROM [dbo].[Category] AS s WITH(NOLOCK) INNER JOIN DATA ON s.ParentID = DATA.Id ) SELECT * FROM DATA ORDER BY RowNumber ,Depth ,[SortOrder] DESC;"; var datas = ServiceInvoke(u => u.DbContext.Database.SqlQuery <CategoryStructViewModel>(rawSql, CurrentUser.CustomerId).ToList()); var list = new List <TreeStruct>(); TreeStruct lastTree = null; TreeStruct l2 = null; foreach (var item in datas) { if (item.Depth == 0) { lastTree = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; list.Add(lastTree); continue; } if (lastTree == null) { continue; } if (item.Depth == 1) { l2 = new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }; lastTree.Childs.Add(l2); continue; } if (l2 == null) { continue; } l2.Childs.Add(new TreeStruct { Id = item.Id.ToString(CultureInfo.InvariantCulture), Name = item.Name, ParentId = item.ParentId.ToString(CultureInfo.InvariantCulture) }); } var content = new ContentResult { Content = GTree(list) }; return(content); }