Decompiled source of Colorful Revived v1.0.0

Mods/Colorful.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib;
using BoneLib.BoneMenu;
using BoneLib.BoneMenu.UI;
using Colorful;
using HarmonyLib;
using Il2CppSLZ.Bonelab;
using Il2CppSLZ.UI;
using Il2CppTMPro;
using MelonLoader;
using MelonLoader.Preferences;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Main), "Colorful-Revived", "1.0.0", "TogenMerfagen", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: MelonPriority(1)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("TogenMerfagen")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+3caa917183c681c5043edd69ed952ee739edf82b")]
[assembly: AssemblyProduct("Colorful")]
[assembly: AssemblyTitle("Colorful")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Colorful;

internal class PreferencesCreator
{
	private static Page _menuPage;

	private static Page _northPage;

	private static Page _northEastPage;

	private static Page _eastPage;

	private static Page _southEastPage;

	private static Page _southPage;

	private static Page _southWestPage;

	private static Page _westPage;

	private static Page _northWestPage;

	private static Page _middlePage;

	private static Page[] _directionalPages;

	public static MelonPreferences_Category MelonPrefCategory { get; private set; }

	public static MelonPreferences_Entry<bool> MelonPrefEnabled { get; private set; }

	public static bool IsEnabled { get; private set; }

	public static MelonPreferences_Entry<Color> NorthPref { get; private set; }

	public static MelonPreferences_Entry<Color> NorthEastPref { get; private set; }

	public static MelonPreferences_Entry<Color> EastPref { get; private set; }

	public static MelonPreferences_Entry<Color> SouthEastPref { get; private set; }

	public static MelonPreferences_Entry<Color> SouthPref { get; private set; }

	public static MelonPreferences_Entry<Color> SouthWestPref { get; private set; }

	public static MelonPreferences_Entry<Color> WestPref { get; private set; }

	public static MelonPreferences_Entry<Color> NorthWestPref { get; private set; }

	public static MelonPreferences_Entry<Color> MiddlePref { get; private set; }

	public static MelonPreferences_Entry<Color> MenuPref { get; private set; }

	public static void BonemenuCreator()
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: 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_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0118: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_014b: Unknown result type (might be due to invalid IL or missing references)
		Page val = Page.Root.CreatePage(BuildRainbowName(), Color.white, 0, true);
		val.CreateBool("Mod Toggle", Color.yellow, IsEnabled, (Action<bool>)OnSetEnabled);
		Page root = val.CreatePage("UI Colors", Colors.Menu, 0, true);
		_menuPage = CreateColorPage(root, "Menu", Colors.Menu, MenuPref);
		_middlePage = CreateColorPage(root, "Radial Cancel", Colors.Middle, MiddlePref);
		Page root2 = val.CreatePage("Radial Menu", Color.white, 0, true);
		_northPage = CreateColorPage(root2, "Eject", Colors.North, NorthPref);
		_northEastPage = CreateColorPage(root2, "Level Select", Colors.NorthEast, NorthEastPref);
		_eastPage = CreateColorPage(root2, "Preferences", Colors.East, EastPref);
		_southEastPage = CreateColorPage(root2, "Quick Mute", Colors.SouthEast, SouthEastPref);
		_southPage = CreateColorPage(root2, "Inventory", Colors.South, SouthPref);
		_southWestPage = CreateColorPage(root2, "Spawn Devtools", Colors.SouthWest, SouthWestPref);
		_westPage = CreateColorPage(root2, "SpawnGun Menu", Colors.West, WestPref);
		_northWestPage = CreateColorPage(root2, "Avatar Select", Colors.NorthWest, NorthWestPref);
		_directionalPages = (Page[])(object)new Page[8] { _northPage, _northEastPage, _eastPage, _southEastPage, _southPage, _southWestPage, _westPage, _northWestPage };
		ModModuleManager.InitializeAll(MelonPrefCategory, val);
		CreateOverrideOnRoot(val);
		CreateDefaultAllOnRoot(val);
	}

	private static string BuildRainbowName()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_013a: Unknown result type (might be due to invalid IL or missing references)
		return $"<color=#{ColorUtility.ToHtmlStringRGBA(Colors.North)}>C</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.NorthEast)}>o</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.East)}>l</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.SouthEast)}>o</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.South)}>r</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.SouthWest)}>f</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.West)}>u</color><color=#{ColorUtility.ToHtmlStringRGBA(Colors.NorthWest)}>l</color>";
	}

	private static void RefreshRootName(Page root)
	{
		root.Name = BuildRainbowName();
	}

	private static Page CreateColorPage(Page root, string name, Color color, MelonPreferences_Entry<Color> pref)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		Page page = root.CreatePage(name, color, 0, true);
		ColorSliders.Create(page, color, delegate(Color updatedColor)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			SetColor(page, pref, updatedColor);
			RefreshRootName(root);
		});
		return page;
	}

	private static void SetColor(Page page, MelonPreferences_Entry<Color> pref, Color color)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		page.Color = color;
		pref.Value = color;
		MelonPrefCategory.SaveToFile(true);
		Main.MoggingTime();
	}

	private static void SetAllColors(Color color)
	{
		//IL_000a: 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_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		SetColor(_menuPage, MenuPref, color);
		SetColor(_northPage, NorthPref, color);
		SetColor(_northEastPage, NorthEastPref, color);
		SetColor(_eastPage, EastPref, color);
		SetColor(_southEastPage, SouthEastPref, color);
		SetColor(_southPage, SouthPref, color);
		SetColor(_southWestPage, SouthWestPref, color);
		SetColor(_westPage, WestPref, color);
		SetColor(_northWestPage, NorthWestPref, color);
		SetColor(_middlePage, MiddlePref, color);
		ModModuleManager.SetAllColors(color);
	}

	private static void ResetColor(Page page, MelonPreferences_Entry<Color> pref, Color defaultColor)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		page.Color = defaultColor;
		pref.Value = defaultColor;
		MelonPrefCategory.SaveToFile(true);
		Main.MoggingTime();
	}

	private static void CreateOverrideOnRoot(Page root)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		ColorSliders.CreateWithConfirm(root, Color.white, delegate(Color updatedColor)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			SetAllColors(updatedColor);
			RefreshRootName(root);
		});
	}

	private static void CreateDefaultAllOnRoot(Page root)
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		root.CreateFunction("Default All", Color.black, (Action)delegate
		{
			Menu.DisplayDialog("Reset All Colors", "Are you sure? This will set all colors to default", (Texture2D)null, (Action)delegate
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0032: Unknown result type (might be due to invalid IL or missing references)
				//IL_0046: Unknown result type (might be due to invalid IL or missing references)
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: Unknown result type (might be due to invalid IL or missing references)
				SetColor(_menuPage, MenuPref, Colors.MenuDefault);
				ResetColor(_northPage, NorthPref, Colors.NorthDefault);
				ResetColor(_northEastPage, NorthEastPref, Colors.NorthEastDefault);
				ResetColor(_eastPage, EastPref, Colors.EastDefault);
				ResetColor(_southEastPage, SouthEastPref, Colors.SouthEastDefault);
				ResetColor(_southPage, SouthPref, Colors.SouthDefault);
				ResetColor(_southWestPage, SouthWestPref, Colors.SouthWestDefault);
				ResetColor(_westPage, WestPref, Colors.WestDefault);
				ResetColor(_northWestPage, NorthWestPref, Colors.NorthWestDefault);
				ResetColor(_middlePage, MiddlePref, Colors.MiddleDefault);
				ModModuleManager.ResetAll();
				RefreshRootName(root);
			}, (Action)null);
		});
	}

	public static void UpdateColorPageNames(string[] names)
	{
		if (_directionalPages == null || names == null || names.Length < 8)
		{
			return;
		}
		for (int i = 0; i < 8; i++)
		{
			if (!string.IsNullOrEmpty(names[i]))
			{
				_directionalPages[i].Name = names[i];
			}
		}
	}

	public static void MelonPreferencesCreator()
	{
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00de: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_015a: Unknown result type (might be due to invalid IL or missing references)
		MelonPrefCategory = MelonPreferences.CreateCategory("Colorful");
		MelonPrefEnabled = MelonPrefCategory.CreateEntry<bool>("IsEnabled", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		IsEnabled = MelonPrefEnabled.Value;
		NorthPref = MelonPrefCategory.CreateEntry<Color>("Eject Color", Colors.NorthDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		NorthEastPref = MelonPrefCategory.CreateEntry<Color>("Level Select Color", Colors.NorthEastDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		EastPref = MelonPrefCategory.CreateEntry<Color>("Preferences Color", Colors.EastDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		SouthEastPref = MelonPrefCategory.CreateEntry<Color>("Quick Mute Color", Colors.SouthEastDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		SouthPref = MelonPrefCategory.CreateEntry<Color>("Inventory Color", Colors.SouthDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		SouthWestPref = MelonPrefCategory.CreateEntry<Color>("Spawn Devtools Color", Colors.SouthWestDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		WestPref = MelonPrefCategory.CreateEntry<Color>("SpawnGun Menu Color", Colors.WestDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		NorthWestPref = MelonPrefCategory.CreateEntry<Color>("Avatar Select Color", Colors.NorthWestDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		MiddlePref = MelonPrefCategory.CreateEntry<Color>("Radial Cancel Color", Colors.MiddleDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		MenuPref = MelonPrefCategory.CreateEntry<Color>("Menu Color", Colors.MenuDefault, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
		foreach (ModModule module in ModModuleManager.Modules)
		{
			module.SetupPref(MelonPrefCategory);
		}
	}

	public static void OnSetEnabled(bool value)
	{
		IsEnabled = value;
		MelonPrefEnabled.Value = value;
		MelonPrefCategory.SaveToFile(true);
		Main.MoggingTime();
	}
}
public class AvatarSelectUI
{
	public static void Avatar(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0057: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.NorthWest : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (!(((Object)child).name == "img_outline") && !(((Object)child).name == "img_bg") && !(((Object)child).name == "image_bgFade"))
			{
				PaintChild(child, color);
				Avatar(child);
			}
		}
	}

	public static void Bodymall(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		Color val = (PreferencesCreator.IsEnabled ? Colors.NorthWest : Color.white);
		Color black = Color.black;
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (((Object)child).name == "img_outline" || ((Object)child).name == "img_bg")
			{
				continue;
			}
			if (((Object)child).name == "Chart")
			{
				Renderer component = ((Component)child).GetComponent<Renderer>();
				if ((Object)(object)component != (Object)null)
				{
					Material material = component.material;
					if ((Object)(object)material != (Object)null)
					{
						material.color = val;
					}
				}
				Bodymall(child);
			}
			else
			{
				bool flag = ((Object)child).name == "text_avatars_val";
				PaintChild(child, flag ? black : val);
				Bodymall(child);
			}
		}
	}

	private static void PaintChild(Transform t, Color color)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		TextMeshProUGUI component = ((Component)t).GetComponent<TextMeshProUGUI>();
		if ((Object)(object)component != (Object)null)
		{
			((Graphic)component).color = color;
			return;
		}
		TextMeshPro component2 = ((Component)t).GetComponent<TextMeshPro>();
		if ((Object)(object)component2 != (Object)null)
		{
			((Graphic)component2).color = color;
			return;
		}
		Image component3 = ((Component)t).GetComponent<Image>();
		if ((Object)(object)component3 != (Object)null)
		{
			((Graphic)component3).color = color;
		}
	}
}
public static class BoneMenuUI
{
	public static void Paint()
	{
		//IL_001e: 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_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		GUIMenu val = FindGuiMenu();
		if (!((Object)(object)val == (Object)null))
		{
			Color targetColor = (PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
			PaintRecursive(((Component)val).transform, targetColor);
		}
	}

	private static GUIMenu FindGuiMenu()
	{
		GUIMenu val = Object.FindObjectOfType<GUIMenu>();
		if ((Object)(object)val != (Object)null)
		{
			return val;
		}
		GameObject val2 = GameObject.Find("[BoneMenu] - Canvas(Clone)");
		if ((Object)(object)val2 != (Object)null)
		{
			return val2.GetComponent<GUIMenu>();
		}
		return null;
	}

	private static void PaintRecursive(Transform parent, Color targetColor)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			TryPaint(child, targetColor);
			PaintRecursive(child, targetColor);
		}
	}

	private static void TryPaint(Transform t, Color targetColor)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		TextMeshProUGUI component = ((Component)t).GetComponent<TextMeshProUGUI>();
		if ((Object)(object)component != (Object)null)
		{
			if (IsWhite(((Graphic)component).color))
			{
				((Graphic)component).color = targetColor;
			}
			return;
		}
		TextMeshPro component2 = ((Component)t).GetComponent<TextMeshPro>();
		if ((Object)(object)component2 != (Object)null)
		{
			if (IsWhite(((Graphic)component2).color))
			{
				((Graphic)component2).color = targetColor;
			}
			return;
		}
		Text component3 = ((Component)t).GetComponent<Text>();
		if ((Object)(object)component3 != (Object)null)
		{
			if (IsWhite(((Graphic)component3).color))
			{
				((Graphic)component3).color = targetColor;
			}
			return;
		}
		Image component4 = ((Component)t).GetComponent<Image>();
		if ((Object)(object)component4 != (Object)null)
		{
			((Graphic)component4).color = targetColor;
			return;
		}
		RawImage component5 = ((Component)t).GetComponent<RawImage>();
		if ((Object)(object)component5 != (Object)null)
		{
			((Graphic)component5).color = targetColor;
		}
	}

	private static bool IsWhite(Color c)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: 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)
		if (c.r > 0.9f && c.g > 0.9f)
		{
			return c.b > 0.9f;
		}
		return false;
	}
}
public static class FusionUI
{
	public static void Paint(Transform parent, Color color)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			TryPaint(child, color);
			Paint(child, color);
		}
	}

	private static void TryPaint(Transform t, Color targetColor)
	{
		//IL_003e: 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_0019: 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_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
		TextMeshProUGUI component = ((Component)t).GetComponent<TextMeshProUGUI>();
		if ((Object)(object)component != (Object)null)
		{
			if (!IsNameTagPreview(t) || IsWhite(((Graphic)component).color))
			{
				((Graphic)component).color = targetColor;
			}
			return;
		}
		TextMeshPro component2 = ((Component)t).GetComponent<TextMeshPro>();
		if ((Object)(object)component2 != (Object)null)
		{
			((Graphic)component2).color = targetColor;
			return;
		}
		Text component3 = ((Component)t).GetComponent<Text>();
		if ((Object)(object)component3 != (Object)null)
		{
			((Graphic)component3).color = targetColor;
			return;
		}
		Image component4 = ((Component)t).GetComponent<Image>();
		if ((Object)(object)component4 != (Object)null && IsWhite(((Graphic)component4).color))
		{
			((Graphic)component4).color = targetColor;
			return;
		}
		RawImage component5 = ((Component)t).GetComponent<RawImage>();
		if ((Object)(object)component5 != (Object)null && IsWhite(((Graphic)component5).color) && !IsProfilePicture(component5))
		{
			((Graphic)component5).color = targetColor;
		}
	}

	private static bool IsWhite(Color c)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: 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)
		if (c.r > 0.9f && c.g > 0.9f)
		{
			return c.b > 0.9f;
		}
		return false;
	}

	private static bool IsNameTagPreview(Transform t)
	{
		Transform val = t;
		while ((Object)(object)val != (Object)null)
		{
			if (((Object)val).name == "NameTag Color")
			{
				return true;
			}
			val = val.parent;
		}
		return false;
	}

	private static bool IsProfilePicture(RawImage raw)
	{
		Transform parent = ((Component)raw).transform.parent;
		while ((Object)(object)parent != (Object)null)
		{
			if ((Object)(object)((Component)parent).GetComponent<Mask>() != (Object)null)
			{
				return (Object)(object)raw.texture != (Object)null;
			}
			parent = parent.parent;
		}
		return false;
	}
}
public static class InfoBoardUI
{
	public static void Paint(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0015: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
		TransformPainter.Paint(parent, color);
	}

