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); }