using UnityEngine; namespace CTS { public class CTSWeatherController : MonoBehaviour { private Terrain m_terrain; private void OnEnable() { CTSSingleton.Instance.RegisterWeatherController(this); } private void OnDisable() { CTSSingleton.Instance.UnregisterWeatherController(this); } public void ProcessWeatherUpdate(CTSWeatherManager manager) { if (m_terrain == null) { m_terrain = GetComponent(); if (m_terrain == null) { Debug.Log("CTS Weather Controller must be connected to a terrain to work."); return; } } if (m_terrain.materialType != Terrain.MaterialType.Custom) { Debug.Log("CTS Weather Controller needs a CTS Material to work with."); return; } Material materialTemplate = m_terrain.materialTemplate; if (materialTemplate == null) { Debug.Log("CTS Weather Controller needs a Custom Material to work with."); return; } materialTemplate.SetFloat(CTSShaderID.Snow_Amount, manager.SnowPower * 2f); materialTemplate.SetFloat(CTSShaderID.Snow_Min_Height, manager.SnowMinHeight); float value = manager.RainPower * manager.MaxRainSmoothness; materialTemplate.SetFloat(CTSShaderID.Terrain_Smoothness, value); if (manager.SeasonalTintActive) { Color white = Color.white; white = ((manager.Season < 1f) ? Color.Lerp(manager.WinterTint, manager.SpringTint, manager.Season) : ((manager.Season < 2f) ? Color.Lerp(manager.SpringTint, manager.SummerTint, manager.Season - 1f) : ((!(manager.Season < 3f)) ? Color.Lerp(manager.AutumnTint, manager.WinterTint, manager.Season - 3f) : Color.Lerp(manager.SummerTint, manager.AutumnTint, manager.Season - 2f)))); for (int i = 0; i < 16; i++) { float w = materialTemplate.GetVector(CTSShaderID.Texture_X_Color[i]).w; materialTemplate.SetVector(CTSShaderID.Texture_X_Color[i], new Vector4(white.r, white.g, white.b, w)); } } } } }