	public static void PaintLeaderboard(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: 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_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		Color val = (PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
		Color color = Color.Lerp(val, Color.black, 0.6f);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = val;
				}
				else
				{
					RawImage component3 = ((Component)child).GetComponent<RawImage>();
					if ((Object)(object)component3 != (Object)null)
					{
						((Graphic)component3).color = val;
					}
				}
			}
			PaintLeaderboard(child);
		}
	}
}
public static class InventorySlotsUI
{
	public static void Paint(Transform parent, Color color)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			PageElementView component = ((Component)child).GetComponent<PageElementView>();
			if ((Object)(object)component != (Object)null)
			{
				component.color2 = color;
			}
			else
			{
				MeshRenderer component2 = ((Component)child).GetComponent<MeshRenderer>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Renderer)component2).material.color = color;
				}
			}
			Paint(child, color);
		}
	}
}
public class LevelSelectUI
{
	public static void LevelSelect(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0055: 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)
		Color color = (PreferencesCreator.IsEnabled ? Colors.NorthEast : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (((Object)child).name == "image_bgFade" || ((Object)child).name == "Background")
			{
				continue;
			}
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = color;
				}
			}
			LevelSelect(child);
		}
	}
}
public class MenuUI
{
	private static readonly HashSet<string> NoRecurse = new HashSet<string> { "group_Options", "group_CAMPAIGNS", "group_BETA" };

