public Vector4 GetForceAndHeightAt(float x, float z, float time) { Vector4 vector = default(Vector4); x = -(x + this._SurfaceOffset.x); z = -(z + this._SurfaceOffset.y); if (this._TargetDirectWavesCount == -1) { for (int i = this._NumTiles - 1; i >= 0; i--) { WaterTileSpectrum waterTileSpectrum = this._TileSpectra[i]; if (waterTileSpectrum.ResolveByFFT) { float fx; float invFx; float fy; float invFy; int num; int num2; int num3; int num4; this.InterpolationParams(x, z, i, this._WindWaves.TileSizes[i], out fx, out invFx, out fy, out invFy, out num, out num2, out num3, out num4); Vector2[] array; Vector2[] array2; Vector4[] array3; Vector4[] array4; float t; waterTileSpectrum.GetResults(time, out array, out array2, out array3, out array4, out t); vector += FastMath.Interpolate(array3[num], array3[num2], array3[num3], array3[num4], array4[num], array4[num2], array4[num3], array4[num4], fx, invFx, fy, invFy, t); } } } else { lock (this) { WaterWave[] validatedDirectWavesList = this.GetValidatedDirectWavesList(); if (validatedDirectWavesList.Length != 0) { Vector4 b = default(Vector4); for (int j = 0; j < validatedDirectWavesList.Length; j++) { validatedDirectWavesList[j].GetForceAndHeightAt(x, z, time, ref b); } vector += b; } } } float num5 = -this._Water.Materials.HorizontalDisplacementScale * this._UniformWaterScale; vector.x *= num5; vector.z *= num5; vector.y *= 0.5f * this._UniformWaterScale; vector.w *= this._UniformWaterScale; return(vector); }
internal void Update() { this._SurfaceOffset = this._Water.SurfaceOffset; float num = this._Water.Time; if (this._WindWaves.LoopDuration != 0f) { num %= this._WindWaves.LoopDuration; } this.LastFrameTime = num; this._UniformWaterScale = this._Water.UniformWaterScale; this.UpdateCachedSeed(); bool allowCpuFFT = WaterProjectSettings.Instance.AllowCpuFFT; for (int i = 0; i < this._NumTiles; i++) { int num2 = 16; int num3 = 0; for (;;) { float num4 = 0f; for (int j = this._SpectraDataList.Count - 1; j >= 0; j--) { WaterWavesSpectrumDataBase waterWavesSpectrumDataBase = this._SpectraDataList[j]; waterWavesSpectrumDataBase.ValidateSpectrumData(); float standardDeviation = waterWavesSpectrumDataBase.GetStandardDeviation(i, num3); num4 += standardDeviation * waterWavesSpectrumDataBase.Weight; } for (int k = this._OverlayedSpectra.Count - 1; k >= 0; k--) { WaterWavesSpectrumDataBase waterWavesSpectrumDataBase2 = this._OverlayedSpectra[k]; waterWavesSpectrumDataBase2.ValidateSpectrumData(); float standardDeviation2 = waterWavesSpectrumDataBase2.GetStandardDeviation(i, num3); num4 += standardDeviation2 * waterWavesSpectrumDataBase2.Weight; } if (num4 < this._WindWaves.CpuDesiredStandardError * 0.25f || num2 >= this._WindWaves.FinalResolution) { break; } num2 <<= 1; num3++; } if (num2 > this._WindWaves.FinalResolution) { num2 = this._WindWaves.FinalResolution; } WaterTileSpectrum waterTileSpectrum = this._TileSpectra[i]; if (waterTileSpectrum.SetResolveMode(num2 >= 16 && allowCpuFFT, num2)) { this._CpuWavesDirty = true; } } }