#if HDPipeline && UNITY_2021_2_OR_NEWER using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering.HighDefinition; namespace ProceduralWorlds.HDRPTOD { [System.Serializable] public class HDRPTimeOfDayWeatherProfileData { public string m_weatherName; public float m_transitionDuration = 10f; public Vector2 m_weatherDuration = new Vector2(120f, 300f); public TimeOfDayProfileData m_weatherData; private float m_lastTimeOfDayValue = -1f; private TimeOfDayProfileData m_startingData; private bool m_hasBeenSetup = false; /// /// Applies the weather and lerps the values from current to this profile settings /// /// /// /// /// /// public bool ApplyWeather(HDRPTimeOfDayComponents components, bool isDay, bool overrideLightSource, float time, float duration) { if (!m_hasBeenSetup) { Debug.LogError(" Weather was not setup with the starting values please call SetupStartingSettings() before calling Apply weather"); return false; } if (duration >= 1f) { return true; } HDAdditionalLightData lightData = components.m_sunLightData; if (!isDay) { lightData = components.m_moonLightData; } //Sun if (ValidateSun()) { if (!overrideLightSource) { if (isDay) { lightData.SetIntensity(LerpFloat(m_startingData.m_sunIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunIntensity.Evaluate(time), duration)); lightData.SetColor(LerpColor(m_startingData.m_sunColorFilter.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunColorFilter.Evaluate(time), duration), LerpFloat(m_startingData.m_sunTemperature.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunTemperature.Evaluate(time), duration)); } else { lightData.SetIntensity(LerpFloat(m_startingData.m_moonIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_moonIntensity.Evaluate(time), duration)); lightData.SetColor(LerpColor(m_startingData.m_moonColorFilter.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_moonColorFilter.Evaluate(time), duration), LerpFloat(m_startingData.m_moonTemperature.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_moonTemperature.Evaluate(time), duration)); } } lightData.volumetricDimmer = LerpFloat(m_startingData.m_sunVolumetrics.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunVolumetrics.Evaluate(time), duration); lightData.volumetricShadowDimmer = LerpFloat(m_startingData.m_sunVolumetricShadowDimmer.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunVolumetricShadowDimmer.Evaluate(time), duration); lightData.lightDimmer = LerpFloat(m_startingData.m_sunIntensityMultiplier.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunIntensityMultiplier.Evaluate(time), duration); } //Sky if (ValidateSky()) { //Physically Based components.m_physicallyBasedSky.updateMode.value = EnvironmentUpdateMode.OnChanged; //Gradient components.m_gradientSky.top.value = LerpColor(m_startingData.m_skyTopColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_skyTopColor.Evaluate(time), duration); components.m_gradientSky.middle.value = LerpColor(m_startingData.m_skyMiddleColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_skyMiddleColor.Evaluate(time), duration); components.m_gradientSky.bottom.value = LerpColor(m_startingData.m_skyBottomColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_skyBottomColor.Evaluate(time), duration); components.m_gradientSky.gradientDiffusion.value = LerpFloat(m_startingData.m_skyGradientDiffusion.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_skyGradientDiffusion.Evaluate(time), duration); components.m_gradientSky.exposure.value = LerpFloat(m_startingData.m_skyExposureGradient.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_skyExposureGradient.Evaluate(time), duration); } //Advanced Lighting if (ValidateAdvancedLighting()) { //Exposure components.m_exposure.fixedExposure.value = LerpFloat(m_startingData.m_generalExposure.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_generalExposure.Evaluate(time), duration); components.m_indirectLightingController.indirectDiffuseLightingMultiplier.value = LerpFloat(m_startingData.m_ambientIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_ambientIntensity.Evaluate(time), duration); components.m_indirectLightingController.reflectionLightingMultiplier.value = LerpFloat(m_startingData.m_ambientReflectionIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_ambientReflectionIntensity.Evaluate(time), duration); components.m_indirectLightingController.reflectionProbeIntensityMultiplier.value = LerpFloat(m_startingData.m_planarReflectionIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_planarReflectionIntensity.Evaluate(time), duration); } //Fog if (ValidateFog()) { //Local Fog components.m_localVolumetricFog.parameters.meanFreePath = LerpFloat(m_startingData.m_fogDensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_fogDensity.Evaluate(time), duration); components.m_localVolumetricFog.parameters.albedo = LerpColor(m_startingData.m_fogColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_fogColor.Evaluate(time) * m_weatherData.m_localFogMultiplier.Evaluate(time), duration); //Global components.m_fog.albedo.value = LerpColor(m_startingData.m_fogColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_fogColor.Evaluate(time), duration); components.m_fog.meanFreePath.value = LerpFloat(m_startingData.m_fogDistance.Evaluate(m_lastTimeOfDayValue),m_weatherData.m_fogDistance.Evaluate(time), duration); float fogHeight = m_weatherData.m_fogHeight.Evaluate(time); components.m_fog.baseHeight.value = LerpFloat(m_startingData.m_fogHeight.Evaluate(m_lastTimeOfDayValue), fogHeight, duration); components.m_fog.maximumHeight.value = LerpFloat(m_startingData.m_fogHeight.Evaluate(m_lastTimeOfDayValue) * 2f, fogHeight * 2f, duration); components.m_fog.depthExtent.value = LerpFloat(m_startingData.m_volumetricFogDistance.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricFogDistance.Evaluate(time), duration); components.m_fog.anisotropy.value = LerpFloat(m_startingData.m_volumetricFogAnisotropy.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricFogAnisotropy.Evaluate(time), duration); components.m_fog.sliceDistributionUniformity.value = LerpFloat(m_startingData.m_volumetricFogSliceDistributionUniformity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricFogSliceDistributionUniformity.Evaluate(time), duration); } //Shadows if (ValidateShadows()) { components.m_shadows.maxShadowDistance.value = LerpFloat(m_startingData.m_shadowDistance.Evaluate(m_lastTimeOfDayValue) * m_startingData.m_shadowDistanceMultiplier, m_weatherData.m_shadowDistance.Evaluate(time) * m_weatherData.m_shadowDistanceMultiplier, duration); components.m_shadows.directionalTransmissionMultiplier.value = LerpFloat(m_startingData.m_shadowTransmissionMultiplier.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_shadowTransmissionMultiplier.Evaluate(time), duration); components.m_contactShadows.maxDistance.value = LerpFloat(m_startingData.m_contactShadowsDistance.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_contactShadowsDistance.Evaluate(time), duration); } //Clouds if (ValidateClouds()) { //Volumetric components.m_volumetricClouds.cloudPreset.value = m_weatherData.m_cloudPresets; components.m_volumetricClouds.densityMultiplier.value = LerpFloat(m_startingData.m_volumetricDensityMultiplier.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricDensityMultiplier.Evaluate(time), duration); components.m_volumetricClouds.customDensityCurve.value = m_weatherData.m_volumetricDensityCurve; components.m_volumetricClouds.shapeFactor.value = LerpFloat(m_startingData.m_volumetricShapeFactor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricShapeFactor.Evaluate(time), duration); components.m_volumetricClouds.shapeScale.value = LerpFloat(m_startingData.m_volumetricShapeScale.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricShapeScale.Evaluate(time), duration); components.m_volumetricClouds.erosionFactor.value = LerpFloat(m_startingData.m_volumetricErosionFactor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricErosionFactor.Evaluate(time), duration); components.m_volumetricClouds.erosionScale.value = LerpFloat(m_startingData.m_volumetricErosionScale.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricErosionScale.Evaluate(time), duration); components.m_volumetricClouds.lowestCloudAltitude.value = LerpFloat(m_startingData.m_volumetricLowestCloudAltitude.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricLowestCloudAltitude.Evaluate(time), duration); components.m_volumetricClouds.cloudThickness.value = LerpFloat(m_startingData.m_volumetricCloudThickness.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricCloudThickness.Evaluate(time), duration); components.m_volumetricClouds.ambientLightProbeDimmer.value = LerpFloat(m_startingData.m_volumetricAmbientLightProbeDimmer.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricAmbientLightProbeDimmer.Evaluate(time), duration); components.m_volumetricClouds.sunLightDimmer.value = LerpFloat(m_startingData.m_volumetricSunLightDimmer.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricSunLightDimmer.Evaluate(time), duration); components.m_volumetricClouds.erosionOcclusion.value = LerpFloat(m_startingData.m_volumetricErosionOcclusion.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricErosionOcclusion.Evaluate(time), duration); components.m_volumetricClouds.scatteringTint.value = LerpColor(m_startingData.m_volumetricScatteringTint.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricScatteringTint.Evaluate(time), duration); components.m_volumetricClouds.powderEffectIntensity.value = LerpFloat(m_startingData.m_volumetricPowderEffectIntensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricPowderEffectIntensity.Evaluate(time), duration); components.m_volumetricClouds.multiScattering.value = LerpFloat(m_startingData.m_volumetricMultiScattering.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricMultiScattering.Evaluate(time), duration); components.m_volumetricClouds.shadowOpacity.value = LerpFloat(m_startingData.m_volumetricCloudShadowOpacity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_volumetricCloudShadowOpacity.Evaluate(time), duration); //Procedural components.m_cloudLayer.opacity.value = LerpFloat(m_startingData.m_cloudOpacity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudOpacity.Evaluate(time), duration); components.m_cloudLayer.layerA.tint.value = LerpColor(m_startingData.m_cloudTintColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudTintColor.Evaluate(time), duration); components.m_cloudLayer.layerB.tint.value = LerpColor(m_startingData.m_cloudTintColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudTintColor.Evaluate(time), duration); components.m_cloudLayer.layerA.exposure.value = LerpFloat(m_startingData.m_cloudExposure.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudExposure.Evaluate(time), duration); components.m_cloudLayer.layerB.exposure.value = LerpFloat(m_startingData.m_cloudExposure.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudExposure.Evaluate(time), duration); components.m_cloudLayer.shadowMultiplier.value = LerpFloat(m_startingData.m_cloudShadowOpacity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudShadowOpacity.Evaluate(time), duration); components.m_cloudLayer.shadowTint.value = LerpColor(m_startingData.m_cloudShadowColor.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudShadowColor.Evaluate(time), duration); components.m_cloudLayer.layerA.opacityR.value = LerpFloat(m_startingData.m_cloudLayerAOpacityR.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerAOpacityR.Evaluate(time), duration); components.m_cloudLayer.layerA.opacityG.value = LerpFloat(m_startingData.m_cloudLayerAOpacityG.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerAOpacityG.Evaluate(time), duration); components.m_cloudLayer.layerA.opacityB.value = LerpFloat(m_startingData.m_cloudLayerAOpacityB.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerAOpacityB.Evaluate(time), duration); components.m_cloudLayer.layerA.opacityA.value = LerpFloat(m_startingData.m_cloudLayerAOpacityA.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerAOpacityA.Evaluate(time), duration); components.m_cloudLayer.layerB.opacityR.value = LerpFloat(m_startingData.m_cloudLayerBOpacityR.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerBOpacityR.Evaluate(time), duration); components.m_cloudLayer.layerB.opacityG.value = LerpFloat(m_startingData.m_cloudLayerBOpacityG.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerBOpacityG.Evaluate(time), duration); components.m_cloudLayer.layerB.opacityB.value = LerpFloat(m_startingData.m_cloudLayerBOpacityB.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerBOpacityB.Evaluate(time), duration); components.m_cloudLayer.layerB.opacityA.value = LerpFloat(m_startingData.m_cloudLayerBOpacityA.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_cloudLayerBOpacityA.Evaluate(time), duration); } //Sun Flare if (ValidateSunLensFlare()) { components.m_sunLensFlare.enabled = m_weatherData.m_sunLensFlareProfile.m_useLensFlare; components.m_sunLensFlare.intensity = LerpFloat(m_startingData.m_sunLensFlareProfile.m_intensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunLensFlareProfile.m_intensity.Evaluate(time), duration); components.m_sunLensFlare.scale = LerpFloat(m_startingData.m_sunLensFlareProfile.m_scale.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_sunLensFlareProfile.m_scale.Evaluate(time), duration); } //Moon Flare if (ValidateMoonLensFlare()) { components.m_moonLensFlare.enabled = m_weatherData.m_moonLensFlareProfile.m_useLensFlare; components.m_moonLensFlare.intensity = LerpFloat(m_startingData.m_moonLensFlareProfile.m_intensity.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_moonLensFlareProfile.m_intensity.Evaluate(time), duration); components.m_moonLensFlare.scale = LerpFloat(m_startingData.m_moonLensFlareProfile.m_scale.Evaluate(m_lastTimeOfDayValue), m_weatherData.m_moonLensFlareProfile.m_scale.Evaluate(time), duration); } return false; } /// /// Sets up the time of day to allow transitions /// /// /// public void SetupStartingSettings(TimeOfDayProfileData startingData, float currentTimeOfDayValue) { m_startingData = startingData; m_lastTimeOfDayValue = currentTimeOfDayValue; m_hasBeenSetup = startingData != null && m_lastTimeOfDayValue != -1; } /// /// Resets the setup for this profile /// public void Reset() { m_startingData = null; m_hasBeenSetup = false; m_lastTimeOfDayValue = -1f; } public bool ValidateSun() { if (m_weatherData.m_sunIntensity == null) { return false; } if (m_weatherData.m_moonIntensity == null) { return false; } if (m_weatherData.m_sunIntensityMultiplier == null) { return false; } if (m_weatherData.m_sunTemperature == null) { return false; } if (m_weatherData.m_sunColorFilter == null) { return false; } if (m_weatherData.m_moonTemperature == null) { return false; } if (m_weatherData.m_moonColorFilter == null) { return false; } if (m_weatherData.m_sunVolumetrics == null) { return false; } if (m_weatherData.m_sunVolumetricShadowDimmer == null) { return false; } return true; } public bool ValidateSky() { if (m_weatherData.m_skyTopColor == null) { return false; } if (m_weatherData.m_skyMiddleColor == null) { return false; } if (m_weatherData.m_skyBottomColor == null) { return false; } if (m_weatherData.m_skyGradientDiffusion == null) { return false; } return true; } public bool ValidateAdvancedLighting() { if (m_weatherData.m_generalExposure == null) { return false; } if (m_weatherData.m_ambientIntensity == null) { m_weatherData.m_ambientIntensity = AnimationCurve.Constant(0f, 1f, 1f); return false; } if (m_weatherData.m_ambientReflectionIntensity == null) { m_weatherData.m_ambientReflectionIntensity = AnimationCurve.Constant(0f, 1f, 1f); return false; } return true; } public bool ValidateFog() { if (m_weatherData.m_fogColor == null) { return false; } if (m_weatherData.m_fogDistance == null) { return false; } if (m_weatherData.m_fogHeight == null) { return false; } if (m_weatherData.m_volumetricFogDistance == null) { return false; } if (m_weatherData.m_volumetricFogAnisotropy == null) { return false; } if (m_weatherData.m_volumetricFogSliceDistributionUniformity == null) { return false; } if (m_weatherData.m_localFogMultiplier == null) { return false; } if (m_weatherData.m_fogDensity == null) { return false; } return true; } public bool ValidateShadows() { if (m_weatherData.m_shadowDistance == null) { return false; } if (m_weatherData.m_shadowTransmissionMultiplier == null) { return false; } return true; } public bool ValidateClouds() { //Procedural if (m_weatherData.m_cloudOpacity == null) { return false; } if (m_weatherData.m_cloudTintColor == null) { return false; } if (m_weatherData.m_cloudExposure == null) { return false; } if (m_weatherData.m_cloudWindDirection == null) { return false; } if (m_weatherData.m_cloudWindSpeed == null) { return false; } if (m_weatherData.m_cloudShadowOpacity == null) { return false; } if (m_weatherData.m_cloudShadowColor == null) { return false; } if (m_weatherData.m_cloudLayerAOpacityR == null) { return false; } if (m_weatherData.m_cloudLayerAOpacityG == null) { return false; } if (m_weatherData.m_cloudLayerAOpacityB == null) { return false; } if (m_weatherData.m_cloudLayerAOpacityA == null) { return false; } if (m_weatherData.m_cloudLayerBOpacityR == null) { return false; } if (m_weatherData.m_cloudLayerBOpacityG == null) { return false; } if (m_weatherData.m_cloudLayerBOpacityB == null) { return false; } if (m_weatherData.m_cloudLayerBOpacityA == null) { return false; } //Volumetic if (m_weatherData.m_volumetricDensityMultiplier == null) { return false; } if (m_weatherData.m_volumetricDensityCurve == null) { return false; } if (m_weatherData.m_volumetricShapeFactor == null) { return false; } if (m_weatherData.m_volumetricShapeScale == null) { return false; } if (m_weatherData.m_volumetricErosionFactor == null) { return false; } if (m_weatherData.m_volumetricErosionScale == null) { return false; } if (m_weatherData.m_volumetricErosionCurve == null) { return false; } if (m_weatherData.m_volumetricAmbientOcclusionCurve == null) { return false; } if (m_weatherData.m_volumetricAmbientLightProbeDimmer == null) { return false; } if (m_weatherData.m_volumetricSunLightDimmer == null) { return false; } if (m_weatherData.m_volumetricErosionOcclusion == null) { return false; } if (m_weatherData.m_volumetricScatteringTint == null) { return false; } if (m_weatherData.m_volumetricPowderEffectIntensity == null) { return false; } if (m_weatherData.m_volumetricMultiScattering == null) { return false; } if (m_weatherData.m_volumetricCloudShadowOpacity == null) { return false; } return true; } public bool ValidateSunLensFlare() { if (m_weatherData.m_sunLensFlareProfile.m_lensFlareData == null) { return false; } if (m_weatherData.m_sunLensFlareProfile.m_intensity == null) { return false; } if (m_weatherData.m_sunLensFlareProfile.m_scale == null) { return false; } return true; } public bool ValidateMoonLensFlare() { if (m_weatherData.m_moonLensFlareProfile.m_lensFlareData == null) { return false; } if (m_weatherData.m_moonLensFlareProfile.m_intensity == null) { return false; } if (m_weatherData.m_moonLensFlareProfile.m_scale == null) { return false; } return true; } private float LerpFloat(float startingValue, float endValue, float time) { return Mathf.Lerp(startingValue, endValue, time); } private Color LerpColor(Color startingValue, Color endValue, float time) { return Color.Lerp(startingValue, endValue, time); } } [System.Serializable] public class WeatherEffectsData { public GameObject m_weatherEffect; public AudioClip m_weatherAudio; [Range(0f, 1f)] public float m_weatherEffectVolume = 1f; public bool m_randomizeAdditionalEffects = false; [Tooltip("-1 = unlimited additional effects")] public int m_maxAdditionalEffects = -1; [Range(0f, 100f)] public float m_randomizationSuccessRate = 70f; public List m_additionalEffects = new List(); [HideInInspector] public List m_additionalEffectsCopy = new List(); private int m_currentAdditionalEffects = 0; /// /// Sets up the copied effects that is used in the spawning so it does not touch the effects that people setup /// public void SetupAdditionalEffectsCopy() { if (m_additionalEffects.Count > 0) { m_additionalEffectsCopy.Clear(); foreach (HDRPWeatherAdditionalEffects effects in m_additionalEffects) { HDRPWeatherAdditionalEffects copiedEffect = new HDRPWeatherAdditionalEffects { m_active = effects.m_active, m_loopAudio = effects.m_loopAudio, m_allowInRandomization = effects.m_allowInRandomization, m_effect = effects.m_effect, m_effectAudio = effects.m_effectAudio, m_effectVolume = effects.m_effectVolume, m_name = effects.m_name }; m_additionalEffectsCopy.Add(copiedEffect); } } } /// /// Randomize Effects active or disabled /// public void RandomizeEffects() { if (m_randomizeAdditionalEffects) { m_currentAdditionalEffects = 0; if (m_additionalEffectsCopy.Count > 0) { foreach (HDRPWeatherAdditionalEffects additionalEffect in m_additionalEffectsCopy) { if (additionalEffect.m_allowInRandomization) { //-1 = unlimited additional effects if (m_maxAdditionalEffects != -1) { if (m_currentAdditionalEffects == m_maxAdditionalEffects) { break; } } float success = UnityEngine.Random.Range(0f, 100f); if (success > m_randomizationSuccessRate) { m_currentAdditionalEffects++; additionalEffect.m_active = true; } else { additionalEffect.m_active = false; } } } } else { if (m_additionalEffects.Count > 0) { Debug.LogWarning("Additional Effects Copy has not been setup, please call SetupAdditionalEffectsCopy() before calling this function"); } } } } /// /// Validates that this effect can be used /// /// /// public bool ValidateAdditionalEffect(HDRPWeatherAdditionalEffects effect) { if (effect == null) { return false; } if (effect.m_effect == null) { return false; } return effect.m_active; } } [System.Serializable] public class ThunderData { public LightShadows m_shadows = LightShadows.Soft; public Color m_thunderLight = Color.cyan; public float m_temperature = 16000f; public float m_intesity = 40000f; public float m_nightTimeIntensityMultiplier = 0.005f; public Vector2Int m_thunderStrikeCountMinMax = new Vector2Int(1, 5); public float m_pauseBetweenStrike = 0.15f; [Range(0f, 1f)] public float m_volume = 0.5f; public List m_thunderStrikeSounds = new List(); } [System.Serializable] public class HDRPWeatherAdditionalEffects { public string m_name; public bool m_active = false; public bool m_allowInRandomization = true; public GameObject m_effect; public AudioClip m_effectAudio; public bool m_loopAudio = true; [Range(0f, 1f)] public float m_effectVolume = 0.6f; public void ApplyGlobalAudioEffect(GameObject audioObject) { if (m_effectAudio == null) { return; } if (audioObject != null) { AudioSource audioSource = audioObject.GetComponent(); if (audioSource == null) { audioSource = audioObject.AddComponent(); } audioSource.loop = m_loopAudio; audioSource.volume = m_effectVolume; audioSource.clip = m_effectAudio; if (!audioSource.isPlaying) { audioSource.Play(); } } } } public class HDRPTimeOfDayWeatherProfile : ScriptableObject { public HDRPTimeOfDayWeatherProfileData WeatherData { get { return m_weatherData; } set { if (m_weatherData != value) { m_weatherData = value; } } } [SerializeField] private HDRPTimeOfDayWeatherProfileData m_weatherData = new HDRPTimeOfDayWeatherProfileData(); public UnderwaterOverrideData UnderwaterOverrideData { get { return m_underwaterOverrideData; } set { if (m_underwaterOverrideData != value) { m_underwaterOverrideData = value; } } } [SerializeField] private UnderwaterOverrideData m_underwaterOverrideData = new UnderwaterOverrideData(); public WeatherEffectsData WeatherFXData { get { return m_weatherFXData; } set { if (m_weatherFXData != value) { m_weatherFXData = value; } } } [SerializeField] private WeatherEffectsData m_weatherFXData = new WeatherEffectsData(); public WeatherShaderData WeatherShaderData { get { return m_weatherShaderData; } set { if (m_weatherShaderData != value) { m_weatherShaderData = value; } } } [SerializeField] private WeatherShaderData m_weatherShaderData = new WeatherShaderData(); public static IHDRPWeatherVFX GetInterface(GameObject weatherVFX) { if (weatherVFX != null) { IHDRPWeatherVFX vfx = weatherVFX.GetComponent(); if (vfx == null) { vfx = weatherVFX.GetComponentInChildren(); } return vfx; } return null; } } } #endif