using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using FMOD.Studio;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using SuperFantasyKingdom;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("MusicFader")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f5d90497fc96d65a7d30b7c0e188b60f040385fd")]
[assembly: AssemblyProduct("Music Fader")]
[assembly: AssemblyTitle("MusicFader")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[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 MusicFader
{
[BepInPlugin("ownly.musicfader", "Music Fader", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
private void Awake()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID).PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Music Fader loaded");
}
}
[HarmonyPatch(typeof(MusicManager), "Update")]
internal static class Patch_Crossfade
{
private const float Duration = 5f;
private const float VanillaDuration = 1.5f;
private static readonly FieldRef<MusicManager, bool> CityMusic = AccessTools.FieldRefAccess<MusicManager, bool>("m_CityMusic");
private static readonly FieldRef<MusicManager, float> FadeBetween = AccessTools.FieldRefAccess<MusicManager, float>("m_MusicFadeBetween");
private static bool s_WasCity = true;
private static float s_LastFade;
private static void Postfix(MusicManager __instance)
{
bool flag = CityMusic.Invoke(__instance);
float num = FadeBetween.Invoke(__instance);
if (flag != s_WasCity)
{
s_WasCity = flag;
num -= s_LastFade;
FadeBetween.Invoke(__instance) = num;
}
else if (num < s_LastFade)
{
num = s_LastFade - (s_LastFade - num) * 0.3f;
FadeBetween.Invoke(__instance) = num;
}
s_LastFade = num;
}
}
[HarmonyPatch(typeof(MusicManager), "OnCombatStart")]
internal static class Patch_StartInTown
{
private static readonly FieldRef<MusicManager, bool> CityMusic = AccessTools.FieldRefAccess<MusicManager, bool>("m_CityMusic");
private static readonly FieldRef<MusicManager, float> FadeBetween = AccessTools.FieldRefAccess<MusicManager, float>("m_MusicFadeBetween");
private static readonly FieldRef<MusicManager, float> CombatFadeTimer = AccessTools.FieldRefAccess<MusicManager, float>("m_CombatMusicFadeTimer");
private static readonly FieldRef<MusicManager, EventInstance> CombatMusic = AccessTools.FieldRefAccess<MusicManager, EventInstance>("m_CombatMusic");
private static void Postfix(MusicManager __instance)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
if (CityMusic.Invoke(__instance))
{
((EventInstance)(ref CombatMusic.Invoke(__instance))).setVolume(0f);
CombatFadeTimer.Invoke(__instance) = 0f;
FadeBetween.Invoke(__instance) = 0f;
}
}
}
}