| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671 | using System.Collections;using System.Collections.Generic;using UnityEngine;using System;namespace Enviro{    [Serializable]    public class EnviroLighting     {        // DirectLighting        public enum LightingMode        {            Single,            Dual        };        public LightingMode lightingMode;        public bool setDirectLighting = true;        public AnimationCurve sunIntensityCurve;        public AnimationCurve moonIntensityCurve;        public Gradient sunColorGradient;        public Gradient moonColorGradient;        public AnimationCurve sunIntensityCurveHDRP = new AnimationCurve();        public AnimationCurve moonIntensityCurveHDRP  = new AnimationCurve();        public AnimationCurve lightColorTemperatureHDRP = new AnimationCurve();        [GradientUsageAttribute(true)]        public Gradient lightColorTintHDRP;        [GradientUsageAttribute(true)]        public Gradient ambientColorTintHDRP;        public bool controlExposure = true;        public AnimationCurve sceneExposure = new AnimationCurve();        public bool controlIndirectLighting = true;        public AnimationCurve diffuseIndirectIntensity = new AnimationCurve();        public AnimationCurve reflectionIndirectIntensity = new AnimationCurve();        [Range(0f,2f)]        public float directLightIntensityModifier = 1f;        //Ambient Lighting         public bool setAmbientLighting = true;        public UnityEngine.Rendering.AmbientMode ambientMode;        [GradientUsage(true)]        public Gradient ambientSkyColorGradient;        [GradientUsage(true)]        public Gradient ambientEquatorColorGradient;        [GradientUsage(true)]        public Gradient ambientGroundColorGradient;        public AnimationCurve ambientIntensityCurve;         [Range(0f,2f)]        public float ambientIntensityModifier = 1f;        //Reflections        public enum GlobalReflectionResolution        {            R16,            R32,            R64,            R128,            R256,            R512,            R1024,            R2048        }        [Tooltip("Enable/disable enviro reflection probe..")]        public bool updateReflectionProbe = true;        [Tooltip("Enable/disable if enviro reflection probe should render in custom mode to support clouds and other Enviro effects.")]        public bool globalReflectionCustomRendering = true;        [Tooltip("Enable/disable if enviro reflection probe should render with fog.")]         public bool globalReflectionUseFog = false;        [Tooltip("Set if enviro reflection probe should update faces individual on different frames.")]        public bool globalReflectionTimeSlicing = true;        [Tooltip("Enable/disable enviro reflection probe updates based on gametime changes..")]        public bool globalReflectionsUpdateOnGameTime = true;        [Tooltip("Enable/disable enviro reflection probe updates based on transform position changes..")]        public bool globalReflectionsUpdateOnPosition = true;        [Tooltip("Reflection probe intensity.")]        [Range(0f, 2f)]        public float globalReflectionsIntensity = 1.0f;        [Tooltip("Reflection probe update rate based on game time.")]        public float globalReflectionsTimeTreshold = 0.025f;        [Tooltip("Reflection probe update rate based on camera position.")]        public float globalReflectionsPositionTreshold = 0.25f;        [Tooltip("Reflection probe scale. Increase that one to increase the area where reflection probe will influence your scene.")]        [Range(10f, 10000f)]        public float globalReflectionsScale = 1f;        [Tooltip("Reflection probe resolution.")]        public GlobalReflectionResolution globalReflectionResolution = GlobalReflectionResolution.R256;        [Tooltip("Reflection probe rendered Layers.")]        public LayerMask globalReflectionLayers;        [Tooltip("Enable this option to update the default reflection with global reflection probes cubemap. This can be needed for material that might not support direct reflection probes. (Instanced Indirect Rendering)")]        public bool updateDefaultEnvironmentReflections = true;        [Tooltip("Reflection cubemap used for default scene sky reflections.")]        public Cubemap defaultSkyReflectionTex;    }    [Serializable]    [ExecuteInEditMode]    public class EnviroLightingModule : EnviroModule    {          public Enviro.EnviroLighting Settings;        public EnviroLightingModule preset;        private float lastAmbientSkyboxUpdate;        public float lastReflectionUpdate;        public Vector3 lastReflectionUpdatePos;        //Inspector        public bool showDirectLightingControls;        public bool showAmbientLightingControls;        public bool showReflectionControls;        #if ENVIRO_HDRP        public UnityEngine.Rendering.HighDefinition.HDAdditionalLightData directionalLightHDRP;        public UnityEngine.Rendering.HighDefinition.HDAdditionalLightData additionalLightHDRP;        public UnityEngine.Rendering.HighDefinition.Exposure exposureHDRP;        public UnityEngine.Rendering.HighDefinition.IndirectLightingController indirectLightingHDRP;        #endif        public override void Enable ()        {             Setup();             // Update global reflections once on enable.            if(Settings.updateReflectionProbe && EnviroManager.instance.Objects.globalReflectionProbe != null)            {                 EnviroManager.instance.Objects.globalReflectionProbe.RefreshReflection(false);                UpdateDefaultReflection(EnviroManager.instance.Objects.globalReflectionProbe, false);            }        }              public override void Disable ()        {             Cleanup();          }         //Applies changes when you switch the lighting mode.        public void ApplyLightingChanges ()        {            Cleanup();            Setup();        }        private void Setup()        {            if(EnviroManager.instance.Objects.directionalLight == null)            {                GameObject newLight = new GameObject();                if(Settings.lightingMode == EnviroLighting.LightingMode.Single)                    newLight.name = "Sun/Moon Directional Light";                else                    newLight.name = "Sun Directional Light";                newLight.transform.SetParent(EnviroManager.instance.transform);                newLight.transform.localPosition = Vector3.zero;                EnviroManager.instance.Objects.directionalLight = newLight.AddComponent<Light>();                EnviroManager.instance.Objects.directionalLight.type = LightType.Directional;                EnviroManager.instance.Objects.directionalLight.shadows = LightShadows.Soft;            }            if(EnviroManager.instance.Objects.additionalDirectionalLight == null && Settings.lightingMode == EnviroLighting.LightingMode.Dual)            {                GameObject newLight = new GameObject();                newLight.name = "Moon Directional Light";                newLight.transform.SetParent(EnviroManager.instance.transform);                newLight.transform.localPosition = Vector3.zero;                EnviroManager.instance.Objects.additionalDirectionalLight = newLight.AddComponent<Light>();                EnviroManager.instance.Objects.additionalDirectionalLight.type = LightType.Directional;                EnviroManager.instance.Objects.additionalDirectionalLight.shadows = LightShadows.Soft;            }            else if (EnviroManager.instance.Objects.additionalDirectionalLight != null && Settings.lightingMode == EnviroLighting.LightingMode.Single)            {                DestroyImmediate(EnviroManager.instance.Objects.additionalDirectionalLight.gameObject);            }                        if(EnviroManager.instance.Objects.globalReflectionProbe == null)            {                GameObject newReflectionProbe = new GameObject();                newReflectionProbe.name = "Global Reflection Probe";                newReflectionProbe.transform.SetParent(EnviroManager.instance.transform);                newReflectionProbe.transform.localPosition = Vector3.zero;                EnviroManager.instance.Objects.globalReflectionProbe = newReflectionProbe.AddComponent<EnviroReflectionProbe>();            }        }           private void Cleanup()        {            if(EnviroManager.instance.Objects.directionalLight != null)               DestroyImmediate(EnviroManager.instance.Objects.directionalLight.gameObject);            if(EnviroManager.instance.Objects.additionalDirectionalLight != null)               DestroyImmediate(EnviroManager.instance.Objects.additionalDirectionalLight.gameObject);            if(EnviroManager.instance.Objects.globalReflectionProbe != null)               DestroyImmediate(EnviroManager.instance.Objects.globalReflectionProbe.gameObject);        }        // Update Method        public override void UpdateModule ()        {             //Update Direct Lighting            if(EnviroManager.instance.Objects.directionalLight != null && Settings.setDirectLighting)            {                   #if !ENVIRO_HDRP                UpdateDirectLighting ();                #else                UpdateDirectLightingHDRP();                #endif            }            if (Settings.setAmbientLighting)            {                #if !ENVIRO_HDRP                UpdateAmbientLighting ();                #else                UpdateAmbientLightingHDRP ();                #endif            }            if(EnviroManager.instance.Objects.globalReflectionProbe != null && Settings.updateReflectionProbe)            {                UpdateReflection();            }            #if ENVIRO_HDRP            UpdateExposureHDRP ();            #endif        }        private void UpdateDirectLighting ()        {            if(Settings.lightingMode == EnviroLighting.LightingMode.Single)            {                if(!EnviroManager.instance.isNight)                {                    //Set light to sun                    EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.sun.transform.rotation;                    EnviroManager.instance.Objects.directionalLight.intensity = Settings.sunIntensityCurve.Evaluate(EnviroManager.instance.solarTime) * Settings.directLightIntensityModifier;                    EnviroManager.instance.Objects.directionalLight.color = Settings.sunColorGradient.Evaluate(EnviroManager.instance.solarTime);                }                else                {                    //Set light to moon                    EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.moon.transform.rotation;                    EnviroManager.instance.Objects.directionalLight.intensity = Settings.moonIntensityCurve.Evaluate(EnviroManager.instance.lunarTime) * Settings.directLightIntensityModifier;                    EnviroManager.instance.Objects.directionalLight.color = Settings.moonColorGradient.Evaluate(EnviroManager.instance.lunarTime);                }            }            else            {                //Sun                EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.sun.transform.rotation;                EnviroManager.instance.Objects.directionalLight.intensity = Settings.sunIntensityCurve.Evaluate(EnviroManager.instance.solarTime) * Settings.directLightIntensityModifier;                EnviroManager.instance.Objects.directionalLight.color = Settings.sunColorGradient.Evaluate(EnviroManager.instance.solarTime);                //Moon                EnviroManager.instance.Objects.additionalDirectionalLight.transform.rotation = EnviroManager.instance.Objects.moon.transform.rotation;                EnviroManager.instance.Objects.additionalDirectionalLight.intensity = Settings.moonIntensityCurve.Evaluate(EnviroManager.instance.lunarTime) * Settings.directLightIntensityModifier;                EnviroManager.instance.Objects.additionalDirectionalLight.color = Settings.moonColorGradient.Evaluate(EnviroManager.instance.lunarTime);            }        }#if ENVIRO_HDRP        private void UpdateDirectLightingHDRP ()        {            if(directionalLightHDRP == null && EnviroManager.instance.Objects.directionalLight != null)               directionalLightHDRP = EnviroManager.instance.Objects.directionalLight.gameObject.GetComponent<UnityEngine.Rendering.HighDefinition.HDAdditionalLightData>();             if(additionalLightHDRP == null && EnviroManager.instance.Objects.additionalDirectionalLight != null)               additionalLightHDRP = EnviroManager.instance.Objects.additionalDirectionalLight.gameObject.GetComponent<UnityEngine.Rendering.HighDefinition.HDAdditionalLightData>();             if(Settings.lightingMode == EnviroLighting.LightingMode.Single)            {                   if(!EnviroManager.instance.isNight)                {                    //Set light to sun                    EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.sun.transform.rotation;                    EnviroManager.instance.Objects.directionalLight.color = Settings.lightColorTintHDRP.Evaluate(EnviroManager.instance.solarTime);                    EnviroManager.instance.Objects.directionalLight.useColorTemperature = true;                    EnviroManager.instance.Objects.directionalLight.colorTemperature = Settings.lightColorTemperatureHDRP.Evaluate(EnviroManager.instance.solarTime);                                        if(directionalLightHDRP != null)                       directionalLightHDRP.SetIntensity(Settings.sunIntensityCurveHDRP.Evaluate(EnviroManager.instance.solarTime) * Settings.directLightIntensityModifier);                }                else                {                    //Set light to moon                    EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.moon.transform.rotation;                    EnviroManager.instance.Objects.directionalLight.color = Settings.lightColorTintHDRP.Evaluate(EnviroManager.instance.solarTime);                    EnviroManager.instance.Objects.directionalLight.useColorTemperature = true;                    EnviroManager.instance.Objects.directionalLight.colorTemperature = Settings.lightColorTemperatureHDRP.Evaluate(EnviroManager.instance.solarTime);                                        if(directionalLightHDRP != null)                       directionalLightHDRP.SetIntensity(Settings.moonIntensityCurveHDRP.Evaluate(EnviroManager.instance.lunarTime) * Settings.directLightIntensityModifier);                }            }            else            {                 //Sun                EnviroManager.instance.Objects.directionalLight.transform.rotation = EnviroManager.instance.Objects.sun.transform.rotation;                EnviroManager.instance.Objects.directionalLight.color = Settings.lightColorTintHDRP.Evaluate(EnviroManager.instance.solarTime);                EnviroManager.instance.Objects.directionalLight.useColorTemperature = true;                EnviroManager.instance.Objects.directionalLight.colorTemperature = Settings.lightColorTemperatureHDRP.Evaluate(EnviroManager.instance.solarTime);                                if(directionalLightHDRP != null)                   directionalLightHDRP.SetIntensity(Settings.sunIntensityCurveHDRP.Evaluate(EnviroManager.instance.solarTime) * Settings.directLightIntensityModifier);                 //Moon                if(EnviroManager.instance.Objects.additionalDirectionalLight != null)                {                    EnviroManager.instance.Objects.additionalDirectionalLight.transform.rotation = EnviroManager.instance.Objects.moon.transform.rotation;                    EnviroManager.instance.Objects.additionalDirectionalLight.color = Settings.lightColorTintHDRP.Evaluate(EnviroManager.instance.solarTime);                    EnviroManager.instance.Objects.additionalDirectionalLight.useColorTemperature = true;                    EnviroManager.instance.Objects.additionalDirectionalLight.colorTemperature = Settings.lightColorTemperatureHDRP.Evaluate(EnviroManager.instance.solarTime);                }                if(additionalLightHDRP != null)                    additionalLightHDRP.SetIntensity(Settings.moonIntensityCurveHDRP.Evaluate(EnviroManager.instance.lunarTime) * Settings.directLightIntensityModifier);            }        }         private void UpdateAmbientLightingHDRP ()        {            if(EnviroManager.instance.Sky != null && EnviroManager.instance.Sky.mySkyboxMat != null)            {                EnviroManager.instance.Sky.mySkyboxMat.SetColor("_AmbientColorTintHDRP", Settings.ambientColorTintHDRP.Evaluate(EnviroManager.instance.solarTime));            }             if(EnviroManager.instance.volumeHDRP != null)            {                if(indirectLightingHDRP == null)                {                    UnityEngine.Rendering.HighDefinition.IndirectLightingController TempIndirectLight;                    if (EnviroManager.instance.volumeHDRP.sharedProfile != null && EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.IndirectLightingController>(out TempIndirectLight))                    {                        indirectLightingHDRP = TempIndirectLight;                    }                    else                     {                        EnviroManager.instance.volumeHDRP.sharedProfile.Add<UnityEngine.Rendering.HighDefinition.IndirectLightingController>();                        if (EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.IndirectLightingController>(out TempIndirectLight))                        {                            indirectLightingHDRP = TempIndirectLight;                        }                    }                }                else                {                    if(Settings.controlIndirectLighting)                    {                        indirectLightingHDRP.active = true;                        indirectLightingHDRP.indirectDiffuseLightingMultiplier.overrideState = true;                        indirectLightingHDRP.indirectDiffuseLightingMultiplier.value = Settings.diffuseIndirectIntensity.Evaluate(EnviroManager.instance.solarTime);                        indirectLightingHDRP.reflectionLightingMultiplier.overrideState = true;                        indirectLightingHDRP.reflectionLightingMultiplier.value = Settings.reflectionIndirectIntensity.Evaluate(EnviroManager.instance.solarTime);                    }                    else                     {                        indirectLightingHDRP.active = false;                    }                }            }        }        private void UpdateExposureHDRP ()        {            if(EnviroManager.instance.volumeHDRP != null)            {                 if(exposureHDRP == null)                {                    UnityEngine.Rendering.HighDefinition.Exposure TempExposure;                    if (EnviroManager.instance.volumeHDRP.sharedProfile != null && EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.Exposure>(out TempExposure))                    {                        exposureHDRP = TempExposure;                    }                    else                     {                        EnviroManager.instance.volumeHDRP.sharedProfile.Add<UnityEngine.Rendering.HighDefinition.Exposure>();                        if (EnviroManager.instance.volumeHDRP.sharedProfile.TryGet<UnityEngine.Rendering.HighDefinition.Exposure>(out TempExposure))                        {                            exposureHDRP = TempExposure;                        }                    }                }                else                {                    if(Settings.controlExposure)                    {                        exposureHDRP.active = true;                        exposureHDRP.mode.overrideState = true;                        exposureHDRP.mode.value = UnityEngine.Rendering.HighDefinition.ExposureMode.Fixed;                        exposureHDRP.fixedExposure.overrideState = true;                        exposureHDRP.fixedExposure.value = Settings.sceneExposure.Evaluate(EnviroManager.instance.solarTime);                    }                    else                    {                        exposureHDRP.active = false;                    }                }            }        }#endif        private void UpdateAmbientLighting ()        {            RenderSettings.ambientMode = Settings.ambientMode;            float intensity = Mathf.Lerp(Settings.ambientIntensityCurve.Evaluate(EnviroManager.instance.solarTime), Settings.ambientIntensityCurve.Evaluate(EnviroManager.instance.solarTime) * 0.25f, EnviroManager.instance.lunarTime * (1f - EnviroManager.instance.solarTime)) * Settings.ambientIntensityModifier;            switch (Settings.ambientMode)            {                case UnityEngine.Rendering.AmbientMode.Flat:                    RenderSettings.ambientSkyColor = Settings.ambientSkyColorGradient.Evaluate(EnviroManager.instance.solarTime) * intensity;                break;                case UnityEngine.Rendering.AmbientMode.Trilight:                    RenderSettings.ambientSkyColor = Settings.ambientSkyColorGradient.Evaluate(EnviroManager.instance.solarTime) * intensity;                    RenderSettings.ambientEquatorColor = Settings.ambientEquatorColorGradient.Evaluate(EnviroManager.instance.solarTime) * intensity;                          RenderSettings.ambientGroundColor = Settings.ambientGroundColorGradient.Evaluate(EnviroManager.instance.solarTime) * intensity;                break;                case UnityEngine.Rendering.AmbientMode.Skybox:                RenderSettings.ambientIntensity = intensity;                if(EnviroManager.instance.Time != null)                {                    if (lastAmbientSkyboxUpdate < EnviroManager.instance.Time.Settings.timeOfDay || lastAmbientSkyboxUpdate > EnviroManager.instance.Time.Settings.timeOfDay + 0.101f)                    {                         DynamicGI.UpdateEnvironment();                        lastAmbientSkyboxUpdate = EnviroManager.instance.Time.Settings.timeOfDay + 0.1f;                    }                }                else                {                    if (lastAmbientSkyboxUpdate < Time.realtimeSinceStartup || lastAmbientSkyboxUpdate > Time.realtimeSinceStartup + 0.101f)                    {                         DynamicGI.UpdateEnvironment();                        lastAmbientSkyboxUpdate = Time.realtimeSinceStartup + 0.1f;                    }                }                break;            }        }        public void UpdateReflectionForced ()        {            if(EnviroManager.instance.Objects.globalReflectionProbe == null)                return;        #if !ENVIRO_HDRP                           EnviroManager.instance.Objects.globalReflectionProbe.RefreshReflection(false);                    UpdateDefaultReflection(EnviroManager.instance.Objects.globalReflectionProbe,false);        #else                    EnviroManager.instance.Objects.globalReflectionProbe.RefreshReflection(false);        #endif        }        private void UpdateReflection()        {            EnviroReflectionProbe probe = EnviroManager.instance.Objects.globalReflectionProbe;            int res = 128;            switch (Settings.globalReflectionResolution)            {                case EnviroLighting.GlobalReflectionResolution.R16:                     res = 16;                break;                case EnviroLighting.GlobalReflectionResolution.R32:                     res = 32;                break;                case EnviroLighting.GlobalReflectionResolution.R64:                     res = 64;                break;                case EnviroLighting.GlobalReflectionResolution.R128:                     res = 128;                break;                case EnviroLighting.GlobalReflectionResolution.R256:                     res = 256;                break;                case EnviroLighting.GlobalReflectionResolution.R512:                     res = 512;                break;                case EnviroLighting.GlobalReflectionResolution.R1024:                     res = 1024;                break;                case EnviroLighting.GlobalReflectionResolution.R2048:                     res = 2048;                break;            }#if !ENVIRO_HDRP            probe.customRendering = Settings.globalReflectionCustomRendering;            probe.myProbe.cullingMask = Settings.globalReflectionLayers;            probe.myProbe.intensity = Settings.globalReflectionsIntensity;            probe.myProbe.size = new Vector3 (Settings.globalReflectionsScale,Settings.globalReflectionsScale,Settings.globalReflectionsScale);            probe.myProbe.resolution = res;#else            probe.customRendering = false;            probe.myProbe.resolution = res;            if(probe.hdprobe != null)            {                probe.hdprobe.settingsRaw.cameraSettings.culling.cullingMask = Settings.globalReflectionLayers;                probe.hdprobe.settingsRaw.influence.boxSize = new Vector3 (Settings.globalReflectionsScale,Settings.globalReflectionsScale,Settings.globalReflectionsScale);                probe.hdprobe.settingsRaw.influence.sphereRadius = Settings.globalReflectionsScale;                 probe.hdprobe.settingsRaw.lighting.multiplier = Settings.globalReflectionsIntensity;            }#endif            if(EnviroManager.instance.Time != null)            {                if ((lastReflectionUpdate < EnviroManager.instance.Time.Settings.timeOfDay || lastReflectionUpdate > EnviroManager.instance.Time.Settings.timeOfDay + (Settings.globalReflectionsTimeTreshold + 0.01f)) && Settings.globalReflectionsUpdateOnGameTime)                { #if !ENVIRO_HDRP                           probe.RefreshReflection(Settings.globalReflectionTimeSlicing);                    UpdateDefaultReflection(probe,Settings.globalReflectionTimeSlicing);#else                    probe.RefreshReflection(false);#endif                                        lastReflectionUpdate = EnviroManager.instance.Time.Settings.timeOfDay + Settings.globalReflectionsTimeTreshold;                }            }            if ((probe.transform.position.magnitude > lastReflectionUpdatePos.magnitude + Settings.globalReflectionsPositionTreshold || probe.transform.position.magnitude < lastReflectionUpdatePos.magnitude - Settings.globalReflectionsPositionTreshold) && Settings.globalReflectionsUpdateOnPosition)            {#if !ENVIRO_HDRP                probe.RefreshReflection(Settings.globalReflectionTimeSlicing);                UpdateDefaultReflection(probe,Settings.globalReflectionTimeSlicing);#else                probe.RefreshReflection(false);#endif                lastReflectionUpdatePos = probe.transform.position;            }        }        //Main method to update default reflections.        private void UpdateDefaultReflection (EnviroReflectionProbe probe, bool timeSlice)        {            //Update Default Reflections#if UNITY_EDITOR            if((Settings.updateDefaultEnvironmentReflections && UnityEngine.SceneManagement.SceneManager.GetActiveScene() == EnviroManager.instance.gameObject.scene) || (Settings.updateDefaultEnvironmentReflections && EnviroManager.instance != null && EnviroManager.instance.dontDestroyOnLoad))#else            if(Settings.updateDefaultEnvironmentReflections)#endif            {                   if(timeSlice)                    EnviroManager.instance.StartCoroutine(CopyDefaultReflectionSliced(probe));                else                    EnviroManager.instance.StartCoroutine(CopyDefaultReflectionInstant(probe));             }            else             {                RenderSettings.defaultReflectionMode = UnityEngine.Rendering.DefaultReflectionMode.Skybox;            }        }        //Checks if custom rendering is activated, otherwise check if unity probe is finished rendering to copy the cubemap.        private void CopyDefaultReflection (EnviroReflectionProbe probe)        {            if(!Settings.globalReflectionCustomRendering)            {                if(probe.renderId == -1 || probe.myProbe.IsFinishedRendering(probe.renderId))                {                    CopyDefaultReflectionCubemap(probe);                }                else                {                    EnviroManager.instance.StartCoroutine(WaitForProbeFinish(probe));                }                 }            else            {                CopyDefaultReflectionCubemap(probe);            }        }         //Copy reflection probe to cubemap and assign as default reflections.        private void CopyDefaultReflectionCubemap (EnviroReflectionProbe probe)        {             if(Settings.defaultSkyReflectionTex == null || Settings.defaultSkyReflectionTex.height != probe.myProbe.resolution || Settings.defaultSkyReflectionTex.width != probe.myProbe.resolution)                {                    if(Settings.defaultSkyReflectionTex != null)                    DestroyImmediate(Settings.defaultSkyReflectionTex);                                    Settings.defaultSkyReflectionTex = new Cubemap(probe.myProbe.resolution, probe.myProbe.hdr ? TextureFormat.RGBAHalf : TextureFormat.RGBA32, true);                    Settings.defaultSkyReflectionTex.name = "Enviro Default Sky Reflection";                }                   if(probe.myProbe.texture != null)                      Graphics.CopyTexture(probe.myProbe.texture, Settings.defaultSkyReflectionTex as Texture);                RenderSettings.defaultReflectionMode = UnityEngine.Rendering.DefaultReflectionMode.Custom;                RenderSettings.customReflection = Settings.defaultSkyReflectionTex;        }        //Wait a frame and check again if unity probe finished now. Set to DefaultReflectionMode to Skybox in meantime.        private IEnumerator WaitForProbeFinish (EnviroReflectionProbe probe)        {            RenderSettings.defaultReflectionMode = UnityEngine.Rendering.DefaultReflectionMode.Skybox;            yield return null;            CopyDefaultReflection(probe);        }        private IEnumerator CopyDefaultReflectionInstant(EnviroReflectionProbe probe)        {            //Wait one frame for probe to finish rendering in case of timeslicing            yield return null;              CopyDefaultReflection(probe);        }         //Wait 7 frames for custom rendered time sliced probes.        private IEnumerator CopyDefaultReflectionSliced(EnviroReflectionProbe probe)        {            //Wait for 7 frames in case of timeslicing            for (int i = 0; i < 8; i++)            {                yield return null;            }            CopyDefaultReflection(probe);        }         //Save and Load        public void LoadModuleValues ()        {            if(preset != null)            {                Settings = JsonUtility.FromJson<Enviro.EnviroLighting>(JsonUtility.ToJson(preset.Settings));            }            else            {                Debug.Log("Please assign a saved module to load from!");            }        }        public void SaveModuleValues ()        {#if UNITY_EDITOR        EnviroLightingModule t =  ScriptableObject.CreateInstance<EnviroLightingModule>();        t.name = "Lighting Module";        t.Settings = JsonUtility.FromJson<Enviro.EnviroLighting>(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 (EnviroLightingModule module)        {            module.Settings = JsonUtility.FromJson<Enviro.EnviroLighting>(JsonUtility.ToJson(Settings));            #if UNITY_EDITOR            UnityEditor.EditorUtility.SetDirty(module);            UnityEditor.AssetDatabase.SaveAssets();            #endif        }    }}
 |