using Audio; using System.Linq; using static UIBasicSprite; namespace Harmony.AudioObjectPatches { [HarmonyPatch(typeof(EnvironmentAudioManager))] [HarmonyPatch("InitSounds")] public class InitSoundsPatch { public static bool Prefix(EnvironmentAudioManager __instance) { AudioObject[] audioObjectArray = new AudioObject[0 + __instance.mixedBiomeSounds.Length + __instance.forestOnlyBiomeSounds.Length + __instance.snowOnlyBiomeSounds.Length + __instance.desertOnlyBiomeSounds.Length + __instance.wastelandOnlyBiomeSounds.Length + __instance.waterOnlyBiomeSounds.Length + __instance.burnt_forestOnlyBiomeSounds.Length]; int num1 = 0; foreach (AudioObject mixedBiomeSound in __instance.mixedBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds mixedBiomeSound.name: " + mixedBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds mixedBiomeSound.audioClips.Length: " + mixedBiomeSound.audioClips.Length); audioObjectArray[num1++] = mixedBiomeSound; } foreach (AudioObject forestOnlyBiomeSound in __instance.forestOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds forestOnlyBiomeSound.name: " + forestOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds forestOnlyBiomeSound.audioClips.Length: " + forestOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = forestOnlyBiomeSound; } foreach (AudioObject snowOnlyBiomeSound in __instance.snowOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds snowOnlyBiomeSound.name: " + snowOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds snowOnlyBiomeSound.audioClips.Length: " + snowOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = snowOnlyBiomeSound; } foreach (AudioObject desertOnlyBiomeSound in __instance.desertOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds desertOnlyBiomeSound.name: " + desertOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds desertOnlyBiomeSound.audioClips.Length: " + desertOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = desertOnlyBiomeSound; } foreach (AudioObject wastelandOnlyBiomeSound in __instance.wastelandOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds wastelandOnlyBiomeSound.name: " + wastelandOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds wastelandOnlyBiomeSound.audioClips.Length: " + wastelandOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = wastelandOnlyBiomeSound; } foreach (AudioObject waterOnlyBiomeSound in __instance.waterOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds waterOnlyBiomeSound.name: " + waterOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds waterOnlyBiomeSound.audioClips.Length: " + waterOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = waterOnlyBiomeSound; } foreach (AudioObject forestOnlyBiomeSound in __instance.burnt_forestOnlyBiomeSounds) { //Log.Out("AudioObjectPatches-InitSounds forestOnlyBiomeSound.name: " + forestOnlyBiomeSound.name); //Log.Out("AudioObjectPatches-InitSounds forestOnlyBiomeSound.audioClips.Length: " + forestOnlyBiomeSound.audioClips.Length); audioObjectArray[num1++] = forestOnlyBiomeSound; } int num2 = 0; foreach (AudioObject _audioObject in audioObjectArray) { if (RebirthUtilities.ScenarioSkip() && _audioObject.name == "Birds_Loops") continue; //Log.Out("AudioObjectPatches-InitSounds _audioObject NAME: " + _audioObject.name); //Log.Out("AudioObjectPatches-InitSounds validBiomes.Length: " + _audioObject.validBiomes.Length); foreach (int validBiome in _audioObject.validBiomes) { __instance.audioBiomes[validBiome].Add(_audioObject); if (_audioObject.trigger == AudioObject.Trigger.Day7Times || _audioObject.trigger == AudioObject.Trigger.TimeOfDay) ++num2; } _audioObject.Init(); } __instance.fromBiomeLoops = __instance.audioBiomes[(int)__instance.fromBiome]; __instance.toBiomeLoops = __instance.audioBiomes[(int)__instance.toBiome]; __instance.soundsInitDone = true; return false; } } [HarmonyPatch(typeof(AudioObject))] [HarmonyPatch("Init")] public class InitPatch { public static bool Prefix(AudioObject __instance) { foreach (AudioClip audioClip in __instance.audioClips) { if (RebirthUtilities.ScenarioSkip() && (audioClip.name == "a_daybreak_oneshot" || audioClip.name == "a_nightfall_oneshot" || audioClip.name == "a_bloodmoon_oneshot") ) { continue; } if ((UnityEngine.Object)audioClip != (UnityEngine.Object)null) { AudioSource audioSource = UnityEngine.Object.Instantiate(__instance.masterAudioSource); if (__instance.playOrder == AudioObject.PlayOrder.ByValue) { audioSource.transform.parent = EnvironmentAudioManager.Instance.transform; audioSource.loop = true; audioSource.gameObject.SetActive(false); } else audioSource.transform.parent = EnvironmentAudioManager.sourceSounds.transform; audioSource.clip = audioClip; audioSource.name = audioClip.name; //Log.Out("AudioObjectPatches-Init audioSource.name: " + audioSource.name); audioSource.volume = 0.0f; audioSource.outputAudioMixerGroup = __instance.audioMixerGroup; __instance.runtimeAudioSrcs.Add(audioSource); } } __instance.audioClips = (AudioClip[])null; if (__instance.trigger != AudioObject.Trigger.Random) return false; __instance.repeatTime = Time.time + Manager.random.RandomRange(__instance.repeatFreqRange.x, __instance.repeatFreqRange.y); return false; } } }