	public static void MainMenu(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (((Object)child).name == "Background" || ((Object)child).name.Contains("img_outline") || ((Object)child).name.Contains("img_bg"))
			{
				continue;
			}
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = color;
				}
				else
				{
					TextMeshPro component3 = ((Component)child).GetComponent<TextMeshPro>();
					if ((Object)(object)component3 != (Object)null)
					{
						((Graphic)component3).color = color;
					}
					else
					{
						RawImage component4 = ((Component)child).GetComponent<RawImage>();
						if ((Object)(object)component4 != (Object)null)
						{
							((Graphic)component4).color = color;
						}
					}
				}
			}
			if (!NoRecurse.Contains(((Object)child).name))
			{
				MainMenu(child);
			}
		}
	}
}
public class FusionModule : ModModule
{
	private bool _patched;

	private static FusionModule _instance;

	public override string DisplayName => "Fusion Menu";

	public override string AssemblyName => "LabFusion";

	public override string PrefEntryName => "Fusion Menu Color";

	public override Color DefaultColor => Color.white;

	public FusionModule()
	{
		_instance = this;
	}

	public override void Apply()
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = GameObject.Find("canvas_FusionMenu [0]");
		if ((Object)(object)val != (Object)null)
		{
			FusionUI.Paint(val.transform, base.Color);
		}
		PaintFusionNavButton();
		ModModuleManager.SetDividerLineColor(base.Color);
	}

	public override void ApplyPatches()
	{
		if (_patched)
		{
			return;
		}
		Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
		foreach (Assembly assembly in assemblies)
		{
			try
			{
				Type[] exportedTypes = assembly.GetExportedTypes();
				foreach (Type type in exportedTypes)
				{
					if (type.Name.Contains("MenuPage"))
					{
						TryPatch(type);
					}
				}
			}
			catch
			{
			}
		}
		foreach (MelonMod registeredMelon in MelonTypeBase<MelonMod>.RegisteredMelons)
		{
			try
			{
				MelonAssembly melonAssembly = ((MelonBase)registeredMelon).MelonAssembly;
				Assembly assembly2 = ((melonAssembly != null) ? melonAssembly.Assembly : null);
				if (assembly2 == null)
				{
					continue;
				}
				Type[] exportedTypes = assembly2.GetExportedTypes();
				foreach (Type type2 in exportedTypes)
				{
					if (type2.Name.Contains("MenuPage"))
					{
						TryPatch(type2);
					}
				}
			}
			catch
			{
			}
		}
	}

	private void TryPatch(Type type)
	{
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Expected O, but got Unknown
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Expected O, but got Unknown
		BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
		MethodInfo method = type.GetMethod("OnEnable", bindingAttr);
		if (method != null)
		{
			Harmony val = new Harmony("Colorful.Fusion." + type.FullName + ".OnEnable");
			HarmonyMethod val2 = new HarmonyMethod(typeof(FusionModule), "OnMenuEnabled", (Type[])null);
			val.Patch((MethodBase)method, (HarmonyMethod)null, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			_patched = true;
			MelonLogger.Msg("Patched " + type.FullName + ".OnEnable");
		}
		MethodInfo method2 = type.GetMethod("OnDisable", bindingAttr);
		if (method2 != null)
		{
			Harmony val3 = new Harmony("Colorful.Fusion." + type.FullName + ".OnDisable");
			HarmonyMethod val4 = new HarmonyMethod(typeof(FusionModule), "OnMenuDisabled", (Type[])null);
			val3.Patch((MethodBase)method2, (HarmonyMethod)null, val4, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
			_patched = true;
			MelonLogger.Msg("Patched " + type.FullName + ".OnDisable");
		}
	}

	private static void OnMenuEnabled(MonoBehaviour __instance)
	{
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		if (!PreferencesCreator.IsEnabled || (Object)(object)__instance == (Object)null || _instance == null)
		{
			return;
		}
		Transform val = ((Component)__instance).transform;
		while ((Object)(object)val != (Object)null)
		{
			if (((Object)val).name.Contains("canvas_FusionMenu"))
			{
				FusionUI.Paint(((Component)__instance).transform, _instance.Color);
				_instance.PaintFusionNavButton();
				ModModuleManager.SetDividerLineColor(_instance.Color);
				break;
			}
			val = val.parent;
		}
	}

	private static void OnMenuDisabled(MonoBehaviour __instance)
	{
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		if (!PreferencesCreator.IsEnabled || (Object)(object)__instance == (Object)null || _instance == null)
		{
			return;
		}
		Transform val = ((Component)__instance).transform;
		while ((Object)(object)val != (Object)null)
		{
			if (((Object)val).name.Contains("canvas_FusionMenu"))
			{
				ModModuleManager.SetDividerLineColor(Colors.East);
				break;
			}
			val = val.parent;
		}
	}

	public override void OnMoggingTime(GameObject obj)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		LoadFromPrefs();
		if (((Object)obj).name.Contains("canvas_FusionMenu"))
		{
			FusionUI.Paint(obj.transform, PreferencesCreator.IsEnabled ? base.Color : Color.white);
		}
		if (((Object)obj).name.Contains("button_Fusion"))
		{
			PaintFusionNavButton();
		}
		if (((Object)obj).name == "image----------------")
		{
			Image component = obj.GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = base.Color;
			}
		}
	}

	private void PaintFusionNavButton()
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = GameObject.Find("button_Fusion");
		if ((Object)(object)val == (Object)null)
		{
			return;
		}
		Transform val2 = val.transform.Find("image_backline");
		if ((Object)(object)val2 != (Object)null)
		{
			Image component = ((Component)val2).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = base.Color;
			}
		}
	}
}
public abstract class ModModule
{
	public abstract string DisplayName { get; }

