Files
7d2dXG/Mods/zzz_REBIRTH__Utils/Harmony/Harmony_BackgroundMusicMono.cs
Nathaniel Cosford e06f2bd282 Add All Mods
2025-05-29 23:33:28 +09:30

472 lines
23 KiB
C#

using System.Collections.Generic;
namespace Harmony.BackgroundMusicPatches
{
public class MenuMusic
{
public static AudioType MyMusicType = AudioType.OGGVORBIS;
public static List<int> musicLeft = new List<int>();
[HarmonyPatch(typeof(BackgroundMusicMono))]
[HarmonyPatch("Start")]
public class StartPatch
{
public static bool Prefix(BackgroundMusicMono __instance
)
{
AudioListener[] objectsOfType = UnityEngine.Object.FindObjectsOfType<AudioListener>();
for (int index = 0; index < objectsOfType.Length; ++index)
{
if (objectsOfType[index].enabled)
{
__instance.transform.position = objectsOfType[index].transform.position;
break;
}
}
AudioListener.volume = Mathf.Min(GamePrefs.GetFloat(EnumGamePrefs.OptionsOverallAudioVolumeLevel), 1f);
RebirthVariables.audioSource = __instance.gameObject.AddComponent<AudioSource>();
RebirthVariables.audioSource.volume = RebirthVariables.currentVolume = 0.01f;
RebirthVariables.audioSource.clip = GameManager.Instance.BackgroundMusicClip;
RebirthVariables.audioSource.loop = true;
RebirthVariables.audioSource.Play();
return false;
}
}
[HarmonyPatch(typeof(BackgroundMusicMono), "Update")]
public class Update
{
private static bool Prefix(BackgroundMusicMono __instance)
{
if (GameManager.Instance == null)
{
return true;
}
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.clip.name: " + RebirthVariables.audioSource.clip.name);
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.isPlaying: " + RebirthVariables.audioSource.isPlaying);
if (RebirthVariables.audioSource.clip.name == "menu_music_long_lp")
{
//Log.Out("BackgroundMusicPatches-Update 1");
string strMusicPath = "";
RebirthVariables.audioClip = new AudioClip[23];
for (int i = 1; i <= 23; i++)
{
//Log.Out("BackgroundMusicPatches-Update 1a, i: " + i);
musicLeft.Add(i);
strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Menu" + i;
RebirthVariables.audioClip[i - 1] = DataLoader.LoadAsset<AudioClip>(strMusicPath);
}
strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Scratch";
AudioClip audioClip = DataLoader.LoadAsset<AudioClip>(strMusicPath);
RebirthVariables.audioSource.loop = false;
if (audioClip != null)
{
RebirthVariables.audioSource.Stop();
RebirthVariables.audioSource.clip = audioClip;
RebirthVariables.audioSource.PlayOneShot(audioClip);
}
return false;
}
else if (RebirthVariables.audioSource.clip.name == "Scratch" && RebirthVariables.audioSource.isPlaying == false)
{
//Log.Out("BackgroundMusicPatches-Update 2");
int num = UnityEngine.Random.Range(1, 10);
string strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Rekt" + num;
AudioClip audioClip = DataLoader.LoadAsset<AudioClip>(strMusicPath);
RebirthVariables.audioSource.loop = false;
if (audioClip != null)
{
RebirthVariables.audioSource.clip = audioClip;
RebirthVariables.audioSource.PlayOneShot(audioClip);
}
return false;
}
else if (RebirthVariables.audioSource.clip.name.Contains("Rekt") && RebirthVariables.audioSource.isPlaying == false && !RebirthVariables.audioClipLoaded)
{
//Log.Out("BackgroundMusicPatches-Update 3a, musicLeft.Count: " + musicLeft.Count);
//RebirthVariables.audioClip = new AudioClip[23];
if (musicLeft.Count == 0)
{
for (int i = 1; i <= 23; i++)
{
//Log.Out("BackgroundMusicPatches-Update 3a, i: " + i);
musicLeft.Add(i);
string strMusicPath = "#@modfolder(zzz_REBIRTH__Utils):Resources/FR_Music.unity3d?Menu" + i;
RebirthVariables.audioClip[i - 1] = DataLoader.LoadAsset<AudioClip>(strMusicPath);
}
}
//Log.Out("BackgroundMusicPatches-Update 3b, musicLeft.Count: " + musicLeft.Count);
int num = UnityEngine.Random.Range(1, musicLeft.Count);
RebirthVariables.songIndex = musicLeft[num];
musicLeft.Remove(RebirthVariables.songIndex);
if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null)
{
//Log.Out("BackgroundMusicPatches-Update 3c");
RebirthVariables.audioSource.loop = false;
RebirthVariables.secondsToFadeIn = 1f;
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1];
RebirthVariables.controlOption = MusicControlOption.FadeIn;
RebirthVariables.audioSource.Play();
}
RebirthVariables.audioClipLoaded = true;
}
else if (RebirthVariables.audioSource.clip.name.Contains("Menu") && RebirthVariables.audioSource.volume > 0 && RebirthVariables.audioSource.isPlaying == false && RebirthVariables.musicMode == -1)
{
//Log.Out("BackgroundMusicPatches-Update 4, musicLeft.Count: " + musicLeft.Count);
if (musicLeft.Count == 0)
{
for (int i = 1; i <= 23; i++)
{
musicLeft.Add(i);
}
}
int num = UnityEngine.Random.Range(0, musicLeft.Count - 1);
//Log.Out("BackgroundMusicPatches-Update num: " + num);
RebirthVariables.songIndex = musicLeft[num];
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex);
musicLeft.Remove(RebirthVariables.songIndex);
if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null)
{
RebirthVariables.audioSource.loop = false;
RebirthVariables.secondsToFadeIn = 1f;
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1];
RebirthVariables.controlOption = MusicControlOption.FadeIn;
RebirthVariables.audioSource.Play();
}
}
else if (RebirthVariables.audioSource.clip.name.Contains("Menu") && RebirthVariables.audioSource.volume > 0 && RebirthVariables.audioSource.isPlaying == false && RebirthVariables.musicMode == 1)
{
//Log.Out("BackgroundMusicPatches-Update 5, musicLeft.Count: " + musicLeft.Count);
EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer();
if (primaryPlayer != null)
{
if (musicLeft.Count == 0)
{
for (int i = 1; i <= 23; i++)
{
ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i);
if (progressionValue != null && progressionValue.Level > 0)
{
musicLeft.Add(i);
}
}
}
RebirthVariables.songIndex = -1;
if (musicLeft.Count > 0)
{
int num = UnityEngine.Random.Range(0, musicLeft.Count - 1);
//Log.Out("BackgroundMusicPatches-Update num: " + num);
RebirthVariables.songIndex = musicLeft[num];
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex);
musicLeft.Remove(RebirthVariables.songIndex);
if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null)
{
RebirthVariables.audioSource.loop = false;
RebirthVariables.secondsToFadeIn = 1f;
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1];
RebirthVariables.controlOption = MusicControlOption.FadeIn;
RebirthVariables.audioSource.Play();
}
}
}
}
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.musicMode: " + RebirthVariables.musicMode);
if (GameStats.GetInt(EnumGameStats.GameState) == 1 && !GameManager.Instance.IsPaused())
{
if (RebirthVariables.musicMode == 3 && RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 6");
RebirthVariables.audioSource.Stop();
RebirthVariables.musicMode = -1;
musicLeft.Clear();
}
else if (RebirthVariables.musicMode == 4 && RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 7, BEFORE RebirthVariables.musicVolume: " + RebirthVariables.musicVolume);
RebirthVariables.musicVolume += 0.02f;
if (RebirthVariables.musicVolume > 1f)
{
RebirthVariables.musicVolume = 1f;
}
//Log.Out("BackgroundMusicPatches-Update 7, AFTER RebirthVariables.musicVolume: " + RebirthVariables.musicVolume);
RebirthVariables.musicMode = 1;
}
else if (RebirthVariables.musicMode == 5 && RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 8, BEFORE RebirthVariables.musicVolume: " + RebirthVariables.musicVolume);
RebirthVariables.musicVolume -= 0.02f;
if (RebirthVariables.musicVolume < 0f)
{
RebirthVariables.musicVolume = 0f;
}
//Log.Out("BackgroundMusicPatches-Update 8, AFTER RebirthVariables.musicVolume: " + RebirthVariables.musicVolume);
RebirthVariables.musicMode = 1;
}
else if (RebirthVariables.musicMode == 2 && RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 9");
RebirthVariables.audioSource.Stop();
EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer();
if (primaryPlayer != null)
{
if (musicLeft.Count == 0)
{
for (int i = 1; i <= 23; i++)
{
ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i);
if (progressionValue != null && progressionValue.Level > 0)
{
musicLeft.Add(i);
}
}
}
RebirthVariables.songIndex = -1;
//Log.Out("BackgroundMusicPatches-Update musicLeft.Count: " + musicLeft.Count);
if (musicLeft.Count > 0)
{
/*for (int i = 0; i <= musicLeft.Count - 1; i++)
{
//Log.Out("BackgroundMusicPatches-Update BEFORE musicLeft[" + i + "]: " + musicLeft[i]);
}*/
int num = UnityEngine.Random.Range(0, musicLeft.Count - 1);
//Log.Out("BackgroundMusicPatches-Update num: " + num);
RebirthVariables.songIndex = musicLeft[num];
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex);
musicLeft.Remove(RebirthVariables.songIndex);
/*if (musicLeft.Count > 0)
{
for (int i = 0; i <= musicLeft.Count - 1; i++)
{
//Log.Out("BackgroundMusicPatches-Update AFTER musicLeft[" + i + "]: " + musicLeft[i]);
}
}*/
if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null)
{
RebirthVariables.audioSource.loop = false;
RebirthVariables.secondsToFadeIn = 1f;
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1];
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.audioSource.clip.name: " + RebirthVariables.audioSource.clip.name);
RebirthVariables.controlOption = MusicControlOption.FadeIn;
RebirthVariables.audioSource.Play();
}
}
RebirthVariables.musicMode = 1;
}
}
else if (RebirthVariables.musicMode == 1 && !RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 10");
EntityPlayerLocal primaryPlayer = GameManager.Instance.World.GetPrimaryPlayer();
//Log.Out("BackgroundMusicPatches-Update BEFORE musicLeft.Count: " + musicLeft.Count);
musicLeft.Clear();
//Log.Out("BackgroundMusicPatches-Update AFTER musicLeft.Count: " + musicLeft.Count);
if (primaryPlayer != null)
{
//Log.Out("BackgroundMusicPatches-Update 10a");
if (musicLeft.Count == 0)
{
//Log.Out("BackgroundMusicPatches-Update 10b");
for (int i = 1; i <= 23; i++)
{
ProgressionValue progressionValue = primaryPlayer.Progression.GetProgressionValue("FuriousRamsayAchievementCassette" + i);
if (progressionValue != null && progressionValue.Level > 0)
{
//Log.Out("BackgroundMusicPatches-Update 10c, i: " + i);
musicLeft.Add(i);
}
}
}
RebirthVariables.songIndex = -1;
if (musicLeft.Count > 0)
{
//Log.Out("BackgroundMusicPatches-Update 10d, musicLeft.Count: " + musicLeft.Count);
int num = UnityEngine.Random.Range(0, musicLeft.Count - 1);
//Log.Out("BackgroundMusicPatches-Update num: " + num);
RebirthVariables.songIndex = musicLeft[num];
//Log.Out("BackgroundMusicPatches-Update RebirthVariables.songIndex: " + RebirthVariables.songIndex);
musicLeft.Remove(RebirthVariables.songIndex);
//Log.Out("BackgroundMusicPatches-Update 6a, RebirthVariables.songIndex: " + RebirthVariables.songIndex);
if (RebirthVariables.audioClip[RebirthVariables.songIndex - 1] != null)
{
//Log.Out("BackgroundMusicPatches-Update 6b, SONG FOUND");
RebirthVariables.audioSource.loop = false;
RebirthVariables.secondsToFadeIn = 1f;
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.audioSource.clip = RebirthVariables.audioClip[RebirthVariables.songIndex - 1];
RebirthVariables.controlOption = MusicControlOption.FadeIn;
RebirthVariables.audioSource.Play();
}
}
}
}
else if (RebirthVariables.musicMode == 0 && RebirthVariables.audioSource.isPlaying)
{
//Log.Out("BackgroundMusicPatches-Update 11");
RebirthVariables.secondsToFadeOut = 1f;
RebirthVariables.controlOption = MusicControlOption.FadeOut;
}
else
{
if (RebirthVariables.audioSource.isPlaying && RebirthVariables.musicMode == -1)
{
//Log.Out("BackgroundMusicPatches-Update 12");
RebirthVariables.secondsToFadeOut = 10f;
RebirthVariables.controlOption = MusicControlOption.FadeOut;
}
}
}
if (RebirthVariables.controlOption == MusicControlOption.FadeIn)
{
//Log.Out("BackgroundMusicPatches-Update 13, RebirthVariables.currentVolume: " + RebirthVariables.currentVolume);
//Log.Out("BackgroundMusicPatches-Update 13, musicLeft: " + musicLeft.Count);
if (RebirthVariables.currentVolume < 1f)
{
RebirthVariables.currentVolume += Time.deltaTime / RebirthVariables.secondsToFadeIn;
}
}
else if (RebirthVariables.controlOption == MusicControlOption.FadeOut && RebirthVariables.currentVolume > 0f)
{
//Log.Out("BackgroundMusicPatches-Update 14");
RebirthVariables.currentVolume -= Time.deltaTime / RebirthVariables.secondsToFadeOut;
}
RebirthVariables.currentVolume = Mathf.Clamp01(RebirthVariables.currentVolume);
float volume = Mathf.Clamp01(GamePrefs.GetFloat(EnumGamePrefs.OptionsMenuMusicVolumeLevel) * RebirthVariables.currentVolume);
//if (volume == 0f && RebirthVariables.musicMode == 1)
if (RebirthVariables.musicMode == 1)
{
volume = Mathf.Clamp01(RebirthVariables.musicVolume) * RebirthVariables.currentVolume;
}
//Log.Out("BackgroundMusicPatches-Update volume: " + volume);
RebirthVariables.audioSource.volume = volume; // Mathf.Clamp01(GamePrefs.GetFloat(EnumGamePrefs.OptionsMenuMusicVolumeLevel) * RebirthVariables.currentVolume);
if (RebirthVariables.audioSource.isPlaying && RebirthVariables.audioSource.volume <= 0f && RebirthVariables.musicMode != 1)
{
//Log.Out("BackgroundMusicPatches-Update STOP");
RebirthVariables.audioSource.Stop();
return false;
}
if (!RebirthVariables.audioSource.isPlaying && RebirthVariables.audioSource.volume > 0f)
{
//Log.Out("BackgroundMusicPatches-Update 15, RebirthVariables.musicMode: " + RebirthVariables.musicMode);
if (RebirthVariables.musicMode == 1)
{
//Log.Out("BackgroundMusicPatches-Update 15a");
if (RebirthVariables.songIndex > -1)
{
//Log.Out("BackgroundMusicPatches-Update 15b");
RebirthVariables.audioSource.Play();
}
else
{
//Log.Out("BackgroundMusicPatches-Update 15c");
RebirthVariables.musicMode = 0;
}
}
else
{
//Log.Out("BackgroundMusicPatches-Update 15d");
if (RebirthVariables.musicMode == 3)
{
RebirthVariables.musicMode = -1;
RebirthVariables.songIndex = -1;
musicLeft.Clear();
return false;
}
RebirthVariables.audioSource.Play();
}
}
return false;
}
private static List<int> musicLeft = new List<int>();
}
}
}