private IEnumerator TweenVolumes() { _isTweeningRunning = true; int index = 0; while (_tweenedFolders.Count > 0) { index = 0; while (index < _tweenedFolders.Count) { TweenedFolder current = _tweenedFolders[index]; current.folder.DeltaVolume += current.variationPerSecond * Time.deltaTime; if ((current.variationPerSecond > 0 && current.folder.DeltaVolume > current.targetDeltaVolume) || (current.variationPerSecond < 0 && current.folder.DeltaVolume < current.targetDeltaVolume)) { current.folder.DeltaVolume = current.targetDeltaVolume; _tweenedFolders.Remove(current); } else { index++; } } yield return(null); } _isTweeningRunning = false; yield break; }
public void SetDeltaVolume(eSoundFolders folders, float deltaVolume, float time) { foreach (eSoundFolders folder in _soundFolders.Keys) { if ((folders & folder) != 0) { TweenedFolder tf = _tweenedFolders.Find((TweenedFolder test) => test.folder == _soundFolders[folder]); if (tf == null) { tf = new TweenedFolder(); tf.folder = _soundFolders[folder]; _tweenedFolders.Add(tf); } tf.targetDeltaVolume = deltaVolume; tf.variationPerSecond = (deltaVolume - tf.folder.DeltaVolume) / time; } } if (!_isTweeningRunning) { EB.Coroutines.Run(TweenVolumes()); } }