	public abstract string AssemblyName { get; }

	public abstract string PrefEntryName { get; }

	public abstract Color DefaultColor { get; }

	public bool IsLoaded { get; private set; }

	public Color Color { get; set; }

	public MelonPreferences_Entry<Color> ColorPref { get; private set; }

	public Page BoneMenuPage { get; set; }

	public bool Detect()
	{
		Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
		for (int i = 0; i < assemblies.Length; i++)
		{
			if (assemblies[i].GetName().Name == AssemblyName)
			{
				IsLoaded = true;
				return true;
			}
		}
		return false;
	}

	public void SetupPref(MelonPreferences_Category category)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		if (IsLoaded)
		{
			ColorPref = category.CreateEntry<Color>(PrefEntryName, DefaultColor, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			Color = ColorPref.Value;
		}
	}

	public void LoadFromPrefs()
	{
		//IL_0020: 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)
		if (IsLoaded)
		{
			Color = ((ColorPref != null) ? ColorPref.Value : DefaultColor);
		}
	}

	public Page CreateBoneMenuPage(Page parent)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		if (!IsLoaded)
		{
			return null;
		}
		BoneMenuPage = parent.CreatePage(DisplayName, Color, 0, true);
		ColorSliders.Create(BoneMenuPage, Color, delegate(Color updatedColor)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			SetColor(updatedColor);
		});
		return BoneMenuPage;
	}

	public virtual void SetColor(Color color)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		Color = color;
		if (BoneMenuPage != null)
		{
			BoneMenuPage.Color = color;
		}
		if (ColorPref != null)
		{
			ColorPref.Value = color;
			PreferencesCreator.MelonPrefCategory.SaveToFile(true);
		}
		Apply();
	}

	public virtual void ResetToDefault()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		SetColor(DefaultColor);
	}

	public virtual void Apply()
	{
	}

	public virtual void ApplyPatches()
	{
	}

	public virtual void OnSceneAwake()
	{
	}

	public virtual void OnMoggingTime(GameObject obj)
	{
	}
}
public static class ModModuleManager
{
	public static List<ModModule> Modules { get; } = new List<ModModule>();


