Decompiled source of LCSimonTendoPlaylistsMod v1.1.0

LCSimonTendoPlaylistsMod.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using LCSimonTendoPlaylistsMod.Patches;
using Microsoft.CodeAnalysis;
using STSharedAudioLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("LCSimonTendoPlaylistsMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Creates playlists for objects that get sounds from multiple mods of mine.")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyInformationalVersion("1.1.0")]
[assembly: AssemblyProduct("LCSimonTendoPlaylistsMod")]
[assembly: AssemblyTitle("LCSimonTendoPlaylistsMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LCSimonTendoPlaylistsMod
{
	public class Configs
	{
		public static ConfigEntry<bool> Examples;

		public Configs(ConfigFile cfg)
		{
			Examples = cfg.Bind<bool>("Examples", "Add Extra Songs", false, "If true, adds some Boombox songs to the Disco Ball and Record Player, to demonstrate how this mod and STSharedAudioLib work.");
		}
	}
	public class PlaylistsManager : MonoBehaviour
	{
		private static ManualLogSource Logger;

		public static PlaylistsManager Instance;

		public AudioSource audio2D;

		private Coroutine fadeOutMusicCoroutine;

		private void Awake()
		{
			Instance = this;
			Logger = Plugin.Logger;
			audio2D = ((Component)this).gameObject.AddComponent<AudioSource>();
			audio2D.playOnAwake = false;
			audio2D.dopplerLevel = 0f;
			audio2D.spatialBlend = 0f;
		}

		public void StartLoadingMusic()
		{
			if (!((Object)(object)StartOfRoundPatch.LoadingScreenPlaylist == (Object)null) && StartOfRoundPatch.LoadingScreenPlaylist.weightedClipsList != null && StartOfRoundPatch.LoadingScreenPlaylist.weightedClipsList.Count != 0)
			{
				if (fadeOutMusicCoroutine != null)
				{
					((MonoBehaviour)this).StopCoroutine(fadeOutMusicCoroutine);
					fadeOutMusicCoroutine = null;
				}
				if (audio2D.isPlaying)
				{
					audio2D.Stop();
				}
				audio2D.clip = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.LoadingScreenPlaylist, true);
				audio2D.volume = 1f;
				audio2D.Play();
			}
		}

		public void StopLoadingMusic()
		{
			if (fadeOutMusicCoroutine == null)
			{
				fadeOutMusicCoroutine = ((MonoBehaviour)this).StartCoroutine(FadeOutMusic());
			}
		}

		private IEnumerator FadeOutMusic()
		{
			while (audio2D.volume > 0.1f)
			{
				AudioSource obj = audio2D;
				obj.volume -= Time.deltaTime * 0.067f;
				yield return null;
			}
			audio2D.volume = 0f;
			audio2D.Stop();
			fadeOutMusicCoroutine = null;
		}
	}
	[BepInPlugin("LCSimonTendoPlaylistsMod", "LCSimonTendoPlaylistsMod", "1.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Logger;

		public static Configs MyConfig { get; internal set; }

		private void Awake()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Plugin LCSimonTendoPlaylistsMod is loaded!");
			new Harmony("LCSimonTendoPlaylistsMod").PatchAll();
			MyConfig = new Configs(((BaseUnityPlugin)this).Config);
			if (Configs.Examples.Value)
			{
				Logger.LogInfo((object)"Config [Examples] is set to TRUE. A few boombox songs will be added to the Disco Ball and Record Player.");
			}
		}

		public static void PrintNewAudioClip(GameObject objectPlaying, AudioClip clipPlaying)
		{
			if ((Object)(object)objectPlaying == (Object)null)
			{
				Logger.LogWarning((object)"PrintNewAudioClip() received null: OBJECT");
			}
			else if ((Object)(object)clipPlaying == (Object)null)
			{
				Logger.LogWarning((object)"PrintNewAudioClip() received null: CLIP");
			}
			else
			{
				Logger.LogDebug((object)(((Object)objectPlaying).name + " - now playing: " + ((Object)clipPlaying).name));
			}
		}

		public static GameObject SearchForObject(string name, Transform parentTransform = null)
		{
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			Logger.LogDebug((object)("Starting search for " + name));
			GameObject[] array = Object.FindObjectsByType<GameObject>((FindObjectsSortMode)0);
			GameObject[] array2 = array;
			GameObject result;
			foreach (GameObject val in array2)
			{
				if (((Object)val).name == name)
				{
					result = val;
					Logger.LogDebug((object)("Found existing " + ((Object)val).name + ", using as parent."));
					return result;
				}
			}
			result = new GameObject(name);
			if ((Object)(object)parentTransform != (Object)null)
			{
				result.transform.SetParent(parentTransform, false);
			}
			Logger.LogDebug((object)("Did not find existing " + name + ", instantiating new " + ((Object)result).name));
			return result;
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "LCSimonTendoPlaylistsMod";

		public const string PLUGIN_NAME = "LCSimonTendoPlaylistsMod";

		public const string PLUGIN_VERSION = "1.1.0";
	}
}
namespace LCSimonTendoPlaylistsMod.Patches
{
	public class AnimatedItemPatch
	{
		[HarmonyPatch]
		public class NewAnimatedItem
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(AnimatedItem), "Start")]
			public static void StartPostfix(AnimatedItem __instance)
			{
				if (((Object)((Component)__instance).gameObject).name == "OldPhone(Clone)")
				{
					__instance.grabAudio = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.OldPhonePlaylist, false);
					Plugin.PrintNewAudioClip(((Component)__instance).gameObject, __instance.grabAudio);
				}
				else if (((Object)((Component)__instance).gameObject).name == "RobotToy(Clone)")
				{
					__instance.grabAudio = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.ToyRobotPlaylist, false);
					Plugin.PrintNewAudioClip(((Component)__instance).gameObject, __instance.grabAudio);
				}
			}
		}
	}
	public class AnimatedObjectTriggerPatch
	{
		[HarmonyPatch]
		public class NewAnimatedObjectTrigger
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(AnimatedObjectTrigger), "PlayAudio")]
			public static void PlayAudioPrefix(AnimatedObjectTrigger __instance)
			{
				Transform parent = ((Component)__instance).gameObject.transform.parent;
				if (((parent != null) ? ((Object)parent).name : null) == "RecordPlayerContainer(Clone)" && !__instance.thisAudioSource.isPlaying)
				{
					AudioClip playWhileTrue = SharedAudioMethods.AudioClipGetNextInAudioList(__instance.playWhileTrue, StartOfRoundPatch.RecordPlayerPlaylist, false);
					__instance.playWhileTrue = playWhileTrue;
					Plugin.PrintNewAudioClip(((Component)((Component)__instance).transform.parent).gameObject, __instance.playWhileTrue);
				}
				Transform parent2 = ((Component)__instance).gameObject.transform.parent;
				if (((parent2 != null) ? ((Object)parent2).name : null) == "PlushiePJManContainer(Clone)")
				{
					__instance.boolFalseAudios[0] = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.PlushiePlaylist, false);
					Plugin.PrintNewAudioClip(((Component)((Component)__instance).transform.parent).gameObject, __instance.boolFalseAudios[0]);
				}
				Transform parent3 = ((Component)__instance).gameObject.transform.parent;
				if (((parent3 != null) ? ((Object)parent3).name : null) == "PumpkinUnlockableContainer(Clone)")
				{
					__instance.boolFalseAudios[0] = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.PumpkinPlaylist, false);
					Plugin.PrintNewAudioClip(((Component)((Component)__instance).transform.parent).gameObject, __instance.boolFalseAudios[0]);
				}
			}
		}
	}
	public class CozyLightsPatch
	{
		[HarmonyPatch]
		public class NewCozyLights
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(CozyLights), "SetAudio")]
			public static void SetAudioPrefix(CozyLights __instance, bool ___cozyLightsOn)
			{
				Transform parent = ((Component)__instance).gameObject.transform.parent;
				if (((parent != null) ? ((Object)parent).name : null) == "DiscoBallContainer(Clone)" && ___cozyLightsOn && !__instance.turnOnAudio.isPlaying)
				{
					AudioClip clip = SharedAudioMethods.AudioClipGetNextInAudioList(__instance.turnOnAudio.clip, StartOfRoundPatch.DiscoBallPlaylist, false);
					__instance.turnOnAudio.clip = clip;
					Plugin.PrintNewAudioClip(((Component)((Component)__instance).transform.parent).gameObject, __instance.turnOnAudio.clip);
				}
			}
		}
	}
	public class RoundManagerPatch
	{
		[HarmonyPatch(typeof(StartOfRound), "SceneManager_OnLoad")]
		public class NewStartOfRoundSceneManagerOnLoad
		{
			[HarmonyPrefix]
			public static void StartLoadingScreenMusic()
			{
				if ((Object)(object)PlaylistsManager.Instance != (Object)null)
				{
					PlaylistsManager.Instance.StartLoadingMusic();
				}
			}
		}

		[HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")]
		public class NewRoundManagerFinishGeneratingNewLevelClientRpc
		{
			[HarmonyPostfix]
			public static void StopLoadingScreenMusic()
			{
				if ((Object)(object)PlaylistsManager.Instance != (Object)null)
				{
					PlaylistsManager.Instance.StopLoadingMusic();
				}
			}
		}
	}
	public class ShipBuildModeManagerPatch
	{
		[HarmonyPatch]
		public class NewShipBuildModeManager
		{
			[HarmonyPrefix]
			[HarmonyPatch(typeof(ShipBuildModeManager), "PlaceShipObject")]
			public static void PlaceShipObjectPrefix(ref PlaceableShipObject placeableObject)
			{
				Transform parent = ((Component)placeableObject).gameObject.transform.parent;
				if (((parent != null) ? ((Object)parent).name : null) == "PlushiePJManContainer(Clone)")
				{
					placeableObject.placeObjectSFX = SharedAudioMethods.AudioClipGetRandomByWeight(StartOfRoundPatch.PlushiePlaylist, false);
					Plugin.PrintNewAudioClip(((Component)((Component)placeableObject).transform.parent).gameObject, placeableObject.placeObjectSFX);
				}
			}
		}
	}
	public class StartOfRoundPatch
	{
		[HarmonyPatch]
		public class NewStartOfRound
		{
			[HarmonyPostfix]
			[HarmonyPatch(typeof(StartOfRound), "Awake")]
			public static void AwakePostfix(StartOfRound __instance)
			{
				//IL_0401: Unknown result type (might be due to invalid IL or missing references)
				//IL_0407: Expected O, but got Unknown
				if (!alreadyAddedToOrigins)
				{
					alreadyAddedToOrigins = true;
					foreach (Item items in __instance.allItemsList.itemsList)
					{
						if (((Object)items).name == "Phone")
						{
							OldPhonePlaylist = SharedAudioMethods.AudioListCreateNew(items.spawnPrefab, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(items.spawnPrefab.GetComponent<AnimatedItem>().grabAudio, OldPhonePlaylist, true, 100, false);
						}
						else if (((Object)items).name == "RobotToy")
						{
							ToyRobotPlaylist = SharedAudioMethods.AudioListCreateNew(items.spawnPrefab, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(items.spawnPrefab.GetComponent<AnimatedItem>().grabAudio, ToyRobotPlaylist, true, 100, false);
						}
					}
					foreach (UnlockableItem unlockable in __instance.unlockablesList.unlockables)
					{
						if (unlockable.unlockableName == "Disco Ball")
						{
							DiscoBallPlaylist = SharedAudioMethods.AudioListCreateNew(unlockable.prefabObject, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(((Component)unlockable.prefabObject.transform.GetChild(0)).GetComponent<CozyLights>().turnOnAudio.clip, DiscoBallPlaylist, false, 100, false);
							if (Configs.Examples.Value)
							{
								SharedAudioMethods.AudioClipAddNew(__instance.allItemsList.itemsList[1].spawnPrefab.GetComponent<BoomboxItem>().musicAudios[2], DiscoBallPlaylist, true, 100, false);
								SharedAudioMethods.AudioClipAddNew(__instance.allItemsList.itemsList[1].spawnPrefab.GetComponent<BoomboxItem>().musicAudios[4], DiscoBallPlaylist, true, 100, false);
							}
						}
						else if (unlockable.unlockableName == "Record player")
						{
							RecordPlayerPlaylist = SharedAudioMethods.AudioListCreateNew(unlockable.prefabObject, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(((Component)unlockable.prefabObject.transform.GetChild(3)).GetComponent<AnimatedObjectTrigger>().playWhileTrue, RecordPlayerPlaylist, true, 100, false);
							if (Configs.Examples.Value)
							{
								SharedAudioMethods.AudioClipAddNew(__instance.allItemsList.itemsList[1].spawnPrefab.GetComponent<BoomboxItem>().musicAudios[0], RecordPlayerPlaylist, true, 100, false);
								SharedAudioMethods.AudioClipAddNew(__instance.allItemsList.itemsList[1].spawnPrefab.GetComponent<BoomboxItem>().musicAudios[1], RecordPlayerPlaylist, true, 100, false);
								SharedAudioMethods.AudioClipAddNew(__instance.allItemsList.itemsList[1].spawnPrefab.GetComponent<BoomboxItem>().musicAudios[3], RecordPlayerPlaylist, true, 100, false);
							}
						}
						else if (unlockable.unlockableName == "Plushie pajama man")
						{
							PlushiePlaylist = SharedAudioMethods.AudioListCreateNew(unlockable.prefabObject, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(((Component)unlockable.prefabObject.transform.GetChild(2)).GetComponent<AnimatedObjectTrigger>().boolFalseAudios[0], PlushiePlaylist, true, 100, false);
						}
						else if (unlockable.unlockableName == "JackOLantern")
						{
							PumpkinPlaylist = SharedAudioMethods.AudioListCreateNew(unlockable.prefabObject, true, "LCSimonTendoPlaylistsMod", 100);
							SharedAudioMethods.AudioClipAddNew(((Component)unlockable.prefabObject.transform.GetChild(2)).GetComponent<AnimatedObjectTrigger>().boolFalseAudios[0], PumpkinPlaylist, true, 100, false);
						}
					}
				}
				GameObject val = Plugin.SearchForObject("SimonTendoManagers", ((Component)__instance).transform.parent);
				GameObject val2 = new GameObject("LCSimonTendoPlaylistsMod");
				val2.transform.SetParent(val.transform);
				val2.AddComponent<PlaylistsManager>();
				GenericPlaylistsContainer = SharedAudioMethods.GetSharedAudioComponent(val2, true, (string)null, 0, false);
				LoadingScreenPlaylist = SharedAudioMethods.AudioListCreateNew(GenericPlaylistsContainer, true, "LCSimonTendoPlaylistsMod - Loading Screen", 100);
			}
		}

		private static bool alreadyAddedToOrigins;

		public static AudioList OldPhonePlaylist;

		public static AudioList ToyRobotPlaylist;

		public static AudioList DiscoBallPlaylist;

		public static AudioList RecordPlayerPlaylist;

		public static AudioList PlushiePlaylist;

		public static AudioList PumpkinPlaylist;

		public static SharedAudioComponent GenericPlaylistsContainer;

		public static AudioList LoadingScreenPlaylist;
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}