예제 #1
0
        /// <summary>
        /// Adds a CTS profile with a certain name to all terrains (loaded or not) and then bakes the textures for that terrain
        /// </summary>
        /// <param name="profileName"></param>
        public static void AddCTSProfile(string profileName)
        {
            bool bakeTerrainNormals = false;

            if (EditorUtility.DisplayDialog("Bake Terrain Normals?", "Do you want CTS to bake terrain normal maps while applying the profile as well?", "Yes", "No"))
            {
                bakeTerrainNormals = true;
            }


            CTSProfile ctsProfile = (CTSProfile)AssetDatabase.LoadAssetAtPath(GetCTSProfilePath(profileName), typeof(CTSProfile));

            if (ctsProfile != null)
            {
                if (GaiaUtils.HasDynamicLoadedTerrains())
                {
                    Action <Terrain> act = (t) => ApplyCTSProfile(t, ctsProfile, bakeTerrainNormals);
                    GaiaUtils.CallFunctionOnDynamicLoadedTerrains(act, true);
                }
                else
                {
                    foreach (Terrain t in Terrain.activeTerrains)
                    {
                        ApplyCTSProfile(t, ctsProfile, bakeTerrainNormals);
                    }
                }
                if (ctsProfile.m_needsAlbedosArrayUpdate || ctsProfile.m_needsNormalsArrayUpdate)
                {
                    CTSTerrainManager.Instance.BroadcastShaderSetup(ctsProfile);
                }
            }
        }