	public static void Register(ModModule module)
	{
		Modules.Add(module);
	}

	public static void InitializeAll(MelonPreferences_Category category, Page root)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		Page parent = root.CreatePage("Mods", Color.white, 0, true);
		foreach (ModModule module in Modules)
		{
			if (module.Detect())
			{
				module.SetupPref(category);
				module.LoadFromPrefs();
				module.CreateBoneMenuPage(parent);
				module.ApplyPatches();
			}
		}
	}

	public static void OnSceneAwakeAll()
	{
		foreach (ModModule module in Modules)
		{
			if (module.IsLoaded)
			{
				module.OnSceneAwake();
			}
		}
	}

	public static void OnMoggingTimeAll(GameObject obj)
	{
		foreach (ModModule module in Modules)
		{
			if (module.IsLoaded)
			{
				module.OnMoggingTime(obj);
			}
		}
	}

	public static void SetAllColors(Color color)
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		foreach (ModModule module in Modules)
		{
			if (module.IsLoaded)
			{
				module.SetColor(color);
			}
		}
	}

	public static void ResetAll()
	{
		foreach (ModModule module in Modules)
		{
			if (module.IsLoaded)
			{
				module.ResetToDefault();
			}
		}
	}

	public static T Get<T>() where T : ModModule
	{
		foreach (ModModule module in Modules)
		{
			if (module is T result)
			{
				return result;
			}
		}
		return null;
	}

	public static void SetDividerLineColor(Color color)
	{
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		foreach (GameObject item in Object.FindObjectsOfType<GameObject>(true))
		{
			if (((Object)item).name != "image----------------")
			{
				continue;
			}
			Transform parent = item.transform.parent;
			if ((Object)(object)parent != (Object)null && ((Object)parent).name == "panel_Preferences")
			{
				Image component = item.GetComponent<Image>();
				if ((Object)(object)component != (Object)null)
				{
					((Graphic)component).color = color;
				}
				break;
			}
		}
	}
}
public class PreferencesUI
{
	public static void Preferences(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.East : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (ContainsName(new string[5] { "Viewport_Spectator", "Viewport_Graphics", "Viewport", "Name", "image_bgFade" }, ((Object)child).name) || ((Object)child).name.Contains("canvas_FusionMenu"))
			{
				continue;
			}
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = color;
				}
				else
				{
					RawImage component3 = ((Component)child).GetComponent<RawImage>();
					if ((Object)(object)component3 != (Object)null)
					{
						((Graphic)component3).color = color;
					}
					else
					{
						TextMeshPro component4 = ((Component)child).GetComponent<TextMeshPro>();
						if ((Object)(object)component4 != (Object)null)
						{
							((Graphic)component4).color = color;
						}
						else
						{
							Text component5 = ((Component)child).GetComponent<Text>();
							if ((Object)(object)component5 != (Object)null)
							{
								((Graphic)component5).color = color;
							}
						}
					}
				}
			}
			Preferences(child);
		}
	}

	public static void Extra(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.East : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = color;
				}
			}
			Extra(child);
		}
	}

	private static bool ContainsName(string[] names, string name)
	{
		for (int i = 0; i < names.Length; i++)
		{
			if (names[i] == name)
			{
				return true;
			}
		}
		return false;
	}
}
internal static class RadialLabelReader
{
	private static readonly int[] TextButtonIndices = new int[8] { 0, 3, 6, 9, 12, 15, 18, 21 };

	private static readonly string[] DefaultNames = new string[8] { "Eject", "Level Select", "Preferences", "Quick Mute", "Inventory", "Spawn Devtools", "SpawnGun Menu", "Avatar Select" };

	public static string[] GetButtonNames()
	{
		string[] array = new string[8];
		GameObject val = GameObject.Find("CANVAS_RADIALUI");
		if ((Object)(object)val != (Object)null)
		{
			Transform transform = val.transform;
			for (int i = 0; i < 8; i++)
			{
				int num = TextButtonIndices[i];
				if (num < transform.childCount)
				{
					TextMeshProUGUI component = ((Component)transform.GetChild(num)).GetComponent<TextMeshProUGUI>();
					if ((Object)(object)component != (Object)null && !string.IsNullOrEmpty(((TMP_Text)component).text))
					{
						array[i] = ((TMP_Text)component).text;
						continue;
					}
				}
				array[i] = DefaultNames[i];
			}
		}
		else
		{
			for (int j = 0; j < 8; j++)
			{
				array[j] = DefaultNames[j];
			}
		}
		return array;
	}

	public static void StartPolling()
	{
		MelonCoroutines.Start(PollRadialText());
	}

	private static IEnumerator PollRadialText()
	{
		yield return (object)new WaitForSeconds(1f);
		for (int attempt = 0; attempt < 30; attempt++)
		{
			GameObject val = GameObject.Find("CANVAS_RADIALUI");
			if ((Object)(object)val != (Object)null)
			{
				Transform transform = val.transform;
				bool flag = false;
				string[] array = new string[8];
				for (int i = 0; i < 8; i++)
				{
					int num = TextButtonIndices[i];
					if (num < transform.childCount)
					{
						TextMeshProUGUI component = ((Component)transform.GetChild(num)).GetComponent<TextMeshProUGUI>();
						if ((Object)(object)component != (Object)null && !string.IsNullOrEmpty(((TMP_Text)component).text))
						{
							array[i] = ((TMP_Text)component).text;
							flag = true;
						}
						else
						{
							array[i] = DefaultNames[i];
						}
					}
					else
					{
						array[i] = DefaultNames[i];
					}
				}
				if (flag)
				{
					for (int j = 0; j < 8; j++)
					{
						if (string.IsNullOrEmpty(array[j]) || array[j].IndexOf("COOL", StringComparison.OrdinalIgnoreCase) >= 0 || array[j].IndexOf("cool", StringComparison.OrdinalIgnoreCase) >= 0)
						{
							array[j] = DefaultNames[j];
						}
					}
					PreferencesCreator.UpdateColorPageNames(array);
					break;
				}
			}
			yield return (object)new WaitForSeconds(1f);
		}
	}
}
public class RadialMenuButtonsUI
{
	private static PageItemView N;

