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.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PutItBack.Extensions;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("PutItBack")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.1.1.0")]
[assembly: AssemblyInformationalVersion("1.1.1+0c511421ed110e4a1f34753613ad7163a213647b")]
[assembly: AssemblyProduct("Put It Back")]
[assembly: AssemblyTitle("PutItBack")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.1.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;
}
}
}
internal sealed class ConfigurationManagerAttributes
{
public delegate void CustomHotkeyDrawerFunc(ConfigEntryBase setting, ref bool isCurrentlyAcceptingInput);
public bool? ShowRangeAsPercent;
public Action<ConfigEntryBase> CustomDrawer;
public CustomHotkeyDrawerFunc CustomHotkeyDrawer;
public bool? Browsable;
public string Category;
public object DefaultValue;
public bool? HideDefaultButton;
public bool? HideSettingName;
public string Description;
public string DispName;
public int? Order;
public bool? ReadOnly;
public bool? IsAdvanced;
public Func<object, string> ObjToStr;
public Func<string, object> StrToObj;
}
namespace PutItBack
{
public class HeldCardData
{
public int BinderPageIndex { get; set; }
public int BinderCardSlotIndex { get; set; }
public Transform Transform { get; set; }
public bool SortingChanged { get; set; }
}
[BepInPlugin("PutItBack", "Put It Back", "1.1.1")]
public class Plugin : BaseUnityPlugin
{
internal static ManualLogSource Logger;
private readonly Harmony m_Harmony = new Harmony("PutItBack");
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Settings.Instance.Load(this);
m_Harmony.PatchAll();
Logger.LogInfo((object)"Plugin PutItBack v:1.1.1 by GhostNarwhal is loaded!");
}
private void OnDestroy()
{
m_Harmony.UnpatchSelf();
Logger.LogInfo((object)"Plugin Put It Back is unloaded!");
}
}
public class PutItBack : CSingleton<PutItBack>
{
private bool m_IsReturningCard;
private List<HeldCardData> m_HeldCardDataList = new List<HeldCardData>();
private ECollectionSortingType m_SortingType;
private bool m_EnabledWithBinderOpen;
private void Awake()
{
Settings.Instance.isPutItBackEnabled.SettingChanged += delegate
{
((Behaviour)this).enabled = Settings.Instance.isPutItBackEnabled.Value;
};
m_EnabledWithBinderOpen = Settings.Instance.enableWithBinderClosed.Value;
Settings.Instance.enableWithBinderClosed.SettingChanged += delegate
{
m_EnabledWithBinderOpen = Settings.Instance.enableWithBinderClosed.Value;
};
}
private void OnDisable()
{
m_HeldCardDataList.Clear();
}
public void InteractionPlayerControllerOnUpdate(InteractionPlayerController interactionPlayerController)
{
if (!((Behaviour)this).enabled || interactionPlayerController.m_IsViewCardAlbumMode || interactionPlayerController.m_CurrentCardCompartment != null || !m_EnabledWithBinderOpen)
{
return;
}
_ = interactionPlayerController.m_CurrentHoldingCard3dList;
if (Input.GetMouseButtonDown(0))
{
ReturnLastCardToBinder(delegate
{
interactionPlayerController.ExitHoldCardMode();
});
}
}
public void CollectionBinderFlipAnimCtrlOnUpdate(CollectionBinderFlipAnimCtrl collectionBinderFlipAnimCtrl)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
if (((Behaviour)this).enabled && collectionBinderFlipAnimCtrl.m_IsBookOpen)
{
m_SortingType = collectionBinderFlipAnimCtrl.m_SortingType;
if (UnityInput.Current.mouseScrollDelta.y > 0f && CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count > 0)
{
collectionBinderFlipAnimCtrl.OnMouseButtonUp();
}
if (UnityInput.Current.mouseScrollDelta.y < 0f)
{
collectionBinderFlipAnimCtrl.OnRightMouseButtonUp();
}
}
}
public bool OnRightMouseButtonUp(CollectionBinderFlipAnimCtrl collectionBinderFlipAnimCtrl)
{
if (((Behaviour)this).enabled && !m_IsReturningCard)
{
InteractableCard3d currentRaycastedInteractableCard3d = collectionBinderFlipAnimCtrl.m_CurrentRaycastedInteractableCard3d;
bool? flag = ((currentRaycastedInteractableCard3d != null) ? new bool?(currentRaycastedInteractableCard3d.m_Card3dUI.m_CardUI.GetCardData().IsOwned()) : null);
if (!flag.HasValue || !flag.Value)
{
return false;
}
if (InteractionPlayerController.HasEnoughSlotToHoldCard())
{
List<HeldCardData> heldCardDataList = m_HeldCardDataList;
HeldCardData obj = new HeldCardData
{
BinderCardSlotIndex = collectionBinderFlipAnimCtrl.m_CurrentRaycastedCardIndex,
BinderPageIndex = collectionBinderFlipAnimCtrl.m_Index
};
InteractableCard3d currentRaycastedInteractableCard3d2 = collectionBinderFlipAnimCtrl.m_CurrentRaycastedInteractableCard3d;
obj.Transform = ((currentRaycastedInteractableCard3d2 != null) ? ((Component)currentRaycastedInteractableCard3d2).transform : null);
obj.SortingChanged = false;
heldCardDataList.Add(obj);
}
}
return true;
}
public bool OnLeftMouseButtonUp(CollectionBinderFlipAnimCtrl collectionBinderFlipAnimCtrl)
{
if (((Behaviour)this).enabled && !m_IsReturningCard && m_HeldCardDataList.Count > 0 && !collectionBinderFlipAnimCtrl.m_CollectionBinderUI.m_SortAlbumScreen.activeSelf && !collectionBinderFlipAnimCtrl.m_IsSorting && CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count > 0)
{
int num = m_HeldCardDataList.Last().BinderCardSlotIndex;
int num2 = m_HeldCardDataList.Last().BinderPageIndex - collectionBinderFlipAnimCtrl.m_Index;
int index = 0;
if (num2 <= -1)
{
int num3 = num;
int num4;
switch (num)
{
case 8:
case 11:
num4 = 8;
break;
case 7:
case 10:
num4 = 6;
break;
case 6:
case 9:
num4 = 4;
break;
default:
num4 = 0;
break;
}
num = num3 - num4;
index = 2;
}
else if (num2 >= 1)
{
int num4 = num;
int num3;
switch (num)
{
case 0:
case 3:
num3 = 8;
break;
case 1:
case 4:
num3 = 6;
break;
case 2:
case 5:
num3 = 4;
break;
default:
num3 = 0;
break;
}
num = num4 + num3;
index = 1;
}
Transform transform = ((Component)collectionBinderFlipAnimCtrl.m_BinderPageGrpList[index].m_CardList[num]).transform;
((InteractableObject)CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last()).StopLerpToTransform();
((InteractableObject)CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last()).LerpToTransform(transform, transform.parent);
m_IsReturningCard = true;
return false;
}
return true;
}
public void OnCardFinishLerp(ref InteractableCard3d interactableCard3D)
{
if (((Behaviour)this).enabled && m_IsReturningCard && CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count > 0)
{
ReturnLastCardToBinder(delegate
{
CSingleton<InteractionPlayerController>.Instance.EnterViewCardAlbumMode();
});
m_IsReturningCard = false;
}
}
private void ReturnLastCardToBinder(Action emptyHandAction)
{
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
if (CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count <= 0)
{
return;
}
CPlayerData.AddCard(CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last().m_Card3dUI.m_CardUI.GetCardData(), 1);
if (CSingleton<CollectionBinderFlipAnimCtrl>.Instance.m_IsBookOpen)
{
int num = m_HeldCardDataList.Last().BinderPageIndex - CSingleton<CollectionBinderFlipAnimCtrl>.Instance.m_Index;
if (num >= -1 && num <= 1 && !m_HeldCardDataList.Last().SortingChanged)
{
int index = ((num == -1) ? 2 : num);
int cardAmount = CPlayerData.GetCardAmount(CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last().m_Card3dUI.m_CardUI.m_CardData);
CSingleton<CollectionBinderFlipAnimCtrl>.Instance.m_BinderPageGrpList[index].SetSingleCard(m_HeldCardDataList.Last().BinderCardSlotIndex, CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last().m_Card3dUI.m_CardUI.m_CardData, cardAmount, m_SortingType);
((Component)CSingleton<CollectionBinderFlipAnimCtrl>.Instance.m_BinderPageGrpList[index].m_CardList[m_HeldCardDataList.Last().BinderCardSlotIndex]).gameObject.SetActive(true);
((Component)m_HeldCardDataList.Last().Transform).gameObject.SetActive(true);
}
}
((InteractableObject)CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Last()).OnDestroyed();
CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.RemoveAt(CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count - 1);
CPlayerData.m_HoldCardDataList.RemoveAt(CPlayerData.m_HoldCardDataList.Count - 1);
while (CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count < m_HeldCardDataList.Count)
{
m_HeldCardDataList.RemoveAt(m_HeldCardDataList.Count - 1);
}
SetHoldCardEularRotation(CSingleton<InteractionPlayerController>.Instance.m_CurrentHoldingCard3dList.Count, emptyHandAction);
}
private void SetHoldCardEularRotation(int heldCardCount, Action emptyHandAction)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
if (heldCardCount == 0)
{
CSingleton<InteractionPlayerController>.Instance.m_HoldCardGrpTargetRotation = Quaternion.Euler(0f, 0f, 0f);
emptyHandAction?.Invoke();
}
else
{
CSingleton<InteractionPlayerController>.Instance.m_HoldCardGrpTargetRotation = Quaternion.Euler(0f, 0f, Mathf.Lerp(0f, 15f, (float)heldCardCount / 7f));
}
}
public void OnSortingMethodChange()
{
if (!((Behaviour)this).enabled || m_HeldCardDataList.Count <= 0)
{
return;
}
foreach (HeldCardData heldCardData in m_HeldCardDataList)
{
heldCardData.SortingChanged = true;
}
}
}
public class Settings
{
public ConfigEntry<bool> isPutItBackEnabled;
public ConfigEntry<bool> enableWithBinderClosed;
private static Settings m_instance;
public static Settings Instance
{
get
{
if (m_instance == null)
{
m_instance = new Settings();
}
return m_instance;
}
}
public void Load(Plugin plugin)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
isPutItBackEnabled = ((BaseUnityPlugin)plugin).Config.Bind<bool>("Put It Back", "Enable", true, new ConfigDescription("Enables or disables put it back", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Order = 20
}
}));
enableWithBinderClosed = ((BaseUnityPlugin)plugin).Config.Bind<bool>("Put It Back", "Enable With Binder Closed", true, new ConfigDescription("Disables putting cards back if binder is closed.", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Order = 19
}
}));
}
private Settings()
{
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "PutItBack";
public const string PLUGIN_NAME = "Put It Back";
public const string PLUGIN_VERSION = "1.1.1";
}
}
namespace PutItBack.Patches
{
[HarmonyPatch(typeof(CollectionBinderFlipAnimCtrl))]
public class CollectionBinderFlipAnimCtrlPatches
{
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void OnUpdatePostfix(CollectionBinderFlipAnimCtrl __instance)
{
CSingleton<PutItBack>.Instance.CollectionBinderFlipAnimCtrlOnUpdate(__instance);
}
[HarmonyPatch("OnMouseButtonUp")]
[HarmonyPrefix]
private static bool OnMouseButtonUpPrefix(CollectionBinderFlipAnimCtrl __instance)
{
return CSingleton<PutItBack>.Instance.OnLeftMouseButtonUp(__instance);
}
[HarmonyPatch("OnRightMouseButtonUp")]
[HarmonyPrefix]
private static bool OnRightMouseButtonUpPrefix(CollectionBinderFlipAnimCtrl __instance)
{
return CSingleton<PutItBack>.Instance.OnRightMouseButtonUp(__instance);
}
[HarmonyPatch("OnPressSwitchSortingMethod")]
[HarmonyPrefix]
private static void OnSortingMethodChange(int sortingMethodIndex)
{
CSingleton<PutItBack>.Instance.OnSortingMethodChange();
}
[HarmonyPatch("OnPressSwitchExpansion")]
[HarmonyPrefix]
private static void OnExpansionChange(int expansionIndex)
{
CSingleton<PutItBack>.Instance.OnSortingMethodChange();
}
}
[HarmonyPatch(typeof(InteractionPlayerController))]
public class InteractionPlayerControllerPatches
{
[HarmonyPatch("Update")]
[HarmonyPostfix]
private static void OnUpdatePostfix(InteractionPlayerController __instance)
{
CSingleton<PutItBack>.Instance.InteractionPlayerControllerOnUpdate(__instance);
}
}
}
namespace PutItBack.Extensions
{
public static class CardDataExt
{
public static bool IsOwned(this CardData cardData)
{
return CPlayerData.GetCardAmount(cardData) > 0;
}
}
[HarmonyPatch(typeof(InteractableCard3d))]
internal class InteractableCard3dPatches
{
[HarmonyPatch("OnFinishLerp")]
[HarmonyPostfix]
private static void OnFinishLerpPostfix(ref InteractableCard3d __instance)
{
CSingleton<PutItBack>.Instance.OnCardFinishLerp(ref __instance);
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
internal IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}