public static void StopSound(HandleVector <int> .Handle handle) { if (!((UnityEngine.Object)Get() == (UnityEngine.Object)null)) { Sound data = Get().sounds.GetData(handle); if (data.IsPlaying) { data.ev.stop(STOP_MODE.ALLOWFADEOUT); data.ev.release(); SoundDescription soundEventDescription = KFMOD.GetSoundEventDescription(data.path); SoundDescription.Parameter[] parameters = soundEventDescription.parameters; for (int i = 0; i < parameters.Length; i++) { SoundDescription.Parameter parameter = parameters[i]; LoopingSoundParameterUpdater value = null; if (Get().parameterUpdaters.TryGetValue(parameter.name, out value)) { LoopingSoundParameterUpdater.Sound sound = default(LoopingSoundParameterUpdater.Sound); sound.ev = data.ev; sound.path = data.path; sound.description = soundEventDescription; sound.transform = data.transform; LoopingSoundParameterUpdater.Sound sound2 = sound; value.Remove(sound2); } } } Get().sounds.Free(handle); } }
private static void CollectSoundDescriptions() { Bank[] array = null; RuntimeManager.StudioSystem.getBankList(out array); Bank[] array2 = array; for (int i = 0; i < array2.Length; i++) { Bank bank = array2[i]; bank.getEventList(out EventDescription[] array3); for (int j = 0; j < array3.Length; j++) { EventDescription eventDescription = array3[j]; eventDescription.getPath(out string path); HashedString key = path; SoundDescription value = default(SoundDescription); value.path = path; float distance = 0f; eventDescription.getMaximumDistance(out distance); if (distance == 0f) { distance = 60f; } value.falloffDistanceSq = distance * distance; List <OneShotSoundParameterUpdater> list = new List <OneShotSoundParameterUpdater>(); int count = 0; eventDescription.getParameterCount(out count); SoundDescription.Parameter[] array4 = new SoundDescription.Parameter[count]; for (int k = 0; k < count; k++) { eventDescription.getParameterByIndex(k, out PARAMETER_DESCRIPTION parameter); string text = parameter.name; array4[k] = new SoundDescription.Parameter { name = new HashedString(text), idx = k }; OneShotSoundParameterUpdater value2 = null; if (parameterUpdaters.TryGetValue(text, out value2)) { list.Add(value2); } } value.parameters = array4; value.oneShotParameterUpdaters = list.ToArray(); soundDescriptions[key] = value; } } }
public void RenderEveryTick(float dt) { ListPool <Sound, LoopingSoundManager> .PooledList pooledList = ListPool <Sound, LoopingSoundManager> .Allocate(); ListPool <int, LoopingSoundManager> .PooledList pooledList2 = ListPool <int, LoopingSoundManager> .Allocate(); ListPool <int, LoopingSoundManager> .PooledList pooledList3 = ListPool <int, LoopingSoundManager> .Allocate(); List <Sound> dataList = sounds.GetDataList(); bool flag = Time.timeScale == 0f; SoundCuller soundCuller = CameraController.Instance.soundCuller; for (int i = 0; i < dataList.Count; i++) { Sound sound = dataList[i]; if ((UnityEngine.Object)sound.transform != (UnityEngine.Object)null) { sound.pos = sound.transform.GetPosition(); if ((UnityEngine.Object)sound.animController != (UnityEngine.Object)null) { Vector3 offset = sound.animController.Offset; sound.pos.x += offset.x; sound.pos.y += offset.y; } } bool flag2 = !sound.IsCullingEnabled || (sound.ShouldCameraScalePosition && soundCuller.IsAudible(sound.pos, sound.falloffDistanceSq)) || soundCuller.IsAudibleNoCameraScaling(sound.pos, sound.falloffDistanceSq); bool isPlaying = sound.IsPlaying; if (flag2) { pooledList.Add(sound); if (!isPlaying) { SoundDescription soundDescription = GetSoundDescription(sound.path); sound.ev = KFMOD.CreateInstance(soundDescription.path); dataList[i] = sound; pooledList2.Add(i); } } else if (isPlaying) { pooledList3.Add(i); } } LoopingSoundParameterUpdater.Sound sound2; foreach (int item in pooledList2) { Sound value = dataList[item]; SoundDescription soundDescription2 = GetSoundDescription(value.path); value.ev.setPaused(flag && value.ShouldPauseOnGamePaused); Vector2 v = value.pos; if (value.ShouldCameraScalePosition) { v = SoundEvent.GetCameraScaledPosition(v); } value.ev.set3DAttributes(RuntimeUtils.To3DAttributes(v)); value.ev.start(); value.flags |= Sound.Flags.PLAYING; if (value.firstParameter != HashedString.Invalid) { value.ev.setParameterValueByIndex(soundDescription2.GetParameterIdx(value.firstParameter), value.firstParameterValue); } if (value.secondParameter != HashedString.Invalid) { value.ev.setParameterValueByIndex(soundDescription2.GetParameterIdx(value.secondParameter), value.secondParameterValue); } sound2 = default(LoopingSoundParameterUpdater.Sound); sound2.ev = value.ev; sound2.path = value.path; sound2.description = soundDescription2; sound2.transform = value.transform; LoopingSoundParameterUpdater.Sound sound3 = sound2; SoundDescription.Parameter[] parameters = soundDescription2.parameters; for (int j = 0; j < parameters.Length; j++) { SoundDescription.Parameter parameter = parameters[j]; LoopingSoundParameterUpdater value2 = null; if (parameterUpdaters.TryGetValue(parameter.name, out value2)) { value2.Add(sound3); } } dataList[item] = value; } pooledList2.Recycle(); foreach (int item2 in pooledList3) { Sound value3 = dataList[item2]; SoundDescription soundDescription3 = GetSoundDescription(value3.path); sound2 = default(LoopingSoundParameterUpdater.Sound); sound2.ev = value3.ev; sound2.path = value3.path; sound2.description = soundDescription3; sound2.transform = value3.transform; LoopingSoundParameterUpdater.Sound sound4 = sound2; SoundDescription.Parameter[] parameters2 = soundDescription3.parameters; for (int k = 0; k < parameters2.Length; k++) { SoundDescription.Parameter parameter2 = parameters2[k]; LoopingSoundParameterUpdater value4 = null; if (parameterUpdaters.TryGetValue(parameter2.name, out value4)) { value4.Remove(sound4); } } if (value3.ShouldCameraScalePosition) { value3.ev.stop(STOP_MODE.IMMEDIATE); } else { value3.ev.stop(STOP_MODE.ALLOWFADEOUT); } value3.flags &= ~Sound.Flags.PLAYING; value3.ev.release(); dataList[item2] = value3; } pooledList3.Recycle(); float velocityScale = TuningData <Tuning> .Get().velocityScale; foreach (Sound item3 in pooledList) { Sound current3 = item3; ATTRIBUTES_3D attributes = SoundEvent.GetCameraScaledPosition(current3.pos).To3DAttributes(); attributes.velocity = (current3.velocity * velocityScale).ToFMODVector(); current3.ev.set3DAttributes(attributes); } foreach (KeyValuePair <HashedString, LoopingSoundParameterUpdater> parameterUpdater in parameterUpdaters) { parameterUpdater.Value.Update(dt); } pooledList.Recycle(); }