	private static PageItemView NE;

	private static PageItemView E;

	private static PageItemView SE;

	private static PageItemView S;

	private static PageItemView SW;

	private static PageItemView W;

	private static PageItemView NW;

	private static PageElementView M;

	public static void RadialMenuButtons()
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		SetupButton(ref N, "button_Region_N", Colors.North);
		SetupButton(ref NE, "button_Region_NE", Colors.NorthEast);
		SetupButton(ref E, "button_Region_E", Colors.East);
		SetupButton(ref SE, "button_Region_SE", Colors.SouthEast);
		SetupButton(ref S, "button_Region_S", Colors.South);
		SetupButton(ref SW, "button_Region_SW", Colors.SouthWest);
		SetupButton(ref W, "button_Region_W", Colors.West);
		SetupButton(ref NW, "button_Region_NW", Colors.NorthWest);
		SetupCancelButton();
	}

	private static void SetupButton(ref PageItemView field, string objectName, Color activeColor)
	{
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)field == (Object)null)
		{
			foreach (GameObject item in Object.FindObjectsOfType<GameObject>(true))
			{
				if (((Object)item).name == objectName)
				{
					field = item.GetComponent<PageItemView>();
					break;
				}
			}
		}
		if ((Object)(object)field != (Object)null)
		{
			field.color2 = (PreferencesCreator.IsEnabled ? activeColor : Color.white);
		}
	}

	private static void SetupCancelButton()
	{
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)M == (Object)null)
		{
			foreach (GameObject item in Object.FindObjectsOfType<GameObject>(true))
			{
				if (((Object)item).name == "button_cancel")
				{
					M = item.GetComponent<PageElementView>();
					break;
				}
			}
		}
		if ((Object)(object)M != (Object)null)
		{
			if (PreferencesCreator.IsEnabled)
			{
				M.color2 = Colors.Middle;
			}
			else
			{
				M.color2 = new Color(1f, 0.2667f, 0.4824f, 0.749f);
			}
		}
	}
}
public class RadialMenuTextAndImageUI
{
	public static void RadialMenuTextAndImage(Transform parent)
	{
		//IL_0045: 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)
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (((Object)child).name == "text_Information")
			{
				continue;
			}
			if (PreferencesCreator.IsEnabled)
			{
				Color? val = ColorForIndex(i);
				if (val.HasValue)
				{
					Paint(child, val.Value);
				}
			}
			else
			{
				Paint(child, Color.white);
			}
			RadialMenuTextAndImage(child);
		}
	}

	private static Color? ColorForIndex(int i)
	{
		//IL_0007: 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_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0081: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		switch (i)
		{
		case 0:
		case 1:
			return Colors.North;
		case 3:
		case 4:
			return Colors.NorthEast;
		case 6:
		case 7:
			return Colors.East;
		case 9:
		case 10:
			return Colors.SouthEast;
		case 12:
		case 13:
			return Colors.South;
		case 15:
		case 16:
			return Colors.SouthWest;
		case 18:
		case 19:
			return Colors.West;
		case 21:
		case 22:
			return Colors.NorthWest;
		default:
			return null;
		}
	}

	private static void Paint(Transform t, Color color)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		Image component = ((Component)t).GetComponent<Image>();
		if ((Object)(object)component != (Object)null)
		{
			((Graphic)component).color = color;
			return;
		}
		TextMeshProUGUI component2 = ((Component)t).GetComponent<TextMeshProUGUI>();
		if ((Object)(object)component2 != (Object)null)
		{
			((Graphic)component2).color = color;
		}
	}
}
public class SpawnGunUI
{
	public static void SpawnGun(Transform parent)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: 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_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		Color color = (PreferencesCreator.IsEnabled ? Colors.West : Color.white);
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (((Object)child).name == "Background" || (((Object)child).name == "image_backline" && ((Object)((Component)child.parent).gameObject).name == "group_selectedInfo") || ((Object)child).name == "image_bgFade")
			{
				continue;
			}
			Image component = ((Component)child).GetComponent<Image>();
			if ((Object)(object)component != (Object)null)
			{
				((Graphic)component).color = color;
			}
			else
			{
				TextMeshProUGUI component2 = ((Component)child).GetComponent<TextMeshProUGUI>();
				if ((Object)(object)component2 != (Object)null)
				{
					((Graphic)component2).color = color;
				}
				else
				{
					TextMeshPro component3 = ((Component)child).GetComponent<TextMeshPro>();
					if ((Object)(object)component3 != (Object)null)
					{
						((Graphic)component3).color = color;
					}
				}
			}
			SpawnGun(child);
		}
	}
}
public static class TransformPainter
{
	public static void Paint(Transform parent, Color color, HashSet<string> skipList = null)
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < parent.childCount; i++)
		{
			Transform child = parent.GetChild(i);
			if (skipList == null || !skipList.Contains(((Object)child).name))
			{
				TryPaint(child, color);
				Paint(child, color, skipList);
			}
		}
	}

	private static void TryPaint(Transform t, Color color)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		Image component = ((Component)t).GetComponent<Image>();
		if ((Object)(object)component != (Object)null)
		{
			((Graphic)component).color = color;
			return;
		}
		TextMeshProUGUI component2 = ((Component)t).GetComponent<TextMeshProUGUI>();
		if ((Object)(object)component2 != (Object)null)
		{
			((Graphic)component2).color = color;
			return;
		}
		TextMeshPro component3 = ((Component)t).GetComponent<TextMeshPro>();
		if ((Object)(object)component3 != (Object)null)
		{
			((Graphic)component3).color = color;
			return;
		}
		RawImage component4 = ((Component)t).GetComponent<RawImage>();
		if ((Object)(object)component4 != (Object)null)
		{
			((Graphic)component4).color = color;
			return;
		}
		Text component5 = ((Component)t).GetComponent<Text>();
		if ((Object)(object)component5 != (Object)null)
		{
			((Graphic)component5).color = color;
		}
	}
}
public static class Colors
{
	public static Color North = new Color(0f, 1f, 1f, 1f);

	public static Color NorthEast = new Color(1f, 0.5f, 0f, 1f);

