Kasper Karlgren c84494a697 new files
2025-01-21 13:54:40 +01:00

450 lines
39 KiB
C#

// Distant Lands 2024
// COZY: Stylized Weather 3
// All code included in this file is protected under the Unity Asset Store Eula
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using DistantLands.Cozy.Data;
namespace DistantLands.Cozy
{
[ExecuteAlways]
public class CozyAtmosphereModule : CozyBiomeModuleBase<CozyAtmosphereModule>
{
[CozySearchable(true, "sky", "atmosphere", "fog", "lighting", "clouds")]
public AtmosphereProfile atmosphereProfile;
public bool transitioningAtmosphere = false;
public override void PropogateVariables()
{
if (atmosphereProfile == null)
{
Debug.LogWarning("Cozy Weather requires an active weather profile, an active perennial profile and an active atmosphere profile to function properly.\nPlease ensure that the active CozyWeather script contains all necessary profile references.");
return;
}
SetAtmosphereVariables();
}
void LateUpdate()
{
if (!isBiomeModule)
{
ComputeBiomeWeights();
weatherSphere.UpdateShaderVariables();
}
}
/// <summary>
/// Immediately sets all of the atmosphere variables.
/// </summary>
void SetAtmosphereVariables()
{
float i = weatherSphere.usePhysicalSunHeight ? weatherSphere.modifiedDayPercentage : weatherSphere.dayPercentage;
weatherSphere.gradientExponent = atmosphereProfile.gradientExponent.GetFloatValue(i);
weatherSphere.acScale = atmosphereProfile.acScale.GetFloatValue(i);
weatherSphere.ambientLightHorizonColor = atmosphereProfile.ambientLightHorizonColor.GetColorValue(i);
weatherSphere.ambientLightZenithColor = atmosphereProfile.ambientLightZenithColor.GetColorValue(i);
weatherSphere.ambientLightMultiplier = atmosphereProfile.ambientLightMultiplier.GetFloatValue(i);
weatherSphere.chemtrailsMoveSpeed = atmosphereProfile.chemtrailsMoveSpeed.GetFloatValue(i);
weatherSphere.cirroMoveSpeed = atmosphereProfile.cirroMoveSpeed.GetFloatValue(i);
weatherSphere.cirrusMoveSpeed = atmosphereProfile.cirrusMoveSpeed.GetFloatValue(i);
weatherSphere.clippingThreshold = atmosphereProfile.clippingThreshold.GetFloatValue(i);
weatherSphere.cloudCohesion = atmosphereProfile.cloudCohesion.GetFloatValue(i);
weatherSphere.cloudColor = atmosphereProfile.cloudColor.GetColorValue(i);
weatherSphere.cloudDetailAmount = atmosphereProfile.cloudDetailAmount.GetFloatValue(i);
weatherSphere.cloudDetailScale = atmosphereProfile.cloudDetailScale.GetFloatValue(i);
weatherSphere.cloudHighlightColor = atmosphereProfile.cloudHighlightColor.GetColorValue(i);
weatherSphere.cloudMainScale = atmosphereProfile.cloudMainScale.GetFloatValue(i);
weatherSphere.cloudMoonColor = atmosphereProfile.cloudMoonColor.GetColorValue(i);
weatherSphere.cloudMoonHighlightFalloff = atmosphereProfile.cloudMoonHighlightFalloff.GetFloatValue(i);
weatherSphere.cloudSunHighlightFalloff = atmosphereProfile.cloudSunHighlightFalloff.GetFloatValue(i);
weatherSphere.cloudTextureColor = atmosphereProfile.cloudTextureColor.GetColorValue(i);
weatherSphere.cloudThickness = atmosphereProfile.cloudThickness.GetFloatValue(i);
weatherSphere.cloudWindSpeed = atmosphereProfile.cloudWindSpeed.GetFloatValue(i);
weatherSphere.fogColor1 = atmosphereProfile.fogColor1.GetColorValue(i);
weatherSphere.fogColor2 = atmosphereProfile.fogColor2.GetColorValue(i);
weatherSphere.fogColor3 = atmosphereProfile.fogColor3.GetColorValue(i);
weatherSphere.fogColor4 = atmosphereProfile.fogColor4.GetColorValue(i);
weatherSphere.fogColor5 = atmosphereProfile.fogColor5.GetColorValue(i);
weatherSphere.fogStart1 = atmosphereProfile.fogStart1.GetFloatValue(i);
weatherSphere.fogStart2 = atmosphereProfile.fogStart2.GetFloatValue(i);
weatherSphere.fogStart3 = atmosphereProfile.fogStart3.GetFloatValue(i);
weatherSphere.fogStart4 = atmosphereProfile.fogStart4.GetFloatValue(i);
weatherSphere.fogDensityMultiplier = atmosphereProfile.fogDensityMultiplier.GetFloatValue(i);
weatherSphere.fogFlareColor = atmosphereProfile.fogFlareColor.GetColorValue(i);
weatherSphere.fogMoonFlareColor = atmosphereProfile.fogMoonFlareColor.GetColorValue(i);
weatherSphere.fogHeight = atmosphereProfile.fogHeight.GetFloatValue(i);
weatherSphere.fogVariationAmount = atmosphereProfile.fogVariationAmount.GetFloatValue(i);
weatherSphere.fogVariationDirection = atmosphereProfile.fogVariationDirection;
weatherSphere.fogVariationDistance = atmosphereProfile.fogVariationDistance.GetFloatValue(i);
weatherSphere.fogVariationScale = atmosphereProfile.fogVariationScale.GetFloatValue(i);
weatherSphere.fogLightFlareFalloff = atmosphereProfile.fogLightFlareFalloff.GetFloatValue(i);
weatherSphere.fogLightFlareIntensity = atmosphereProfile.fogLightFlareIntensity.GetFloatValue(i);
weatherSphere.fogLightFlareSquish = atmosphereProfile.fogLightFlareSquish.GetFloatValue(i);
weatherSphere.fogBase = atmosphereProfile.fogBase.GetFloatValue(i);
weatherSphere.heightFogColor = atmosphereProfile.heightFogColor.GetColorValue(i);
weatherSphere.heightFogDistance = atmosphereProfile.heightFogDistance.GetFloatValue(i);
weatherSphere.heightFogIntensity = atmosphereProfile.heightFogIntensity.GetFloatValue(i);
weatherSphere.heightFogTransition = atmosphereProfile.heightFogTransition.GetFloatValue(i);
weatherSphere.heightFogVariationAmount = atmosphereProfile.heightFogVariationAmount.GetFloatValue(i);
weatherSphere.heightFogVariationScale = atmosphereProfile.heightFogVariationScale.GetFloatValue(i);
weatherSphere.galaxy1Color = atmosphereProfile.galaxy1Color.GetColorValue(i);
weatherSphere.galaxy2Color = atmosphereProfile.galaxy2Color.GetColorValue(i);
weatherSphere.galaxy3Color = atmosphereProfile.galaxy3Color.GetColorValue(i);
weatherSphere.galaxyIntensity = atmosphereProfile.galaxyIntensity.GetFloatValue(i);
weatherSphere.highAltitudeCloudColor = atmosphereProfile.highAltitudeCloudColor.GetColorValue(i);
weatherSphere.lightScatteringColor = atmosphereProfile.lightScatteringColor.GetColorValue(i);
weatherSphere.moonlightColor = atmosphereProfile.moonlightColor.GetColorValue(i);
weatherSphere.moonColor = atmosphereProfile.moonColor.GetColorValue(i);
weatherSphere.moonFalloff = atmosphereProfile.moonFalloff.GetFloatValue(i);
weatherSphere.moonFlareColor = atmosphereProfile.moonFlareColor.GetColorValue(i);
weatherSphere.useRainbow = atmosphereProfile.useRainbow;
weatherSphere.rainbowPosition = atmosphereProfile.rainbowPosition.GetFloatValue(i);
weatherSphere.rainbowWidth = atmosphereProfile.rainbowWidth.GetFloatValue(i);
weatherSphere.shadowDistance = atmosphereProfile.shadowDistance.GetFloatValue(i);
weatherSphere.skyHorizonColor = atmosphereProfile.skyHorizonColor.GetColorValue(i);
weatherSphere.skyZenithColor = atmosphereProfile.skyZenithColor.GetColorValue(i);
weatherSphere.spherize = atmosphereProfile.spherize.GetFloatValue(i);
weatherSphere.starColor = atmosphereProfile.starColor.GetColorValue(i);
weatherSphere.sunColor = atmosphereProfile.sunColor.GetColorValue(i);
weatherSphere.sunDirection = atmosphereProfile.sunDirection.GetFloatValue(i);
weatherSphere.sunFalloff = atmosphereProfile.sunFalloff.GetFloatValue(i);
weatherSphere.sunFlareColor = atmosphereProfile.sunFlareColor.GetColorValue(i);
weatherSphere.sunlightColor = atmosphereProfile.sunlightColor.GetColorValue(i);
weatherSphere.moonlightShadows = atmosphereProfile.moonlightShadows;
weatherSphere.sunlightShadows = atmosphereProfile.sunlightShadows;
weatherSphere.sunPitch = atmosphereProfile.sunPitch.GetFloatValue(i);
weatherSphere.sunSize = atmosphereProfile.sunSize.GetFloatValue(i);
weatherSphere.textureAmount = atmosphereProfile.textureAmount.GetFloatValue(i);
weatherSphere.fogSmoothness = atmosphereProfile.fogSmoothness.GetFloatValue(i);
weatherSphere.texturePanDirection = atmosphereProfile.texturePanDirection;
weatherSphere.cloudTexture = atmosphereProfile.cloudTexture;
weatherSphere.chemtrailsTexture = atmosphereProfile.chemtrailsTexture;
weatherSphere.cirrusCloudTexture = atmosphereProfile.cirrusCloudTexture;
weatherSphere.altocumulusCloudTexture = atmosphereProfile.altocumulusCloudTexture;
weatherSphere.cirrostratusCloudTexture = atmosphereProfile.cirrostratusCloudTexture;
weatherSphere.starMap = atmosphereProfile.starMap;
weatherSphere.galaxyMap = atmosphereProfile.galaxyMap;
weatherSphere.galaxyStarMap = atmosphereProfile.galaxyStarMap;
weatherSphere.galaxyVariationMap = atmosphereProfile.galaxyVariationMap;
weatherSphere.lightScatteringMap = atmosphereProfile.lightScatteringMap;
weatherSphere.partlyCloudyLuxuryClouds = atmosphereProfile.partlyCloudyLuxuryClouds;
weatherSphere.mostlyCloudyLuxuryClouds = atmosphereProfile.mostlyCloudyLuxuryClouds;
weatherSphere.overcastLuxuryClouds = atmosphereProfile.overcastLuxuryClouds;
weatherSphere.lowBorderLuxuryClouds = atmosphereProfile.lowBorderLuxuryClouds;
weatherSphere.highBorderLuxuryClouds = atmosphereProfile.highBorderLuxuryClouds;
weatherSphere.lowNimbusLuxuryClouds = atmosphereProfile.lowNimbusLuxuryClouds;
weatherSphere.midNimbusLuxuryClouds = atmosphereProfile.midNimbusLuxuryClouds;
weatherSphere.highNimbusLuxuryClouds = atmosphereProfile.highNimbusLuxuryClouds;
weatherSphere.luxuryVariation = atmosphereProfile.luxuryVariation;
#if COZY_URP || COZY_HDRP
weatherSphere.sunFlare = atmosphereProfile.sunFlare;
weatherSphere.moonFlare = atmosphereProfile.moonFlare;
#endif
foreach (CozyAtmosphereModule biome in biomes)
{
if (biome == null) continue;
if (biome.system.weight == 0) continue;
if (biome.atmosphereProfile.gradientExponent)
weatherSphere.gradientExponent = Mathf.Lerp(weatherSphere.gradientExponent, biome.atmosphereProfile.gradientExponent.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.ambientLightHorizonColor)
weatherSphere.ambientLightHorizonColor = Color.Lerp(weatherSphere.ambientLightHorizonColor, biome.atmosphereProfile.ambientLightHorizonColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.ambientLightZenithColor)
weatherSphere.ambientLightZenithColor = Color.Lerp(weatherSphere.ambientLightZenithColor, biome.atmosphereProfile.ambientLightZenithColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.ambientLightMultiplier)
weatherSphere.ambientLightMultiplier = Mathf.Lerp(weatherSphere.ambientLightMultiplier, biome.atmosphereProfile.ambientLightMultiplier.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.clippingThreshold)
weatherSphere.clippingThreshold = Mathf.Lerp(weatherSphere.clippingThreshold, biome.atmosphereProfile.clippingThreshold.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.cloudCohesion)
weatherSphere.cloudCohesion = Mathf.Lerp(weatherSphere.cloudCohesion, biome.atmosphereProfile.cloudCohesion.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.cloudColor)
weatherSphere.cloudColor = Color.Lerp(weatherSphere.cloudColor, biome.atmosphereProfile.cloudColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.cloudHighlightColor)
weatherSphere.cloudHighlightColor = Color.Lerp(weatherSphere.cloudHighlightColor, biome.atmosphereProfile.cloudHighlightColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.cloudMoonColor)
weatherSphere.cloudMoonColor = Color.Lerp(weatherSphere.cloudMoonColor, biome.atmosphereProfile.cloudMoonColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.cloudMoonHighlightFalloff)
weatherSphere.cloudMoonHighlightFalloff = Mathf.Lerp(weatherSphere.cloudMoonHighlightFalloff, biome.atmosphereProfile.cloudMoonHighlightFalloff.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.cloudSunHighlightFalloff)
weatherSphere.cloudSunHighlightFalloff = Mathf.Lerp(weatherSphere.cloudSunHighlightFalloff, biome.atmosphereProfile.cloudSunHighlightFalloff.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.cloudTextureColor)
weatherSphere.cloudTextureColor = Color.Lerp(weatherSphere.cloudTextureColor, biome.atmosphereProfile.cloudTextureColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.cloudThickness)
weatherSphere.cloudThickness = Mathf.Lerp(weatherSphere.cloudThickness, biome.atmosphereProfile.cloudThickness.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogColor1)
weatherSphere.fogColor1 = Color.Lerp(weatherSphere.fogColor1, biome.atmosphereProfile.fogColor1.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogColor2)
weatherSphere.fogColor2 = Color.Lerp(weatherSphere.fogColor2, biome.atmosphereProfile.fogColor2.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogColor3)
weatherSphere.fogColor3 = Color.Lerp(weatherSphere.fogColor3, biome.atmosphereProfile.fogColor3.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogColor4)
weatherSphere.fogColor4 = Color.Lerp(weatherSphere.fogColor4, biome.atmosphereProfile.fogColor4.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogColor5)
weatherSphere.fogColor5 = Color.Lerp(weatherSphere.fogColor5, biome.atmosphereProfile.fogColor5.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogStart1)
weatherSphere.fogStart1 = Mathf.Lerp(weatherSphere.fogStart1, biome.atmosphereProfile.fogStart1.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogStart2)
weatherSphere.fogStart2 = Mathf.Lerp(weatherSphere.fogStart2, biome.atmosphereProfile.fogStart2.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogStart3)
weatherSphere.fogStart3 = Mathf.Lerp(weatherSphere.fogStart3, biome.atmosphereProfile.fogStart3.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogStart4)
weatherSphere.fogStart4 = Mathf.Lerp(weatherSphere.fogStart4, biome.atmosphereProfile.fogStart4.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogDensityMultiplier)
weatherSphere.fogDensityMultiplier = Mathf.Lerp(weatherSphere.fogDensityMultiplier, biome.atmosphereProfile.fogDensityMultiplier.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogFlareColor)
weatherSphere.fogFlareColor = Color.Lerp(weatherSphere.fogFlareColor, biome.atmosphereProfile.fogFlareColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogMoonFlareColor)
weatherSphere.fogMoonFlareColor = Color.Lerp(weatherSphere.fogMoonFlareColor, biome.atmosphereProfile.fogMoonFlareColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.fogHeight)
weatherSphere.fogHeight = Mathf.Lerp(weatherSphere.fogHeight, biome.atmosphereProfile.fogHeight.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogVariationAmount)
weatherSphere.fogVariationAmount = Mathf.Lerp(weatherSphere.fogVariationAmount, biome.atmosphereProfile.fogVariationAmount.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogVariationDistance)
weatherSphere.fogVariationDistance = Mathf.Lerp(weatherSphere.fogVariationDistance, biome.atmosphereProfile.fogVariationDistance.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogLightFlareFalloff)
weatherSphere.fogLightFlareFalloff = Mathf.Lerp(weatherSphere.fogLightFlareFalloff, biome.atmosphereProfile.fogLightFlareFalloff.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogLightFlareIntensity)
weatherSphere.fogLightFlareIntensity = Mathf.Lerp(weatherSphere.fogLightFlareIntensity, biome.atmosphereProfile.fogLightFlareIntensity.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogLightFlareSquish)
weatherSphere.fogLightFlareSquish = Mathf.Lerp(weatherSphere.fogLightFlareSquish, biome.atmosphereProfile.fogLightFlareSquish.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.galaxy1Color)
weatherSphere.galaxy1Color = Color.Lerp(weatherSphere.galaxy1Color, biome.atmosphereProfile.galaxy1Color.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.galaxy2Color)
weatherSphere.galaxy2Color = Color.Lerp(weatherSphere.galaxy2Color, biome.atmosphereProfile.galaxy2Color.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.galaxy3Color)
weatherSphere.galaxy3Color = Color.Lerp(weatherSphere.galaxy3Color, biome.atmosphereProfile.galaxy3Color.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.galaxyIntensity)
weatherSphere.galaxyIntensity = Mathf.Lerp(weatherSphere.galaxyIntensity, biome.atmosphereProfile.galaxyIntensity.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.highAltitudeCloudColor)
weatherSphere.highAltitudeCloudColor = Color.Lerp(weatherSphere.highAltitudeCloudColor, biome.atmosphereProfile.highAltitudeCloudColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.lightScatteringColor)
weatherSphere.lightScatteringColor = Color.Lerp(weatherSphere.lightScatteringColor, biome.atmosphereProfile.lightScatteringColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.moonlightColor)
weatherSphere.moonlightColor = Color.Lerp(weatherSphere.moonlightColor, biome.atmosphereProfile.moonlightColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.moonColor)
weatherSphere.moonColor = Color.Lerp(weatherSphere.moonColor, biome.atmosphereProfile.moonColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.moonFalloff)
weatherSphere.moonFalloff = Mathf.Lerp(weatherSphere.moonFalloff, biome.atmosphereProfile.moonFalloff.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.moonFlareColor)
weatherSphere.moonFlareColor = Color.Lerp(weatherSphere.moonFlareColor, biome.atmosphereProfile.moonFlareColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.rainbowPosition)
weatherSphere.rainbowPosition = Mathf.Lerp(weatherSphere.rainbowPosition, biome.atmosphereProfile.rainbowPosition.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.rainbowWidth)
weatherSphere.rainbowWidth = Mathf.Lerp(weatherSphere.rainbowWidth, biome.atmosphereProfile.rainbowWidth.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.shadowDistance)
weatherSphere.shadowDistance = Mathf.Lerp(weatherSphere.shadowDistance, biome.atmosphereProfile.shadowDistance.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.skyHorizonColor)
weatherSphere.skyHorizonColor = Color.Lerp(weatherSphere.skyHorizonColor, biome.atmosphereProfile.skyHorizonColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.skyZenithColor)
weatherSphere.skyZenithColor = Color.Lerp(weatherSphere.skyZenithColor, biome.atmosphereProfile.skyZenithColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.spherize)
weatherSphere.spherize = Mathf.Lerp(weatherSphere.spherize, biome.atmosphereProfile.spherize.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.starColor)
weatherSphere.starColor = Color.Lerp(weatherSphere.starColor, biome.atmosphereProfile.starColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.sunColor)
weatherSphere.sunColor = Color.Lerp(weatherSphere.sunColor, biome.atmosphereProfile.sunColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.sunDirection)
weatherSphere.sunDirection = Mathf.Lerp(weatherSphere.sunDirection, biome.atmosphereProfile.sunDirection.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.sunFalloff)
weatherSphere.sunFalloff = Mathf.Lerp(weatherSphere.sunFalloff, biome.atmosphereProfile.sunFalloff.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.sunFlareColor)
weatherSphere.sunFlareColor = Color.Lerp(weatherSphere.sunFlareColor, biome.atmosphereProfile.sunFlareColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.sunlightColor)
weatherSphere.sunlightColor = Color.Lerp(weatherSphere.sunlightColor, biome.atmosphereProfile.sunlightColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.sunPitch)
weatherSphere.sunPitch = Mathf.Lerp(weatherSphere.sunPitch, biome.atmosphereProfile.sunPitch.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.sunSize)
weatherSphere.sunSize = Mathf.Lerp(weatherSphere.sunSize, biome.atmosphereProfile.sunSize.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.textureAmount)
weatherSphere.textureAmount = Mathf.Lerp(weatherSphere.textureAmount, biome.atmosphereProfile.textureAmount.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogSmoothness)
weatherSphere.fogSmoothness = Mathf.Lerp(weatherSphere.fogSmoothness, biome.atmosphereProfile.fogSmoothness.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.fogBase)
weatherSphere.fogBase = Mathf.Lerp(weatherSphere.fogBase, biome.atmosphereProfile.fogBase.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogColor)
weatherSphere.heightFogColor = Color.Lerp(weatherSphere.heightFogColor, biome.atmosphereProfile.heightFogColor.GetColorValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogDistance)
weatherSphere.heightFogDistance = Mathf.Lerp(weatherSphere.heightFogDistance, biome.atmosphereProfile.heightFogDistance.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogIntensity)
weatherSphere.heightFogIntensity = Mathf.Lerp(weatherSphere.heightFogIntensity, biome.atmosphereProfile.heightFogIntensity.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogTransition)
weatherSphere.heightFogTransition = Mathf.Lerp(weatherSphere.heightFogTransition, biome.atmosphereProfile.heightFogTransition.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogVariationAmount)
weatherSphere.heightFogVariationAmount = Mathf.Lerp(weatherSphere.heightFogVariationAmount, biome.atmosphereProfile.heightFogVariationAmount.GetFloatValue(i), biome.weight);
if (biome.atmosphereProfile.heightFogVariationScale)
weatherSphere.heightFogVariationScale = Mathf.Lerp(weatherSphere.heightFogVariationScale, biome.atmosphereProfile.heightFogVariationScale.GetFloatValue(i), biome.weight);
}
}
/// <summary>
/// Smoothly interpolates the current atmosphere profile and all of the impacted settings by the transition time.
/// </summary>
public void ChangeAtmosphere(AtmosphereProfile end, float transitionTime)
{
StartCoroutine(TransitionAtmosphere(end, transitionTime));
}
IEnumerator TransitionAtmosphere(AtmosphereProfile end, float transitionTime)
{
float gradientExponentStart = weatherSphere.gradientExponent;
float acScaleStart = weatherSphere.acScale;
Color ambientLightHorizonColorStart = weatherSphere.ambientLightHorizonColor;
Color ambientLightZenithColorStart = weatherSphere.ambientLightZenithColor;
float ambientLightMultiplierStart = weatherSphere.ambientLightMultiplier;
float chemtrailsMoveSpeedStart = weatherSphere.chemtrailsMoveSpeed;
float cirroMoveSpeedStart = weatherSphere.cirroMoveSpeed;
float cirrusMoveSpeedStart = weatherSphere.cirrusMoveSpeed;
float clippingThresholdStart = weatherSphere.clippingThreshold;
float cloudCohesionStart = weatherSphere.cloudCohesion;
Color cloudColorStart = weatherSphere.cloudColor;
float cloudDetailAmountStart = weatherSphere.cloudDetailAmount;
float cloudDetailScaleStart = weatherSphere.cloudDetailScale;
Color cloudHighlightColorStart = weatherSphere.cloudHighlightColor;
float cloudMainScaleStart = weatherSphere.cloudMainScale;
Color cloudMoonColorStart = weatherSphere.cloudMoonColor;
float cloudMoonHighlightFalloffStart = weatherSphere.cloudMoonHighlightFalloff;
float cloudSunHighlightFalloffStart = weatherSphere.cloudSunHighlightFalloff;
Color cloudTextureColorStart = weatherSphere.cloudTextureColor;
float cloudThicknessStart = weatherSphere.cloudThickness;
float cloudWindSpeedStart = weatherSphere.cloudWindSpeed;
Color fogColor1Start = weatherSphere.fogColor1;
Color fogColor2Start = weatherSphere.fogColor2;
Color fogColor3Start = weatherSphere.fogColor3;
Color fogColor4Start = weatherSphere.fogColor4;
Color fogColor5Start = weatherSphere.fogColor5;
float fogStart1Start = weatherSphere.fogStart1;
float fogStart2Start = weatherSphere.fogStart2;
float fogStart3Start = weatherSphere.fogStart3;
float fogStart4Start = weatherSphere.fogStart4;
float fogDensityMultiplierStart = weatherSphere.fogDensityMultiplier;
Color fogFlareColorStart = weatherSphere.fogFlareColor;
float fogHeightStart = weatherSphere.fogHeight;
float fogLightFlareFalloffStart = weatherSphere.fogLightFlareFalloff;
float fogLightFlareIntensityStart = weatherSphere.fogLightFlareIntensity;
float fogLightFlareSquishStart = weatherSphere.fogLightFlareSquish;
Color galaxy1ColorStart = weatherSphere.galaxy1Color;
Color galaxy2ColorStart = weatherSphere.galaxy2Color;
Color galaxy3ColorStart = weatherSphere.galaxy3Color;
Color highAltitudeCloudColorStart = weatherSphere.highAltitudeCloudColor;
Color lightScatteringColorStart = weatherSphere.lightScatteringColor;
Color moonlightColorStart = weatherSphere.moonlightColor;
Color moonFlareColorStart = weatherSphere.moonFlareColor;
Color skyHorizonColorStart = weatherSphere.skyHorizonColor;
Color skyZenithColorStart = weatherSphere.skyZenithColor;
Color starColorStart = weatherSphere.starColor;
Color sunColorStart = weatherSphere.sunColor;
Color sunFlareColorStart = weatherSphere.sunFlareColor;
Color sunlightColorStart = weatherSphere.sunlightColor;
float galaxyIntensityStart = weatherSphere.galaxyIntensity;
float moonFalloffStart = weatherSphere.moonFalloff;
float rainbowPositionStart = weatherSphere.rainbowPosition;
float rainbowWidthStart = weatherSphere.rainbowWidth;
float shadowDistanceStart = weatherSphere.shadowDistance;
float spherizeStart = weatherSphere.spherize;
float sunDirectionStart = weatherSphere.sunDirection;
float sunFalloffStart = weatherSphere.sunFalloff;
float sunPitchStart = weatherSphere.sunPitch;
float sunSizeStart = weatherSphere.sunSize;
float textureAmountStart = weatherSphere.textureAmount;
transitioningAtmosphere = true;
float t = transitionTime;
while (t > 0)
{
float div = 1 - (t / transitionTime);
yield return new WaitForEndOfFrame();
weatherSphere.gradientExponent = Mathf.Lerp(gradientExponentStart, end.gradientExponent.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.acScale = Mathf.Lerp(acScaleStart, end.acScale.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.ambientLightHorizonColor = Color.Lerp(ambientLightHorizonColorStart, end.ambientLightHorizonColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.ambientLightZenithColor = Color.Lerp(ambientLightZenithColorStart, end.ambientLightZenithColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.ambientLightMultiplier = Mathf.Lerp(ambientLightMultiplierStart, end.ambientLightMultiplier.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.chemtrailsMoveSpeed = Mathf.Lerp(chemtrailsMoveSpeedStart, end.chemtrailsMoveSpeed.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cirroMoveSpeed = Mathf.Lerp(cirroMoveSpeedStart, end.cirroMoveSpeed.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cirrusMoveSpeed = Mathf.Lerp(cirrusMoveSpeedStart, end.cirrusMoveSpeed.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.clippingThreshold = Mathf.Lerp(clippingThresholdStart, end.clippingThreshold.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudCohesion = Mathf.Lerp(cloudCohesionStart, end.cloudCohesion.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudColor = Color.Lerp(cloudColorStart, end.cloudColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudDetailAmount = Mathf.Lerp(cloudDetailAmountStart, end.cloudDetailAmount.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudDetailScale = Mathf.Lerp(cloudDetailScaleStart, end.cloudDetailScale.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudHighlightColor = Color.Lerp(cloudHighlightColorStart, end.cloudHighlightColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudMainScale = Mathf.Lerp(cloudMainScaleStart, end.cloudMainScale.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudMoonColor = Color.Lerp(cloudMoonColorStart, end.cloudMoonColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudMoonHighlightFalloff = Mathf.Lerp(cloudMoonHighlightFalloffStart, end.cloudMoonHighlightFalloff.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudSunHighlightFalloff = Mathf.Lerp(cloudSunHighlightFalloffStart, end.cloudSunHighlightFalloff.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudTextureColor = Color.Lerp(cloudTextureColorStart, end.cloudTextureColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudThickness = Mathf.Lerp(cloudThicknessStart, end.cloudThickness.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.cloudWindSpeed = Mathf.Lerp(cloudWindSpeedStart, end.cloudWindSpeed.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogColor1 = Color.Lerp(fogColor1Start, end.fogColor1.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogColor2 = Color.Lerp(fogColor2Start, end.fogColor2.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogColor3 = Color.Lerp(fogColor3Start, end.fogColor3.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogColor4 = Color.Lerp(fogColor4Start, end.fogColor4.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogColor5 = Color.Lerp(fogColor5Start, end.fogColor5.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogStart1 = Mathf.Lerp(fogStart1Start, end.fogStart1.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogStart2 = Mathf.Lerp(fogStart2Start, end.fogStart2.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogStart3 = Mathf.Lerp(fogStart3Start, end.fogStart3.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogStart4 = Mathf.Lerp(fogStart4Start, end.fogStart4.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogDensityMultiplier = Mathf.Lerp(fogDensityMultiplierStart, end.fogDensityMultiplier.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogFlareColor = Color.Lerp(fogFlareColorStart, end.fogFlareColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogHeight = Mathf.Lerp(fogHeightStart, end.fogHeight.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogLightFlareFalloff = Mathf.Lerp(fogLightFlareFalloffStart, end.fogLightFlareFalloff.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogLightFlareIntensity = Mathf.Lerp(fogLightFlareIntensityStart, end.fogLightFlareIntensity.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.fogLightFlareSquish = Mathf.Lerp(fogLightFlareSquishStart, end.fogLightFlareSquish.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.galaxy1Color = Color.Lerp(galaxy1ColorStart, end.galaxy1Color.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.galaxy2Color = Color.Lerp(galaxy2ColorStart, end.galaxy2Color.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.galaxy3Color = Color.Lerp(galaxy3ColorStart, end.galaxy3Color.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.galaxyIntensity = Mathf.Lerp(galaxyIntensityStart, end.galaxyIntensity.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.highAltitudeCloudColor = Color.Lerp(highAltitudeCloudColorStart, end.highAltitudeCloudColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.lightScatteringColor = Color.Lerp(lightScatteringColorStart, end.lightScatteringColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.moonlightColor = Color.Lerp(moonlightColorStart, end.moonlightColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.moonFalloff = Mathf.Lerp(moonFalloffStart, end.moonFalloff.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.moonFlareColor = Color.Lerp(moonFlareColorStart, end.moonFlareColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.rainbowPosition = Mathf.Lerp(rainbowPositionStart, end.rainbowPosition.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.rainbowWidth = Mathf.Lerp(rainbowWidthStart, end.rainbowWidth.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.shadowDistance = Mathf.Lerp(shadowDistanceStart, end.shadowDistance.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.skyHorizonColor = Color.Lerp(skyHorizonColorStart, end.skyHorizonColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.skyZenithColor = Color.Lerp(skyZenithColorStart, end.skyZenithColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.spherize = Mathf.Lerp(spherizeStart, end.spherize.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.starColor = Color.Lerp(starColorStart, end.starColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunColor = Color.Lerp(sunColorStart, end.sunColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunDirection = Mathf.Lerp(sunDirectionStart, end.sunDirection.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunFalloff = Mathf.Lerp(sunFalloffStart, end.sunFalloff.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunFlareColor = Color.Lerp(sunFlareColorStart, end.sunFlareColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunlightColor = Color.Lerp(sunlightColorStart, end.sunlightColor.GetColorValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunPitch = Mathf.Lerp(sunPitchStart, end.sunPitch.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.sunSize = Mathf.Lerp(sunSizeStart, end.sunSize.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
weatherSphere.textureAmount = Mathf.Lerp(textureAmountStart, end.textureAmount.GetFloatValue(weatherSphere.modifiedDayPercentage), div);
t -= Time.deltaTime;
}
transitioningAtmosphere = false;
atmosphereProfile = end;
}
}
}