Files
7d2dXG/Mods/zzz_REBIRTH__Utils/Harmony/Harmony_AudioObject.cs
Nathaniel Cosford 062dfab2cd Patched
2025-05-30 01:04:40 +09:30

126 lines
6.7 KiB
C#

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<AudioSource>(__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;
}
}
}