	public static Color East = new Color(1f, 1f, 0f, 1f);

	public static Color SouthEast = new Color(0f, 0f, 1f, 1f);

	public static Color South = new Color(1f, 0f, 1f, 1f);

	public static Color SouthWest = new Color(0.5f, 0f, 1f, 1f);

	public static Color West = new Color(1f, 0f, 0f, 1f);

	public static Color NorthWest = new Color(0f, 1f, 0f, 1f);

	public static Color Middle = new Color(1f, 0.2f, 0.2f, 0.7f);

	public static Color Menu = new Color(1f, 1f, 1f, 1f);

	public static readonly Color NorthDefault = new Color(0f, 1f, 1f, 1f);

	public static readonly Color NorthEastDefault = new Color(1f, 0.5f, 0f, 1f);

	public static readonly Color EastDefault = new Color(1f, 1f, 0f, 1f);

	public static readonly Color SouthEastDefault = new Color(0f, 0f, 1f, 1f);

	public static readonly Color SouthDefault = new Color(1f, 0f, 1f, 1f);

	public static readonly Color SouthWestDefault = new Color(0.5f, 0f, 1f, 1f);

	public static readonly Color WestDefault = new Color(1f, 0f, 0f, 1f);

	public static readonly Color NorthWestDefault = new Color(0f, 1f, 0f, 1f);

	public static readonly Color MiddleDefault = new Color(1f, 0.2f, 0.2f, 1f);

	public static readonly Color MenuDefault = new Color(1f, 1f, 1f, 1f);

	public static void LoadFromPrefs()
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_009b: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		North = FromPref(PreferencesCreator.NorthPref, NorthDefault);
		NorthEast = FromPref(PreferencesCreator.NorthEastPref, NorthEastDefault);
		East = FromPref(PreferencesCreator.EastPref, EastDefault);
		SouthEast = FromPref(PreferencesCreator.SouthEastPref, SouthEastDefault);
		South = FromPref(PreferencesCreator.SouthPref, SouthDefault);
		SouthWest = FromPref(PreferencesCreator.SouthWestPref, SouthWestDefault);
		West = FromPref(PreferencesCreator.WestPref, WestDefault);
		NorthWest = FromPref(PreferencesCreator.NorthWestPref, NorthWestDefault);
		Middle = FromPref(PreferencesCreator.MiddlePref, MiddleDefault);
		Menu = FromPref(PreferencesCreator.MenuPref, MenuDefault);
	}

	private static Color FromPref(MelonPreferences_Entry<Color> pref, Color fallback)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		return pref?.Value ?? fallback;
	}
}
internal static class ColorSliders
{
	public static void Create(Page page, Color currentColor, Action<Color> applyCallback)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: 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)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		FunctionElement colorPreview = page.CreateFunction("Preview", currentColor, (Action)null);
		page.CreateFloat("Red", Color.red, currentColor.r, 0.1f, 0f, 1f, (Action<float>)delegate(float r)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.r = r;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Green", Color.green, currentColor.g, 0.1f, 0f, 1f, (Action<float>)delegate(float g)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.g = g;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Blue", Color.blue, currentColor.b, 0.1f, 0f, 1f, (Action<float>)delegate(float b)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.b = b;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Alpha", Color.gray, currentColor.a, 0.1f, 0f, 1f, (Action<float>)delegate(float a)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.a = a;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFunction("Apply", Color.white, (Action)delegate
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			applyCallback(currentColor);
			Main.MoggingTime();
		});
	}

	public static void CreateWithConfirm(Page page, Color currentColor, Action<Color> applyCallback)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: 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)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		FunctionElement colorPreview = page.CreateFunction("Preview", currentColor, (Action)null);
		page.CreateFloat("Red", Color.red, currentColor.r, 0.1f, 0f, 1f, (Action<float>)delegate(float r)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.r = r;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Green", Color.green, currentColor.g, 0.1f, 0f, 1f, (Action<float>)delegate(float g)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.g = g;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Blue", Color.blue, currentColor.b, 0.1f, 0f, 1f, (Action<float>)delegate(float b)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.b = b;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFloat("Alpha", Color.gray, currentColor.a, 0.1f, 0f, 1f, (Action<float>)delegate(float a)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			currentColor.a = a;
			((Element)colorPreview).ElementColor = currentColor;
		});
		page.CreateFunction("Apply", Color.white, (Action)delegate
		{
			Menu.DisplayDialog("Override All Colors", "Are you sure? This will override all colors you've set", (Texture2D)null, (Action)delegate
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				applyCallback(currentColor);
			}, (Action)null);
		});
	}
}
public class Main : MelonMod
{
	public void OnSceneAwake()
	{
		if (PreferencesCreator.IsEnabled)
		{
			MoggingTime();
		}
		RadialMenuButtonsUI.RadialMenuButtons();
		RadialLabelReader.StartPolling();
		PanelPatches.ApplySearchThingPatches();
		ModModuleManager.OnSceneAwakeAll();
	}

	public override void OnInitializeMelon()
	{
		ModModuleManager.Register(new FusionModule());
		Hooking.OnLevelLoaded += delegate
		{
			OnSceneAwake();
		};
		PreferencesCreator.MelonPreferencesCreator();
		Colors.LoadFromPrefs();
		PreferencesCreator.BonemenuCreator();
		PanelPatches.Apply();
	}

