// Start is called before the first frame update
    void Start()
    {
        TreeStruct tree = DecorGenerator.GenerateTreeStruct(settings);

        GetComponent <DecorRenderer>().Render(tree);
        //Debug.Log(tree.ToString());
    }
Example #2
0
        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);
        }
Example #3
0
 /// <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;
        }
Example #7
0
        #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);
                    }
                }
            }
        }
Example #8
0
        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);
        }