using System.Collections.Generic; using UltimateWater.Internal; using UnityEngine; namespace UltimateWater { public sealed class WaterRipples : SceneSingleton { private readonly List _Areas = new List(); public static void Register(WaterSimulationArea area) { WaterRipples instance = SceneSingleton.Instance; if (!(instance == null) && !instance._Areas.Contains(area)) { instance._Areas.Add(area); } } public static void Unregister(WaterSimulationArea area) { WaterRipples instance = SceneSingleton.Instance; if (!(instance == null)) { instance._Areas.Remove(area); } } public static void AddForce(List data, float radius = 1f) { WaterRipples instance = SceneSingleton.Instance; if (!(instance == null) && Time.timeScale != 0f) { for (int num = instance._Areas.Count - 1; num >= 0; num--) { WaterSimulationArea waterSimulationArea = instance._Areas[num]; waterSimulationArea.AddForce(data, radius); } } } private void FixedUpdate() { int iterations = WaterQualitySettings.Instance.Ripples.Iterations; for (int i = 0; i < iterations; i++) { for (int j = 0; j < _Areas.Count; j++) { _Areas[j].Simulate(); } for (int k = 0; k < _Areas.Count; k++) { _Areas[k].Smooth(); } for (int l = 0; l < _Areas.Count; l++) { _Areas[l].Swap(); } } } private void OnDisable() { _Areas.Clear(); } } }