using UltimateWater.Internal; using UnityEngine; using UnityEngine.Serialization; namespace UltimateWater { public class WeatherSystem : MonoBehaviour { [SerializeField] [FormerlySerializedAs("water")] private Water _Water; [FormerlySerializedAs("profile")] [SerializeField] private WaterProfile _Profile; [Tooltip("Describes how big the weather system is. Common values range from 10000 to 150000, assuming that the scene units are used as meters.")] [SerializeField] [FormerlySerializedAs("radius")] private float _Radius = 10000f; [FormerlySerializedAs("weight")] [SerializeField] [Range(0f, 1f)] private float _Weight = 1f; private WaterWavesSpectrumData _SpectrumData; private Vector2 _LastOffset; private Vector2 _LastWindDirection; private float _LastRadius; private float _LastWeight; private void Start() { _SpectrumData = new WaterWavesSpectrumData(_Water, _Water.WindWaves, _Profile.Data.Spectrum); LateUpdate(); _Water.WindWaves.SpectrumResolver.AddSpectrum(_SpectrumData); } private void OnEnable() { if (_SpectrumData != null && !_Water.WindWaves.SpectrumResolver.ContainsSpectrum(_SpectrumData)) { _Water.WindWaves.SpectrumResolver.AddSpectrum(_SpectrumData); } } private void OnDisable() { _Water.WindWaves.SpectrumResolver.RemoveSpectrum(_SpectrumData); } private void LateUpdate() { Vector3 vector = _Water.transform.InverseTransformPoint(base.transform.position); Vector2 vector2 = new Vector2(vector.x, vector.z); Vector3 forward = base.transform.forward; Vector2 normalized = new Vector2(forward.x, forward.z).normalized; if (normalized != _LastWindDirection || vector2 != _LastOffset || _Radius != _LastRadius || _Weight != _LastWeight) { _SpectrumData.WindDirection = (_LastWindDirection = normalized); _SpectrumData.WeatherSystemOffset = (_LastOffset = vector2); _SpectrumData.WeatherSystemRadius = (_LastRadius = _Radius); _SpectrumData.Weight = (_LastWeight = _Weight); _Water.WindWaves.SpectrumResolver.SetDirectionalSpectrumDirty(); } } } }