	public static void MoggingTime()
	{
		//IL_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_024d: Unknown result type (might be due to invalid IL or missing references)
		//IL_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0283: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
		Colors.LoadFromPrefs();
		foreach (GameObject item in Object.FindObjectsOfType<GameObject>(true))
		{
			if (((Object)item).name.Contains("group_levelSelect"))
			{
				LevelSelectUI.LevelSelect(item.transform);
			}
			else if (((Object)item).name.Contains("panel_Preferences"))
			{
				PreferencesUI.Preferences(item.transform);
			}
			else if (((Object)item).name.Contains("grid_Graphics"))
			{
				PreferencesUI.Extra(item.transform);
			}
			else if (((Object)item).name.Contains("group_toolMenu"))
			{
				SpawnGunUI.SpawnGun(item.transform);
			}
			else if (((Object)item).name.Contains("group_AvatarSelect"))
			{
				AvatarSelectUI.Avatar(item.transform);
			}
			else if (((Object)item).name.Contains("BodyMallController"))
			{
				AvatarSelectUI.Bodymall(item.transform);
			}
			else if (((Object)item).name.Contains("CANVAS_RADIALUI"))
			{
				RadialMenuTextAndImageUI.RadialMenuTextAndImage(item.transform);
			}
			else if (((Object)item).name.Contains("canvasMainMenu"))
			{
				MenuUI.MainMenu(item.transform);
			}
			else if (((Object)item).name.Contains("CANVAS_UX"))
			{
				Transform val = item.transform.Find("MENU");
				if ((Object)(object)val != (Object)null)
				{
					MenuUI.MainMenu(val);
				}
			}
			else if (((Object)item).name.Contains("GashaponMachine"))
			{
				Transform val2 = item.transform.Find("UI");
				if ((Object)(object)val2 != (Object)null)
				{
					TransformPainter.Paint(val2, PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
				}
			}
			else if (((Object)item).name.Contains("slot_target"))
			{
				InventorySlotsUI.Paint(item.transform, PreferencesCreator.IsEnabled ? Colors.South : Color.white);
			}
			else if (((Object)item).name == "CANVAS_INFOBOARD")
			{
				InfoBoardUI.Paint(item.transform);
			}
			else if (((Object)item).name == "HighscoreLeaderboard_UI_Group")
			{
				InfoBoardUI.PaintLeaderboard(item.transform);
			}
			else if (((Object)item).name == "SpawnableCanvas")
			{
				TransformPainter.Paint(item.transform, PreferencesCreator.IsEnabled ? Colors.West : Color.white);
			}
			else if (((Object)item).name.Contains("GameControl_Display"))
			{
				TransformPainter.Paint(item.transform, PreferencesCreator.IsEnabled ? Colors.Menu : Color.white);
			}
			else if (((Object)item).name.Contains("ui_Module"))
			{
				HashSet<string> skipList = new HashSet<string> { "popup_MOD WARNING", "popup_AVATARWARNING" };
				TransformPainter.Paint(item.transform, PreferencesCreator.IsEnabled ? Colors.Menu : Color.white, skipList);
			}
			ModModuleManager.OnMoggingTimeAll(item);
		}
		BoneMenuUI.Paint();
		RadialMenuButtonsUI.RadialMenuButtons();
	}
}
internal static class PanelPatches
{
	private static bool _searchThingPatched;

	public static void Apply()
	{
		TryPatch<LevelsPanelView>("OnEnable");
		TryPatch<AvatarsPanelView>("OnEnable");
	}

	public static void ApplySearchThingPatches()
	{
		if (!_searchThingPatched)
		{
			_searchThingPatched = true;
			TryPatchByName("SearchThing.Extensions.SpawnablePanelExtension", "Show");
			TryPatchByName("SearchThing.Extensions.SpawnablePanelExtension", "RenderAll");
		}
	}

	private static void TryPatch<T>(string methodName)
	{
		//IL_005c: 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
		BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
		MethodInfo method = typeof(T).GetMethod(methodName, bindingAttr);
		if (method == null)
		{
			MelonLogger.Warning("Could not find " + methodName + " on " + typeof(T).Name);
			return;
		}
		Harmony val = new Harmony("Colorful." + typeof(T).Name);
		HarmonyMethod val2 = new HarmonyMethod(typeof(PanelPatches), "OnPanelEnabled", (Type[])null);
		val.Patch((MethodBase)method, (HarmonyMethod)null, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		MelonLogger.Msg("Patched " + typeof(T).Name + "." + methodName);
	}

	private static void TryPatchByName(string typeName, string methodName)
	{
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Expected O, but got Unknown
		Type type = FindTypeByName(typeName);
		if (type == null)
		{
			MelonLogger.Msg($"Type {typeName} not found, skipping {methodName} patch");
			return;
		}
		BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
		MethodInfo method = type.GetMethod(methodName, bindingAttr);
		if (method == null)
		{
			MelonLogger.Warning("Could not find " + methodName + " on " + typeName);
			return;
		}
		Harmony val = new Harmony("Colorful." + typeName);
		HarmonyMethod val2 = new HarmonyMethod(typeof(PanelPatches), "OnSearchThingShow", (Type[])null);
		val.Patch((MethodBase)method, (HarmonyMethod)null, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		MelonLogger.Msg("Patched " + typeName + "." + methodName);
	}

	private static Type FindTypeByName(string typeName)
	{
		Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
		for (int i = 0; i < assemblies.Length; i++)
		{
			Type type = assemblies[i].GetType(typeName);
			if (type != null)
			{
				return type;
			}
		}
		foreach (MelonMod registeredMelon in MelonTypeBase<MelonMod>.RegisteredMelons)
		{
			MelonAssembly melonAssembly = ((MelonBase)registeredMelon).MelonAssembly;
			if (!(((melonAssembly != null) ? melonAssembly.Assembly : null) == null))
			{
				Type type2 = ((MelonBase)registeredMelon).MelonAssembly.Assembly.GetType(typeName);
				if (type2 != null)
				{
					return type2;
				}
			}
		}
		return null;
	}

	private static void OnSearchThingShow(object __instance)
	{
		if (!PreferencesCreator.IsEnabled || __instance == null)
		{
			return;
		}
		PropertyInfo property = __instance.GetType().GetProperty("PanelView");
		if (property == null)
		{
			return;
		}
		object? value = property.GetValue(__instance);
		Component val = (Component)((value is Component) ? value : null);
		if (!((Object)(object)val == (Object)null))
		{
			Transform val2 = val.transform;
			while ((Object)(object)val2.parent != (Object)null)
			{
				val2 = val2.parent;
			}
			Transform val3 = val2.Find("group_toolMenu");
			if ((Object)(object)val3 != (Object)null)
			{
				SpawnGunUI.SpawnGun(val3);
			}
		}
	}

	private static void OnPanelEnabled(MonoBehaviour __instance)
	{
		if (PreferencesCreator.IsEnabled && !((Object)(object)__instance == (Object)null))
		{
			Transform transform = ((Component)__instance).transform;
			if (__instance is LevelsPanelView)
			{
				LevelSelectUI.LevelSelect(transform);
			}
			else if (__instance is AvatarsPanelView)
			{
				AvatarSelectUI.Avatar(transform);
			}
		}
	}
}