using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Bounce.Singletons;
using HarmonyLib;
using ModdingTales;
using RadialUI;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DeepMenusPlugin")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Nth Dimension")]
[assembly: AssemblyProduct("DeepMenusPlugin")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("DeepMenusPlugin")]
[assembly: ComVisible(false)]
[assembly: Guid("c303405d-e66c-4316-9cdb-4e3ca15c6360")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace LordAshes;
[BepInPlugin("org.lordashes.plugins.deepmenus", "Deep Menus Plugin", "1.0.0.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class DeepMenusPlugin : BaseUnityPlugin
{
public static class Utility
{
public static bool isBoardLoaded()
{
return SimpleSingletonBehaviour<CameraController>.HasInstance && SingletonStateMBehaviour<BoardSessionManager, State<BoardSessionManager>>.HasInstance && !BoardSessionManager.IsLoading;
}
public static float ParseFloat(string value)
{
return float.Parse(value, CultureInfo.InvariantCulture);
}
public static GameObject FindInHierarchy(GameObject start, string seekName)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, seekName, null, single: true, ref results, ref done);
return (results.Count > 0) ? results.ElementAt(0) : null;
}
public static GameObject FindInHierarchyViaPartialName(GameObject start, string seekName)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, seekName, null, single: true, ref results, ref done, partial: true);
return (results.Count > 0) ? results.ElementAt(0) : null;
}
public static GameObject[] FindAllInHierarchy(GameObject start, string seekName)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, seekName, null, single: false, ref results, ref done);
return results.ToArray();
}
public static GameObject[] FindAllInHierarchyViaPartialName(GameObject start, string seekName)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, seekName, null, single: false, ref results, ref done, partial: true);
return results.ToArray();
}
public static GameObject FindWithComponentInHierarchy(GameObject start, string seekType)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, null, seekType, single: true, ref results, ref done);
return (results.Count > 0) ? results.ElementAt(0) : null;
}
public static GameObject[] FindAllWithComponentInHierarchy<T>(GameObject start, string seekType)
{
List<GameObject> results = new List<GameObject>();
bool done = false;
Traverse(start.transform, null, seekType, single: false, ref results, ref done);
return results.ToArray();
}
public static void Traverse(Transform root, string seekName, string seekType, bool single, ref List<GameObject> results, ref bool done, bool partial = false)
{
try
{
if ((seekName == null || seekName == ((Object)((Component)root).gameObject).name || (partial && ((Object)((Component)root).gameObject).name.Contains(seekName))) && (seekType == null || (Object)(object)((Component)root).GetComponent(seekType) != (Object)null))
{
LoggingPlugin.LogTrace("Matched '" + ((Object)((Component)root).gameObject).name + "'");
results.Add(((Component)root).gameObject);
if (single)
{
done = true;
return;
}
}
foreach (Transform item in ExtensionMethods.Children(root))
{
if (!done)
{
Traverse(item, seekName, seekType, single, ref results, ref done, partial);
}
}
}
catch
{
}
}
public static object LookUp(in Dictionary<string, object> dictionary, string key)
{
foreach (KeyValuePair<string, object> item in dictionary)
{
if (item.Key.ToUpper() == key.ToUpper())
{
return item.Value;
}
}
return null;
}
public static void PostOnMainPage(BaseUnityPlugin plugin)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Expected O, but got Unknown
string text = "Lord Ashes" + ("Lord Ashes".ToUpper().EndsWith("S") ? "'" : "'s");
ModdingUtils.Initialize(plugin, new ManualLogSource("Deep Menus Plugin"), text, false);
}
}
[HarmonyPatch(typeof(CreatureMenuBoardTool), "Begin")]
private class PatchOnOp
{
private static bool Prefix()
{
LoggingPlugin.LogTrace("Resetting Current Menu");
currentMenu = "";
return true;
}
}
public const string Name = "Deep Menus Plugin";
public const string Guid = "org.lordashes.plugins.deepmenus";
public const string Version = "1.0.0.0";
public const string Author = "Lord Ashes";
public static DeepMenusPlugin _self = null;
public static string currentMenu = "";
public static List<ItemArgs> menuItems = new List<ItemArgs>();
private void Awake()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
_self = this;
LoggingPlugin.SetLogLevel(((BaseUnityPlugin)this).Config.Bind<DiagnosticLevel>("Settings", "Diagnostic Level", (DiagnosticLevel)3, (ConfigDescription)null).Value);
Sprite val = Image.LoadSprite("option.png", (CacheType)999);
string? assemblyQualifiedName = ((object)this).GetType().AssemblyQualifiedName;
DiagnosticLevel logLevel = LoggingPlugin.GetLogLevel();
Debug.Log((object)(assemblyQualifiedName + ": Active. (Diagnostic Mode = " + ((object)(DiagnosticLevel)(ref logLevel)).ToString() + ")"));
Harmony val2 = new Harmony("org.lordashes.plugins.deepmenus");
val2.PatchAll();
}
public void CreateSubMenu(string menuLocation, ItemArgs item, Func<bool> checker = null)
{
item.Obj = "org.lordashes.plugins.deepmenus" + menuLocation;
item.Action = delegate
{
NavigateTo(item.Title);
};
EnsureMenuExists(menuLocation);
RadialSubmenu.CreateSubMenuItem("org.lordashes.plugins.deepmenus" + menuLocation, item, (Action<HideVolumeItem, string, MapMenuItem>)null, checker);
}
public void CreateSubMenuItem(string menuLocation, ItemArgs item, Func<bool> checker = null)
{
item.Obj = "org.lordashes.plugins.deepmenus" + menuLocation;
EnsureMenuExists(menuLocation);
RadialSubmenu.CreateSubMenuItem("org.lordashes.plugins.deepmenus" + menuLocation, item, (Action<HideVolumeItem, string, MapMenuItem>)null, checker);
}
public ItemArgs MakeItemEntry(string item, Action<string, string> callback, Sprite icon, bool fadeName = false, bool closeMenu = true)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
return new ItemArgs
{
Title = item,
Action = delegate
{
callback(item, currentMenu);
},
Icon = icon,
FadeName = fadeName,
CloseMenuOnActivate = closeMenu
};
}
public ItemArgs MakeSubMenuEntry(string item, Sprite icon, bool fadeName = false, bool closeMenu = true)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
return new ItemArgs
{
Title = item,
Action = delegate
{
NavigateTo(item);
},
Icon = icon,
FadeName = fadeName,
CloseMenuOnActivate = closeMenu
};
}
public static void NavigateTo(string selection)
{
currentMenu = currentMenu + "/" + selection.ToString();
LoggingPlugin.LogDebug("Navigating To " + currentMenu);
((MonoBehaviour)_self).StartCoroutine(OpenSubMenu(currentMenu));
}
private void EnsureMenuExists(string menuLocation)
{
FieldInfo fieldInfo = (from f in typeof(RadialSubmenu).GetRuntimeFields()
where f.Name == "subMenuEntries"
select f).ElementAt(0);
Dictionary<string, List<ItemArgs>> dictionary = (Dictionary<string, List<ItemArgs>>)fieldInfo.GetValue(null);
if (!dictionary.ContainsKey("org.lordashes.plugins.deepmenus" + menuLocation))
{
dictionary.Add("org.lordashes.plugins.deepmenus" + menuLocation, new List<ItemArgs>());
fieldInfo.SetValue(null, dictionary);
}
}
private static IEnumerator OpenSubMenu(string menuLocation)
{
yield return (object)new WaitForSeconds(0.1f);
LoggingPlugin.LogDebug("Reopening Sub-Menu " + currentMenu);
CreatureBoardAsset asset = default(CreatureBoardAsset);
CreaturePresenter.TryGetAsset(new CreatureGuid(RadialUIPlugin.GetLastRadialTargetCreature()), ref asset);
if (!((Object)(object)asset != (Object)null))
{
yield break;
}
FieldInfo fi = (from f in typeof(RadialSubmenu).GetRuntimeFields()
where f.Name == "subMenuEntries"
select f).ElementAt(0);
Dictionary<string, List<ItemArgs>> subMenuEntries = (Dictionary<string, List<ItemArgs>>)fi.GetValue(null);
MapMenu mapMenu = MapMenuManager.OpenMenu(((Component)asset).transform.position + Vector3.up * 0.5f, true);
foreach (ItemArgs item in subMenuEntries["org.lordashes.plugins.deepmenus" + menuLocation])
{
mapMenu.AddItem(item);
}
}
}