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