using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using HutongGames.PlayMaker;
using HutongGames.PlayMaker.Actions;
using Microsoft.CodeAnalysis;
using Silksong.FsmUtil;
using Silksong.FsmUtil.Actions;
using TuneWeaver.Data;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TuneWeaver")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("0.1.1.0")]
[assembly: AssemblyInformationalVersion("0.1.1+700ca7bdd4a6ebec87e4b7278d748df8ec507656")]
[assembly: AssemblyProduct("TuneWeaver")]
[assembly: AssemblyTitle("TuneWeaver")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/GamingInfinite/TuneWeaver")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 BepInEx
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class BepInAutoPluginAttribute : Attribute
{
public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace BepInEx.Preloader.Core.Patching
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
[Conditional("CodeGeneration")]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class PatcherAutoPluginAttribute : Attribute
{
public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
{
}
}
}
namespace Microsoft.CodeAnalysis
{
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace TuneWeaver
{
[BepInPlugin("io.github.gaminginfinite.tuneweaver", "TuneWeaver", "0.1.1")]
public class TuneWeaverPlugin : BaseUnityPlugin
{
public static ManualLogSource logSource;
public static Harmony harmony;
public static List<SongData> AllSongs = new List<SongData>();
public static Action ActivationCheck = delegate
{
if (ActiveSongData != null)
{
logSource.LogInfo((object)(ActiveSongData.id ?? ""));
}
};
private static SongData? _activeSongData;
public const string Id = "io.github.gaminginfinite.tuneweaver";
public static SongData? ActiveSongData
{
get
{
return _activeSongData;
}
set
{
_activeSongData = value ?? AllSongs.FirstOrDefault((SongData s) => s.isActive);
}
}
public static string Name => "TuneWeaver";
public static string Version => "0.1.1";
private void Awake()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin " + Name + " (io.github.gaminginfinite.tuneweaver) has loaded!"));
logSource = ((BaseUnityPlugin)this).Logger;
harmony = new Harmony("voidbaroness.tuneweaver");
harmony.PatchAll();
}
public static SongData RegisterSong(string id, AudioClip audioClip)
{
SongData songData = new SongData(id, audioClip);
AllSongs.Add(songData);
return songData;
}
}
}
namespace TuneWeaver.Patches
{
[HarmonyPatch(typeof(PlayMakerFSM), "Start")]
public class NeedolinPatch
{
[HarmonyPostfix]
public static void Postfix(PlayMakerFSM __instance)
{
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Expected O, but got Unknown
bool flag = ((Object)__instance).name.Contains("RestBench") && __instance.FsmName == "Bench Control";
if (!((__instance != null && ((Object)__instance).name == "Hero_Hornet(Clone)" && __instance.FsmName == "Silk Specials") || flag))
{
return;
}
Fsm fsm = __instance.Fsm;
Fsm val;
if (flag)
{
RunFSM action2 = FsmUtil.GetAction<RunFSM>(fsm, "Needolin Sub", 0);
val = ((action2 != null) ? action2.fsmTemplateControl.RunFsm : null);
}
else
{
RunFSM action3 = FsmUtil.GetAction<RunFSM>(fsm, "Needolin Sub", 2);
val = ((action3 != null) ? action3.fsmTemplateControl.RunFsm : null);
}
FsmState state = val.GetState("Start Needolin");
FsmState state2 = val.GetState("Start Needolin Benched");
FsmState startNeedolinProper = val.GetState("Start Needolin Proper");
val.GetState("Cancelable");
FsmState state3 = val.GetState("Set Silk Drain Time");
FsmState state4 = val.GetState("Play Needolin");
FsmState state5 = val.GetState("Play Needolin Benched");
FsmState val2 = FsmUtil.AddState(val, "Tune Weaver");
FsmUtil.AddTransition(val2, "FINISHED", startNeedolinProper.Name);
FsmUtil.ChangeTransition(state3, "FINISHED", val2.Name);
FsmBool atBench = val.GetFsmBool("At Bench");
AudioClip defaultHornetNeedolin = (AudioClip)FsmUtil.GetAction<StartNeedolinAudioLoop>(startNeedolinProper, 6).DefaultClip.Value;
FsmString needolinClip = val.GetFsmString("Play Clip");
DelegateAction<Action> val3 = new DelegateAction<Action>
{
Method = delegate(Action action)
{
TuneWeaverPlugin.ActivationCheck();
SongData activeSongData3 = TuneWeaverPlugin.ActiveSongData;
if (activeSongData3 == null)
{
needolinClip.Value = (atBench.Value ? "NeedolinSit Start" : "Needolin Start");
}
else if (activeSongData3.SitStartAnimName == "" && atBench.Value)
{
needolinClip.Value = "NeedolinSit Start";
}
else if (activeSongData3.StandStartAnimName == "" && !atBench.Value)
{
needolinClip.Value = "Needolin Start";
}
else
{
needolinClip.Value = (atBench.Value ? activeSongData3.SitStartAnimName : activeSongData3.StandStartAnimName);
}
action();
}
};
val3.Arg = ((FsmStateAction)val3).Finish;
DelegateAction<Action> val4 = new DelegateAction<Action>
{
Method = delegate(Action action)
{
TuneWeaverPlugin.ActivationCheck();
SongData activeSongData2 = TuneWeaverPlugin.ActiveSongData;
if (activeSongData2 == null)
{
needolinClip.Value = (atBench.Value ? "NeedolinSit Play" : "Needolin Play");
}
else if (activeSongData2.SitAnimName == "" && atBench.Value)
{
needolinClip.Value = "NeedolinSit Play";
}
else if (activeSongData2.StandAnimName == "" && !atBench.Value)
{
needolinClip.Value = "Needolin Play";
}
else
{
needolinClip.Value = (atBench.Value ? activeSongData2.SitAnimName : activeSongData2.StandAnimName);
}
action();
}
};
val4.Arg = ((FsmStateAction)val4).Finish;
FsmUtil.ReplaceAction(state, (FsmStateAction)(object)val3, 6);
FsmUtil.ReplaceAction(state2, (FsmStateAction)(object)val3, 2);
FsmUtil.ReplaceAction(state4, (FsmStateAction)(object)val4, 4);
FsmUtil.ReplaceAction(state5, (FsmStateAction)(object)val4, 2);
FsmUtil.AddLambdaMethod(val2, (Action<Action>)delegate(Action finish)
{
TuneWeaverPlugin.ActivationCheck();
SongData activeSongData = TuneWeaverPlugin.ActiveSongData;
if (activeSongData == null)
{
FsmUtil.GetAction<StartNeedolinAudioLoop>(startNeedolinProper, 6).DefaultClip.Value = (Object)(object)defaultHornetNeedolin;
}
else
{
AudioClip audioClip = activeSongData.audioClip;
FsmUtil.GetAction<StartNeedolinAudioLoop>(startNeedolinProper, 6).DefaultClip.Value = (Object)(object)audioClip;
}
finish();
});
}
}
}
namespace TuneWeaver.Data
{
public class SongData
{
public string id = "";
public bool isActive;
public AudioClip audioClip;
public string StandStartAnimName = "";
public string SitStartAnimName = "";
public string StandAnimName = "";
public string SitAnimName = "";
public SongData(string id, AudioClip audioClip)
{
this.id = id;
this.audioClip = audioClip;
}
public void AssignAnims(string startStand = "", string startSit = "", string playStand = "", string playSit = "")
{
StandStartAnimName = startStand;
StandAnimName = playStand;
SitStartAnimName = startSit;
SitAnimName = playSit;
}
public void Activate()
{
isActive = true;
TuneWeaverPlugin.ActiveSongData = this;
}
public void Deactivate()
{
isActive = false;
TuneWeaverPlugin.ActiveSongData = null;
}
}
}