public static GameObject GetTerrainToolsRoot()
        {
            GTerrainTools tools = Object.FindObjectOfType <GTerrainTools>();

            if (tools != null)
            {
                return(tools.gameObject);
            }
            else
            {
                return(null);
            }
        }
        public static GStylizedTerrain CreateStylizedTerrain(GTerrainData srcData = null)
        {
            GameObject g = new GameObject("Low Poly Terrain");

            g.transform.localPosition = Vector3.zero;
            g.transform.localRotation = Quaternion.identity;
            g.transform.localScale    = Vector3.one;

            GTerrainData terrainData = GTerrainData.CreateInstance <GTerrainData>();

            terrainData.Reset();
            string assetName = "TerrainData_" + terrainData.Id;

            //AssetDatabase.CreateAsset(terrainData, string.Format("Assets/{0}.asset", assetName));
            GUtilities.EnsureDirectoryExists(GGriffinSettings.Instance.DefaultTerrainDataDirectory);
            AssetDatabase.CreateAsset(terrainData, Path.Combine(GGriffinSettings.Instance.DefaultTerrainDataDirectory, assetName + ".asset"));
            if (srcData != null)
            {
                srcData.CopyTo(terrainData);
            }

            Material mat = GGriffinSettings.Instance.WizardSettings.GetClonedMaterial();

            if (mat == null && GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial != null)
            {
                mat = Object.Instantiate(GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial);
            }
            if (mat != null)
            {
                string matName = "TerrainMaterial_" + terrainData.Id;
                mat.name = matName;
                //AssetDatabase.CreateAsset(mat, string.Format("Assets/{0}.mat", matName));
                GUtilities.EnsureDirectoryExists(GGriffinSettings.Instance.DefaultTerrainDataDirectory);
                AssetDatabase.CreateAsset(mat, Path.Combine(GGriffinSettings.Instance.DefaultTerrainDataDirectory, matName + ".mat"));
                terrainData.Shading.CustomMaterial = mat;
            }

            GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>();

            terrain.GroupId     = 0;
            terrain.TerrainData = terrainData;

            Undo.RegisterCreatedObjectUndo(g, "Creating Low Poly Terrain");

            GameObject colliderGO = new GameObject("Tree Collider");

            GameObjectUtility.SetParentAndAlign(colliderGO, terrain.gameObject);
            colliderGO.transform.localPosition = Vector3.zero;
            colliderGO.transform.localRotation = Quaternion.identity;
            colliderGO.transform.localScale    = Vector3.one;

            GTreeCollider collider = colliderGO.AddComponent <GTreeCollider>();

            collider.Terrain = terrain;

            GTerrainTools tools = Object.FindObjectOfType <GTerrainTools>();

            if (tools == null)
            {
                CreateTerrainTools(null);
            }

            Selection.activeGameObject = g;
            return(terrain);
        }
        public static void CreateTerrainTools(MenuCommand menuCmd)
        {
            GameObject g = new GameObject("Polaris V2 Tools");

            if (menuCmd != null)
            {
                GameObjectUtility.SetParentAndAlign(g, menuCmd.context as GameObject);
            }
            g.transform.localPosition = Vector3.zero;
            g.transform.localRotation = Quaternion.identity;
            g.transform.localScale    = Vector3.one;
            g.transform.hideFlags     = HideFlags.HideInInspector;

            GTerrainTools tools = g.AddComponent <GTerrainTools>();

            tools.hideFlags = HideFlags.HideInInspector;

            GameObject terrainGroup = new GameObject("Terrain Group");

            GUtilities.ResetTransform(terrainGroup.transform, g.transform);
            terrainGroup.transform.hideFlags = HideFlags.HideInInspector;
            GTerrainGroup group = terrainGroup.AddComponent <GTerrainGroup>();

            group.GroupId = -1;

            GameObject texturePainter = new GameObject("Geometry & Texture Painter");

            GUtilities.ResetTransform(texturePainter.transform, g.transform);
            texturePainter.transform.hideFlags = HideFlags.HideInInspector;
            GTerrainTexturePainter texturePainterComponent = texturePainter.AddComponent <GTerrainTexturePainter>();

            texturePainterComponent.GroupId = -1;

            GameObject foliagePainter = new GameObject("Foliage Painter");

            GUtilities.ResetTransform(foliagePainter.transform, g.transform);
            foliagePainter.transform.hideFlags = HideFlags.HideInInspector;
            GFoliagePainter foliagePainterComponent = foliagePainter.AddComponent <GFoliagePainter>();

            foliagePainterComponent.GroupId = -1;
            foliagePainterComponent.gameObject.AddComponent <GRotationRandomizeFilter>();
            foliagePainterComponent.gameObject.AddComponent <GScaleRandomizeFilter>();

            GameObject objectPainter = new GameObject("Object Painter");

            GUtilities.ResetTransform(objectPainter.transform, g.transform);
            objectPainter.transform.hideFlags = HideFlags.HideInInspector;
            GObjectPainter objectPainterComponent = objectPainter.AddComponent <GObjectPainter>();

            objectPainterComponent.GroupId = -1;
            objectPainterComponent.gameObject.AddComponent <GRotationRandomizeFilter>();
            objectPainterComponent.gameObject.AddComponent <GScaleRandomizeFilter>();

            GameObject assetExplorer = new GameObject("Asset Explorer");

            GUtilities.ResetTransform(assetExplorer.transform, g.transform);
            assetExplorer.transform.hideFlags = HideFlags.HideInInspector;
            assetExplorer.AddComponent <GAssetExplorer>();

            GameObject helpTool = new GameObject("Help");

            GUtilities.ResetTransform(helpTool.transform, g.transform);
            helpTool.transform.hideFlags = HideFlags.HideInInspector;
            helpTool.AddComponent <GHelpComponent>();

            Selection.activeGameObject = terrainGroup;
            Undo.RegisterCreatedObjectUndo(g, "Creating Terrain Tools");
        }