private void OnAudioManagerApplyMusicCue(On.AudioManager.orig_ApplyMusicCue orig, AudioManager self, MusicCue musicCue, float delayTime, float transitionTime, bool applySnapshot) { var changed = false; var infosFieldInfo = musicCue.GetType() .GetField("channelInfos", BindingFlags.NonPublic | BindingFlags.Instance); var infos = (MusicCue.MusicChannelInfo[])infosFieldInfo.GetValue(musicCue); foreach (var info in infos) { var audioFieldInfo = info.GetType().GetField("clip", BindingFlags.NonPublic | BindingFlags.Instance); var origAudio = (AudioClip)audioFieldInfo.GetValue(info); if (origAudio != null) { var possibleReplace = GetAudioClip(origAudio.name); if (possibleReplace != null) { // Change Audio Clip audioFieldInfo.SetValue(info, possibleReplace); changed = true; } } } if (changed) { infosFieldInfo.SetValue(musicCue, infos); } orig(self, musicCue, delayTime, transitionTime, applySnapshot); }
static void AudioManager_ApplyMusicCue(On.AudioManager.orig_ApplyMusicCue orig, AudioManager self, MusicCue musicCue, float delayTime, float transitionTime, bool applySnapshot) { orig(self, musicCue, delayTime, transitionTime, applySnapshot); }