internal virtual void OnProfilesChanged()
        {
            Water.WeightedProfile[] profiles = this._Water.ProfilesManager.Profiles;
            Dictionary <WaterWavesSpectrum, WaterWavesSpectrumData> .Enumerator enumerator = this._SpectraDataCache.GetEnumerator();
            while (enumerator.MoveNext())
            {
                KeyValuePair <WaterWavesSpectrum, WaterWavesSpectrumData> keyValuePair = enumerator.Current;
                keyValuePair.Value.Weight = 0f;
            }
            enumerator.Dispose();
            foreach (Water.WeightedProfile weightedProfile in profiles)
            {
                if (weightedProfile.Weight > 0.0001f)
                {
                    WaterWavesSpectrum     spectrum = weightedProfile.Profile.Spectrum;
                    WaterWavesSpectrumData spectrumData;
                    if (!this._SpectraDataCache.TryGetValue(spectrum, out spectrumData))
                    {
                        spectrumData = this.GetSpectrumData(spectrum);
                    }
                    spectrumData.Weight = weightedProfile.Weight;
                }
            }
            this.SetDirectionalSpectrumDirty();
            this.StdDev = 0f;
            float num = 0f;

            enumerator = this._SpectraDataCache.GetEnumerator();
            while (enumerator.MoveNext())
            {
                KeyValuePair <WaterWavesSpectrum, WaterWavesSpectrumData> keyValuePair2 = enumerator.Current;
                WaterWavesSpectrumData value = keyValuePair2.Value;
                value.ValidateSpectrumData();
                this.StdDev += value.GetStandardDeviation() * value.Weight;
                if (value.CpuWaves.Length != 0)
                {
                    num += value.CpuWaves[0]._Amplitude * value.Weight;
                }
            }
            enumerator.Dispose();
            for (int j = this._OverlayedSpectra.Count - 1; j >= 0; j--)
            {
                WaterWavesSpectrumDataBase waterWavesSpectrumDataBase = this._OverlayedSpectra[j];
                waterWavesSpectrumDataBase.ValidateSpectrumData();
                this.StdDev += waterWavesSpectrumDataBase.GetStandardDeviation() * waterWavesSpectrumDataBase.Weight;
                if (waterWavesSpectrumDataBase.CpuWaves.Length != 0)
                {
                    num += waterWavesSpectrumDataBase.CpuWaves[0]._Amplitude * waterWavesSpectrumDataBase.Weight;
                }
            }
            this.MaxVerticalDisplacement   = this.StdDev * 1.6f + num;
            this.MaxHorizontalDisplacement = this.MaxVerticalDisplacement * this._Water.Materials.HorizontalDisplacementScale;
        }
        public WaterWavesSpectrumData GetSpectrumData(WaterWavesSpectrum spectrum)
        {
            WaterWavesSpectrumData waterWavesSpectrumData;

            if (!this._SpectraDataCache.TryGetValue(spectrum, out waterWavesSpectrumData))
            {
                object spectraDataCache = this._SpectraDataCache;
                lock (spectraDataCache)
                {
                    waterWavesSpectrumData = (this._SpectraDataCache[spectrum] = new WaterWavesSpectrumData(this._Water, this._WindWaves, spectrum));
                }
                waterWavesSpectrumData.ValidateSpectrumData();
                this._CpuWavesDirty = true;
                object spectraDataList = this._SpectraDataList;
                lock (spectraDataList)
                {
                    this._SpectraDataList.Add(waterWavesSpectrumData);
                }
            }
            return(waterWavesSpectrumData);
        }
 public void CacheSpectrum(WaterWavesSpectrum spectrum)
 {
     this.GetSpectrumData(spectrum);
 }