예제 #2
0
        private static void ApplyCTSProfile(Terrain terrain, CTSProfile ctsProfile, bool bakeTerrainNormals)
        {
            CompleteTerrainShader cts = terrain.gameObject.GetComponent <CompleteTerrainShader>();

            if (cts == null)
            {
                cts = terrain.gameObject.AddComponent <CompleteTerrainShader>();
            }
            cts.Profile = ctsProfile;
            if (bakeTerrainNormals)
            {
                cts.BakeTerrainNormals();
            }
        }
    void CreateCTSProfile()
    {
        var CTSpro = new CTSProfile();

        CTSpro.name            = VegetationPackage.name + " CTSProfile";
        CTSpro.TerrainTextures = new List <CTS.CTSTerrainTextureDetails>();
        for (int i = 0; i < VegetationPackage.TerrainTextureCount; i++)
        {
            var ctsTex = new CTS.CTSTerrainTextureDetails();
            ctsTex.Albedo = VegetationPackage.TerrainTextureList[i].Texture;
            ctsTex.Normal = VegetationPackage.TerrainTextureList[i].TextureNormals;
            CTSpro.TerrainTextures.Add(ctsTex);
        }
        AssetDatabase.CreateAsset(CTSpro, pathMain + "/" + CTSpro.name + ".asset");
        VPI[VPI.Length - 1]._CTSProfile = pathMain + "/" + CTSpro.name + ".asset";
        CTSProfilePackage = CTSpro;
    }
    void LoadAssetToManager(string AssetName)
    {
        TerrainLayers = new TerrainLayer[0];
        AssetDatabase.StartAssetEditing();
        for (int i = 0; i < VPI.Length; i++)
        {
            if (VPI[i].PopupName == AssetName)
            {
                VegetationPackage = (VegetationPackagePro)AssetDatabase.LoadAssetAtPath(VPI[i]._VegetationPackage, typeof(VegetationPackagePro));
                CTSProfilePackage = (CTSProfile)AssetDatabase.LoadAssetAtPath(VPI[i]._CTSProfile, typeof(CTSProfile));

                for (int index = 0; index < VPI[i].TerrainLayersCount; index++)
                {
                    TerrainLayers = TerrainLayers.Concat(new TerrainLayer[] {
                        (TerrainLayer)AssetDatabase.LoadAssetAtPath(VPI[i]._TerrainLayers[index], typeof(TerrainLayer))
                    }).ToArray();
                }
            }
        }
        AssetDatabase.StopAssetEditing();
    }
    void ConnectToCTI_VSP(CTSProfile profile, VegetationPackagePro PackagePro)
    {
        CTSTerrainManager.Instance.AddCTSToAllTerrains();
        CTSTerrainManager.Instance.BroadcastProfileSelect(profile);

        VegetationStudioManager vegetationStudioManager = FindObjectOfType <VegetationStudioManager>();

        if (!vegetationStudioManager)
        {
            GameObject go = new GameObject {
                name = "VegetationStudioPro"
            };
            go.AddComponent <VegetationStudioManager>();

            GameObject vegetationSystem = new GameObject {
                name = "VegetationSystemPro"
            };
            vegetationSystem.transform.SetParent(go.transform);
            VSP = vegetationSystem.AddComponent <VegetationSystemPro>();
            vegetationSystem.AddComponent <TerrainSystemPro>();
            VSP.AddAllUnityTerrains();
            VSP.AddVegetationPackage(PackagePro);
            PackagePro.SetupTerrainTextureSettings();

        #if TOUCH_REACT
            GameObject touchReactSystem = new GameObject {
                name = "TouchReactSystem"
            };
            touchReactSystem.transform.SetParent(go.transform);
            touchReactSystem.AddComponent <TouchReactSystem>();
        #endif
            vegetationSystem.AddComponent <ColliderSystemPro>();
            vegetationSystem.AddComponent <PersistentVegetationStorage>();
            RuntimePrefabSpawner runtimePrefabSpawner = vegetationSystem.AddComponent <RuntimePrefabSpawner>();
            runtimePrefabSpawner.enabled = false;
        }
    }
    void OnGUI()
    {
        var rect  = new Rect(0, 0, position.width, 22);
        var boxGS = new GUIStyle();

        boxGS.fontSize  = 14;
        boxGS.fontStyle = FontStyle.Bold;
        EditorGUI.DrawRect(rect, Color.green / 2);
        GUILayout.Space(3);
        EditorGUILayout.LabelField("CTS / Vegetation Studio Pro Package Manager", boxGS);

        scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
        if (!IsRefreshing)
        {
            EditorGUILayout.BeginVertical("Box");
            VegetationPackageName = EditorGUILayout.TextField("Vegetation Package Name:", VegetationPackageName);

            EditorGUILayout.BeginHorizontal();
            VegetationPackageTextureCount = (TerrainTextureCount)EditorGUILayout.EnumPopup("Texture Count", VegetationPackageTextureCount);

            if (!VPINames.Contains(VegetationPackageName))
            {
                if (GUILayout.Button("Create new Package"))
                {
                    VPI = VPI.Concat(new VegetationPackageInfos[] { new VegetationPackageInfos() }).ToArray();
                    AssetDatabase.StartAssetEditing();
                    CreateVegetationPackage();
                    CreateCTSProfile();
                    CreateTerrainLayers();
                    AssetDatabase.StopAssetEditing();
                }
            }
            else
            {
                EditorGUILayout.LabelField("This Name Allready Exists! Choose Other");
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();

            if (VPI.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                VPIselection = EditorGUILayout.Popup("Select Package to Load", VPIselection, VPINames);
                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("Load Package", GUILayout.Width(position.width / 2)))
                {
                    LoadAssetToManager(VPINames[VPIselection]);
                }
                if (GUILayout.Button("Delete Package", GUILayout.Width(position.width / 2)))
                {
                    DeleteAssetFromManager(VPINames[VPIselection]);
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();
            }
            if (CTSProfilePackage != null)
            {
                EditorGUILayout.BeginVertical("Box");
                VegetationPackage = (VegetationPackagePro)EditorGUILayout.ObjectField("Vegetation Package Pro", VegetationPackage, typeof(VegetationPackagePro), false);
                CTSProfilePackage = (CTSProfile)EditorGUILayout.ObjectField("CTS Profile", CTSProfilePackage, typeof(CTSProfile), false);


                EditorGUILayout.BeginHorizontal();
                if (TerrainLayers != null && VegetationPackage != null && VSP != null)
                {
                    if (GUILayout.Button("Refresh Packages", GUILayout.Width(position.width / 2)))
                    {
                        RefreshPackages();
                    }
                }
                else
                {
                    EditorGUILayout.LabelField("No Vegetation Studio In Scene");
                }
                if (GUILayout.Button("Remove All", GUILayout.Width(position.width / 2)))
                {
                    RemoveAll();
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();

                EditorGUILayout.BeginVertical("Box");
                foldoutLayers = EditorGUILayout.Foldout(foldoutLayers, "Terrain Layers");
                if (foldoutLayers)
                {
                    for (int i = 0; i < TerrainLayers.Length; i++)
                    {
                        TerrainLayers[i] = (TerrainLayer)EditorGUILayout.ObjectField(TerrainLayers[i], typeof(TerrainLayer), false);
                    }
                }
                foldoutTextures = EditorGUILayout.Foldout(foldoutTextures, "Terrain Textures");
                if (foldoutTextures)
                {
                    var gs = new GUIStyle();
                    gs.fontStyle = FontStyle.Bold;
                    gs.fontSize  = 12;
                    for (int i = 0; i < CTSProfilePackage.TerrainTextures.Count; i++)
                    {
                        GUILayout.Label(CTSProfilePackage.TerrainTextures[i].Albedo.name + "_" + i + ":", gs);
                        CTSProfilePackage.TerrainTextures[i].Albedo     = (Texture2D)EditorGUILayout.ObjectField(CTSProfilePackage.TerrainTextures[i].Albedo, typeof(Texture2D), false);
                        CTSProfilePackage.TerrainTextures[i].Normal     = (Texture2D)EditorGUILayout.ObjectField(CTSProfilePackage.TerrainTextures[i].Normal, typeof(Texture2D), false);
                        CTSProfilePackage.TerrainTextures[i].Smoothness = (Texture2D)EditorGUILayout.ObjectField(CTSProfilePackage.TerrainTextures[i].Smoothness, typeof(Texture2D), false);
                        CTSProfilePackage.TerrainTextures[i].Roughness  = (Texture2D)EditorGUILayout.ObjectField(CTSProfilePackage.TerrainTextures[i].Roughness, typeof(Texture2D), false);
                        CTSProfilePackage.TerrainTextures[i].Height     = (Texture2D)EditorGUILayout.ObjectField(CTSProfilePackage.TerrainTextures[i].Height, typeof(Texture2D), false);
                        GUILayout.HorizontalSlider(0, 0, 0);
                    }
                }
                EditorGUILayout.EndVertical();
            }
        }
        if (VegetationPackage != null && CTSProfilePackage != null)
        {
            if (GUILayout.Button("Setup this Package"))
            {
                if (!FindObjectOfType <VegetationStudioManager>() && !CTSTerrainManager.Instance.ProfileIsActive(CTSProfilePackage))
                {
                    ConnectToCTI_VSP(CTSProfilePackage, VegetationPackage);
                }
            }
        }
        EditorGUILayout.EndScrollView();
    }