using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace Enviro { [Serializable] public class EnviroFlatClouds { // Cirrus public bool useCirrusClouds = true; public Texture2D cirrusCloudsTex; [Range(0f,1f)] public float cirrusCloudsAlpha; [Range(0f,2f)] public float cirrusCloudsColorPower; [Range(0f,1f)] public float cirrusCloudsCoverage; [GradientUsage(true)] public Gradient cirrusCloudsColor; // Flat Clouds public bool useFlatClouds = true; public Texture2D flatCloudsBaseTex; public Texture2D flatCloudsDetailTex; [GradientUsage(true)] public Gradient flatCloudsLightColor; [GradientUsage(true)] public Gradient flatCloudsAmbientColor; [Range(0f,2f)] public float flatCloudsLightIntensity = 1.0f; [Range(0f,2f)] public float flatCloudsAmbientIntensity = 1.0f; [Range(0f,2f)] public float flatCloudsAbsorbtion = 0.6f; [Range(0f,1f)] public float flatCloudsHGPhase = 0.6f; [Range(0f,2f)] public float flatCloudsCoverage = 1f; [Range(0f,2f)] public float flatCloudsDensity = 1f; public float flatCloudsAltitude = 10f; public bool flatCloudsTonemapping; public float flatCloudsBaseTiling = 4f; public float flatCloudsDetailTiling = 10f; } [Serializable] public class EnviroFlatCloudsModule : EnviroModule { public Enviro.EnviroFlatClouds settings; public EnviroFlatCloudsModule preset; public bool showCirrusCloudsControls; public bool show2DCloudsControls; // Update Method public override void UpdateModule () { if(settings.useCirrusClouds) { Shader.SetGlobalFloat("_CirrusClouds",1f); if(settings.cirrusCloudsTex != null) Shader.SetGlobalTexture("_CirrusCloudMap",settings.cirrusCloudsTex); Shader.SetGlobalFloat("_CirrusCloudAlpha",settings.cirrusCloudsAlpha); Shader.SetGlobalFloat("_CirrusCloudCoverage",settings.cirrusCloudsCoverage); Shader.SetGlobalFloat("_CirrusCloudColorPower",settings.cirrusCloudsColorPower); Shader.SetGlobalColor("_CirrusCloudColor",settings.cirrusCloudsColor.Evaluate(EnviroManager.instance.solarTime)); } else { Shader.SetGlobalFloat("_CirrusClouds",0f); } if(settings.useFlatClouds) { Shader.SetGlobalFloat("_FlatClouds",1f); if(settings.flatCloudsBaseTex != null) Shader.SetGlobalTexture("_FlatCloudsBaseTexture",settings.flatCloudsBaseTex); if(settings.flatCloudsDetailTex != null) Shader.SetGlobalTexture("_FlatCloudsDetailTexture",settings.flatCloudsDetailTex); //_FlatCloudsAnimation; Shader.SetGlobalColor("_FlatCloudsLightColor", settings.flatCloudsLightColor.Evaluate(EnviroManager.instance.solarTime)); Shader.SetGlobalColor("_FlatCloudsAmbientColor", settings.flatCloudsAmbientColor.Evaluate(EnviroManager.instance.solarTime)); Vector3 lightDirection = Vector3.forward; if(EnviroManager.instance.Objects.directionalLight != null) lightDirection = EnviroManager.instance.Objects.directionalLight.transform.forward; Shader.SetGlobalVector("_FlatCloudsLightDirection",lightDirection); Shader.SetGlobalVector("_FlatCloudsLightingParams",new Vector4(settings.flatCloudsLightIntensity * 10f, settings.flatCloudsAmbientIntensity, settings.flatCloudsAbsorbtion,settings.flatCloudsHGPhase)); Shader.SetGlobalVector("_FlatCloudsParams",new Vector4(settings.flatCloudsCoverage, settings.flatCloudsDensity * 5f, settings.flatCloudsAltitude,0f)); Shader.SetGlobalVector("_FlatCloudsTiling",new Vector4(settings.flatCloudsBaseTiling, settings.flatCloudsDetailTiling, 0f,0f)); } else { Shader.SetGlobalFloat("_FlatClouds",0f); } } //Save and Load public void LoadModuleValues () { if(preset != null) { settings = JsonUtility.FromJson(JsonUtility.ToJson(preset.settings)); } else { Debug.Log("Please assign a saved module to load from!"); } } public void SaveModuleValues () { #if UNITY_EDITOR EnviroFlatCloudsModule t = ScriptableObject.CreateInstance(); t.name = "Flat Clouds Preset"; t.settings = JsonUtility.FromJson(JsonUtility.ToJson(settings)); string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset"); UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName); UnityEditor.AssetDatabase.SaveAssets(); UnityEditor.AssetDatabase.Refresh(); #endif } public void SaveModuleValues (EnviroFlatCloudsModule module) { module.settings = JsonUtility.FromJson(JsonUtility.ToJson(settings)); #if UNITY_EDITOR UnityEditor.EditorUtility.SetDirty(module); UnityEditor.AssetDatabase.SaveAssets(); #endif } } }