Decompiled source of REPOConfig v1.2.2

REPOConfig.dll

Decompiled a day ago
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.Versioning;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using MenuLib;
using MenuLib.MonoBehaviors;
using MenuLib.Structs;
using Microsoft.CodeAnalysis;
using MonoMod.RuntimeDetour;
using TMPro;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("REPOConfig")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.2")]
[assembly: AssemblyInformationalVersion("1.1.8+0e6abbd5173e15b6a0a267663eda01dba538620d")]
[assembly: AssemblyProduct("REPOConfig")]
[assembly: AssemblyTitle("REPOConfig")]
[assembly: AssemblyVersion("1.2.2.0")]
[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;
		}
	}
}
namespace REPOConfig
{
	internal sealed class ConfigMenu
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static BuilderDelegate <>9__5_0;

			public static BuilderDelegate <>9__5_1;

			public static BuilderDelegate <>9__5_2;

			public static Action <>9__6_4;

			public static Action <>9__6_8;

			public static Action <>9__7_3;

			public static ShouldCloseMenuDelegate <>9__7_5;

			public static Action <>9__7_10;

			public static BuilderDelegate <>9__7_6;

			public static ScrollViewBuilderDelegate <>9__7_9;

			public static Func<ConfigEntryBase, string> <>9__8_0;

			public static ScrollViewBuilderDelegate <>9__8_2;

			public static Func<PluginInfo, string> <>9__9_0;

			public static Func<KeyValuePair<ConfigDefinition, ConfigEntryBase>, ConfigEntryBase> <>9__9_1;

			internal void <Initialize>b__5_0(Transform parent)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(48.3f, 55.5f));
			}

			internal void <Initialize>b__5_1(Transform parent)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(186f, 32f));
			}

			internal void <Initialize>b__5_2(Transform parent)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(126f, 86f));
			}

			internal void <CreateModMenu>b__6_4()
			{
				hasPopupMenuOpened = false;
			}

			internal void <CreateModMenu>b__6_8()
			{
				hasPopupMenuOpened = false;
			}

			internal void <CreateModList>b__7_3()
			{
				hasPopupMenuOpened = false;
			}

			internal bool <CreateModList>b__7_5()
			{
				if (!hasPopupMenuOpened)
				{
					return changedEntryValues.Count == 0;
				}
				return false;
			}

			internal void <CreateModList>b__7_6(Transform mainPageParent)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				MenuAPI.CreateREPOButton("Save Changes", (Action)delegate
				{
					KeyValuePair<ConfigEntryBase, object>[] array = changedEntryValues.ToArray();
					changedEntryValues.Clear();
					KeyValuePair<ConfigEntryBase, object>[] array2 = array;
					for (int i = 0; i < array2.Length; i++)
					{
						KeyValuePair<ConfigEntryBase, object> keyValuePair = array2[i];
						var (val2, obj2) = (KeyValuePair<ConfigEntryBase, object>)(ref keyValuePair);
						object value = (val2.BoxedValue = obj2);
						originalEntryValues[val2] = value;
					}
				}, mainPageParent, new Vector2(370f, 18f));
			}

			internal void <CreateModList>b__7_10()
			{
				KeyValuePair<ConfigEntryBase, object>[] array = changedEntryValues.ToArray();
				changedEntryValues.Clear();
				KeyValuePair<ConfigEntryBase, object>[] array2 = array;
				for (int i = 0; i < array2.Length; i++)
				{
					KeyValuePair<ConfigEntryBase, object> keyValuePair = array2[i];
					var (val2, obj2) = (KeyValuePair<ConfigEntryBase, object>)(ref keyValuePair);
					object value = (val2.BoxedValue = obj2);
					originalEntryValues[val2] = value;
				}
			}

			internal RectTransform <CreateModList>b__7_9(Transform scrollView)
			{
				//IL_0014: 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_001b: Unknown result type (might be due to invalid IL or missing references)
				Vector2 val = default(Vector2);
				((Vector2)(ref val))..ctor(0f, 10f);
				return ((REPOElement)MenuAPI.CreateREPOSpacer(scrollView, default(Vector2), val)).rectTransform;
			}

			internal string <CreateModEntries>b__8_0(ConfigEntryBase entry)
			{
				return entry.Definition.Section;
			}

			internal RectTransform <CreateModEntries>b__8_2(Transform scrollView)
			{
				//IL_0014: 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_001b: Unknown result type (might be due to invalid IL or missing references)
				Vector2 val = default(Vector2);
				((Vector2)(ref val))..ctor(0f, 20f);
				return ((REPOElement)MenuAPI.CreateREPOSpacer(scrollView, default(Vector2), val)).rectTransform;
			}

			internal string <GetModConfigEntries>b__9_0(PluginInfo p)
			{
				return p.Metadata.Name;
			}

			internal ConfigEntryBase <GetModConfigEntries>b__9_1(KeyValuePair<ConfigDefinition, ConfigEntryBase> configEntry)
			{
				return configEntry.Value;
			}
		}

		private static readonly Dictionary<ConfigEntryBase, object> changedEntryValues = new Dictionary<ConfigEntryBase, object>();

		private static readonly Dictionary<ConfigEntryBase, object> originalEntryValues = new Dictionary<ConfigEntryBase, object>();

		internal static REPOButton lastClickedModButton;

		private static readonly List<REPOButton> currentModButtons = new List<REPOButton>();

		private static bool hasPopupMenuOpened;

		internal static void Initialize()
		{
			//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_001f: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Expected O, but got Unknown
			//IL_005c: 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_0067: Expected O, but got Unknown
			object obj = <>c.<>9__5_0;
			if (obj == null)
			{
				BuilderDelegate val = delegate(Transform parent)
				{
					//IL_002b: Unknown result type (might be due to invalid IL or missing references)
					MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(48.3f, 55.5f));
				};
				<>c.<>9__5_0 = val;
				obj = (object)val;
			}
			MenuAPI.AddElementToMainMenu((BuilderDelegate)obj);
			object obj2 = <>c.<>9__5_1;
			if (obj2 == null)
			{
				BuilderDelegate val2 = delegate(Transform parent)
				{
					//IL_002b: Unknown result type (might be due to invalid IL or missing references)
					MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(186f, 32f));
				};
				<>c.<>9__5_1 = val2;
				obj2 = (object)val2;
			}
			MenuAPI.AddElementToLobbyMenu((BuilderDelegate)obj2);
			object obj3 = <>c.<>9__5_2;
			if (obj3 == null)
			{
				BuilderDelegate val3 = delegate(Transform parent)
				{
					//IL_002b: Unknown result type (might be due to invalid IL or missing references)
					MenuAPI.CreateREPOButton("Mods", (Action)CreateModMenu, parent, new Vector2(126f, 86f));
				};
				<>c.<>9__5_2 = val3;
				obj3 = (object)val3;
			}
			MenuAPI.AddElementToEscapeMenu((BuilderDelegate)obj3);
		}

		private static void CreateModMenu()
		{
			//IL_0054: 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_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Expected O, but got Unknown
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Expected O, but got Unknown
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Expected O, but got Unknown
			changedEntryValues.Clear();
			lastClickedModButton = null;
			REPOPopupPage repoPopupPage = MenuAPI.CreateREPOPopupPage("Mods", (PresetSide)0, false, true, 0f);
			repoPopupPage.scrollView.scrollSpeed = 3f;
			REPOPopupPage obj = repoPopupPage;
			Padding maskPadding = repoPopupPage.maskPadding;
			maskPadding.top = 35f;
			obj.maskPadding = maskPadding;
			REPOPopupPage obj2 = repoPopupPage;
			obj2.onEscapePressed = (ShouldCloseMenuDelegate)Delegate.Combine((Delegate?)(object)obj2.onEscapePressed, (Delegate?)(ShouldCloseMenuDelegate)delegate
			{
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				if (hasPopupMenuOpened)
				{
					return false;
				}
				if (changedEntryValues.Count == 0)
				{
					return true;
				}
				MenuAPI.OpenPopup("Unsaved Changes", Color.red, "You have unsaved changes, are you sure you want to exit?", (Action)delegate
				{
					repoPopupPage.ClosePage(true);
					changedEntryValues.Clear();
					hasPopupMenuOpened = false;
				}, (Action)delegate
				{
					hasPopupMenuOpened = false;
				});
				hasPopupMenuOpened = true;
				return false;
			});
			repoPopupPage.AddElement((BuilderDelegate)delegate(Transform parent)
			{
				//IL_002f: 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_0053: Unknown result type (might be due to invalid IL or missing references)
				((Component)MenuAPI.CreateREPOInputField("Mod Search", (Action<string>)delegate(string s)
				{
					string text = (string.IsNullOrEmpty(s) ? null : s.ToLower().Trim());
					foreach (REPOButton currentModButton in currentModButtons)
					{
						((REPOElement)currentModButton).repoScrollViewElement.visibility = text == null || ((TMP_Text)currentModButton.labelTMP).text.ToLower().Contains(text);
					}
					repoPopupPage.scrollView.SetScrollPosition(0f);
				}, parent, new Vector2(83f, 272f), false, "", "")).transform.localScale = Vector3.one * 0.95f;
			});
			CreateModList(repoPopupPage);
			repoPopupPage.AddElement((BuilderDelegate)delegate(Transform parent)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				MenuAPI.CreateREPOButton("Back", (Action)delegate
				{
					//IL_0025: Unknown result type (might be due to invalid IL or missing references)
					if (changedEntryValues.Count == 0 || hasPopupMenuOpened)
					{
						repoPopupPage.ClosePage(true);
					}
					else
					{
						MenuAPI.OpenPopup("Unsaved Changes", Color.red, "You have unsaved changes, are you sure you want to exit?", (Action)delegate
						{
							repoPopupPage.ClosePage(true);
							changedEntryValues.Clear();
							hasPopupMenuOpened = false;
						}, (Action)delegate
						{
							hasPopupMenuOpened = false;
						});
						hasPopupMenuOpened = true;
					}
				}, parent, new Vector2(66f, 18f));
			});
			repoPopupPage.OpenPage(false);
		}

		private static void CreateModList(REPOPopupPage mainModPage)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			currentModButtons.Clear();
			foreach (KeyValuePair<string, ConfigEntryBase[]> modConfigEntry in GetModConfigEntries())
			{
				var (modName, configEntryBases) = (KeyValuePair<string, ConfigEntryBase[]>)(ref modConfigEntry);
				mainModPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform parent)
				{
					//IL_0018: 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_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_0067: Unknown result type (might be due to invalid IL or missing references)
					REPOButton modButton = MenuAPI.CreateREPOButton(modName, (Action)null, parent, default(Vector2));
					((TMP_Text)modButton.labelTMP).fontStyle = (FontStyles)0;
					if (modName.Length > 24)
					{
						REPOButton obj = modButton;
						Vector2 labelSize = modButton.GetLabelSize();
						labelSize.x = 250f;
						obj.overrideButtonSize = labelSize;
						REPOTextScroller val = ((Component)modButton.labelTMP).gameObject.AddComponent<REPOTextScroller>();
						val.maxCharacters = 24;
						((MonoBehaviour)MenuManager.instance).StartCoroutine(val.Animate());
					}
					BuilderDelegate val2 = default(BuilderDelegate);
					modButton.onClick = delegate
					{
						//IL_002b: Unknown result type (might be due to invalid IL or missing references)
						if (!((Object)(object)lastClickedModButton == (Object)(object)modButton))
						{
							if (changedEntryValues.Count == 0)
							{
								OpenPage();
							}
							else
							{
								MenuAPI.OpenPopup("Unsaved Changes", Color.red, "You have unsaved changes, are you sure you want to exit?", (Action)delegate
								{
									changedEntryValues.Clear();
									OpenPage();
									hasPopupMenuOpened = false;
								}, (Action)delegate
								{
									hasPopupMenuOpened = false;
								});
								hasPopupMenuOpened = true;
							}
						}
					};
					currentModButtons.Add(modButton);
					return ((REPOElement)modButton).rectTransform;
					void OpenPage()
					{
						//IL_0064: 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_006f: Expected O, but got Unknown
						//IL_008e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0093: Unknown result type (might be due to invalid IL or missing references)
						//IL_0099: Expected O, but got Unknown
						//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
						//IL_00e9: Expected O, but got Unknown
						//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
						//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
						//IL_00bd: Expected O, but got Unknown
						//IL_00c2: Expected O, but got Unknown
						//IL_0103: Unknown result type (might be due to invalid IL or missing references)
						//IL_0108: Unknown result type (might be due to invalid IL or missing references)
						//IL_010e: Expected O, but got Unknown
						MenuAPI.CloseAllPagesAddedOnTop();
						REPOPopupPage modPage = MenuAPI.CreateREPOPopupPage(modName, (PresetSide)1, false, false, 5f);
						modPage.scrollView.scrollSpeed = 3f;
						REPOPopupPage obj3 = modPage;
						object obj4 = <>c.<>9__7_5;
						if (obj4 == null)
						{
							ShouldCloseMenuDelegate val3 = () => !hasPopupMenuOpened && changedEntryValues.Count == 0;
							<>c.<>9__7_5 = val3;
							obj4 = (object)val3;
						}
						obj3.onEscapePressed = (ShouldCloseMenuDelegate)obj4;
						REPOPopupPage obj5 = modPage;
						object obj6 = <>c.<>9__7_6;
						if (obj6 == null)
						{
							BuilderDelegate val4 = delegate(Transform mainPageParent)
							{
								//IL_002f: Unknown result type (might be due to invalid IL or missing references)
								MenuAPI.CreateREPOButton("Save Changes", (Action)delegate
								{
									KeyValuePair<ConfigEntryBase, object>[] array3 = changedEntryValues.ToArray();
									changedEntryValues.Clear();
									KeyValuePair<ConfigEntryBase, object>[] array4 = array3;
									for (int j = 0; j < array4.Length; j++)
									{
										KeyValuePair<ConfigEntryBase, object> keyValuePair2 = array4[j];
										var (val11, obj12) = (KeyValuePair<ConfigEntryBase, object>)(ref keyValuePair2);
										object value = (val11.BoxedValue = obj12);
										originalEntryValues[val11] = value;
									}
								}, mainPageParent, new Vector2(370f, 18f));
							};
							<>c.<>9__7_6 = val4;
							obj6 = (object)val4;
						}
						obj5.AddElement((BuilderDelegate)obj6);
						REPOPopupPage obj7 = modPage;
						BuilderDelegate obj8 = val2;
						if (obj8 == null)
						{
							BuilderDelegate val5 = delegate(Transform mainPageParent)
							{
								//IL_002f: Unknown result type (might be due to invalid IL or missing references)
								MenuAPI.CreateREPOButton("Revert", (Action)delegate
								{
									if (changedEntryValues.Count != 0)
									{
										changedEntryValues.Clear();
										OpenPage();
									}
								}, mainPageParent, new Vector2(585f, 18f));
							};
							BuilderDelegate val6 = val5;
							val2 = val5;
							obj8 = val6;
						}
						obj7.AddElement(obj8);
						modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
						{
							//IL_0036: Unknown result type (might be due to invalid IL or missing references)
							//IL_003c: Unknown result type (might be due to invalid IL or missing references)
							//IL_0054: 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_0062: Unknown result type (might be due to invalid IL or missing references)
							//IL_0078: 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)
							REPOButton val9 = MenuAPI.CreateREPOButton("Reset To Default", (Action)delegate
							{
								//IL_0059: Unknown result type (might be due to invalid IL or missing references)
								MenuAPI.OpenPopup("Reset " + modName + "'" + (modName.ToLower().EndsWith('s') ? string.Empty : "s") + " settings?", Color.red, "Are you sure you want to reset all settings back to default?", (Action)ResetToDefault, (Action)null);
							}, scrollView, default(Vector2));
							RectTransform rectTransform = ((REPOElement)val9).rectTransform;
							Rect rect = modPage.maskRectTransform.rect;
							((Transform)rectTransform).localPosition = Vector2.op_Implicit(new Vector2((((Rect)(ref rect)).width - val9.GetLabelSize().x) * 0.5f, 0f));
							return ((REPOElement)val9).rectTransform;
						}, 0f, 0f);
						REPOPopupPage obj9 = modPage;
						object obj10 = <>c.<>9__7_9;
						if (obj10 == null)
						{
							ScrollViewBuilderDelegate val7 = delegate(Transform scrollView)
							{
								//IL_0014: 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_001b: Unknown result type (might be due to invalid IL or missing references)
								Vector2 val8 = default(Vector2);
								((Vector2)(ref val8))..ctor(0f, 10f);
								return ((REPOElement)MenuAPI.CreateREPOSpacer(scrollView, default(Vector2), val8)).rectTransform;
							};
							<>c.<>9__7_9 = val7;
							obj10 = (object)val7;
						}
						obj9.AddElementToScrollView((ScrollViewBuilderDelegate)obj10, 0f, 0f);
						CreateModEntries(modPage, configEntryBases);
						modPage.OpenPage(true);
						lastClickedModButton = modButton;
					}
					void ResetToDefault()
					{
						ConfigEntryBase[] array2 = configEntryBases;
						foreach (ConfigEntryBase obj2 in array2)
						{
							obj2.BoxedValue = obj2.DefaultValue;
						}
						changedEntryValues.Clear();
						OpenPage();
					}
				}, 0f, 0f);
			}
		}

		private static void CreateModEntries(REPOPopupPage modPage, ConfigEntryBase[] configEntryBases)
		{
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Expected O, but got Unknown
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Expected O, but got Unknown
			//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f8: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Expected O, but got Unknown
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Expected O, but got Unknown
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Expected O, but got Unknown
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Expected O, but got Unknown
			foreach (IGrouping<string, ConfigEntryBase> group in from entry in configEntryBases
				group entry by entry.Definition.Section)
			{
				modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
				{
					//IL_0013: 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)
					REPOLabel obj7 = MenuAPI.CreateREPOLabel(FixNaming(group.Key), scrollView, default(Vector2));
					((TMP_Text)obj7.labelTMP).fontStyle = (FontStyles)1;
					return ((REPOElement)obj7).rectTransform;
				}, 0f, 0f);
				foreach (ConfigEntryBase entry2 in group)
				{
					string modName = FixNaming(entry2.Definition.Key);
					originalEntryValues.Remove(entry2);
					originalEntryValues.Add(entry2, entry2.BoxedValue);
					ConfigEntryBase val = entry2;
					if (!(val is ConfigEntry<bool>))
					{
						if (!(val is ConfigEntry<float>))
						{
							if (!(val is ConfigEntry<int>))
							{
								if (!(val is ConfigEntry<string>))
								{
									if (val == null || !entry2.SettingType.IsSubclassOf(typeof(Enum)))
									{
										continue;
									}
									Type enumType = entry2.SettingType;
									string[] values = Enum.GetNames(enumType);
									modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
									{
										//IL_005c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
										//IL_0088: Unknown result type (might be due to invalid IL or missing references)
										REPOSlider val11 = MenuAPI.CreateREPOSlider(modName, string.Empty, (Action<int>)delegate(int i)
										{
											object obj6 = Enum.Parse(enumType, values[i]);
											if (originalEntryValues.TryGetValue(entry2, out var value6) && obj6 == value6)
											{
												changedEntryValues.Remove(entry2);
											}
											else
											{
												changedEntryValues[entry2] = obj6;
											}
										}, scrollView, values, entry2.BoxedValue.ToString(), default(Vector2), "", "", (BarBehavior)0);
										TextMeshProUGUI descriptionTMP4 = val11.descriptionTMP;
										TextMeshProUGUI labelTMP5 = val11.labelTMP;
										FontStyles fontStyle5 = (FontStyles)0;
										((TMP_Text)labelTMP5).fontStyle = (FontStyles)0;
										((TMP_Text)descriptionTMP4).fontStyle = fontStyle5;
										return ((REPOElement)val11).rectTransform;
									}, 0f, 0f);
									continue;
								}
								AcceptableValueBase acceptableValues = entry2.Description.AcceptableValues;
								AcceptableValueList<string> val2 = acceptableValues as AcceptableValueList<string>;
								if (val2 != null)
								{
									modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
									{
										//IL_0075: 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_009b: Unknown result type (might be due to invalid IL or missing references)
										//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
										REPOSlider val10 = MenuAPI.CreateREPOSlider(modName, string.Empty, (Action<string>)delegate(string s)
										{
											if (originalEntryValues.TryGetValue(entry2, out var value5) && s == (string)value5)
											{
												changedEntryValues.Remove(entry2);
											}
											else
											{
												changedEntryValues[entry2] = s;
											}
										}, scrollView, val2.AcceptableValues, (string)entry2.BoxedValue, default(Vector2), "", "", (BarBehavior)0);
										TextMeshProUGUI descriptionTMP3 = val10.descriptionTMP;
										TextMeshProUGUI labelTMP4 = val10.labelTMP;
										FontStyles fontStyle4 = (FontStyles)0;
										((TMP_Text)labelTMP4).fontStyle = (FontStyles)0;
										((TMP_Text)descriptionTMP3).fontStyle = fontStyle4;
										return ((REPOElement)val10).rectTransform;
									}, 0f, 0f);
									continue;
								}
								modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
								{
									//IL_004b: 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_0095: Unknown result type (might be due to invalid IL or missing references)
									string text4 = (string)entry2.DefaultValue;
									REPOInputField val9 = MenuAPI.CreateREPOInputField(modName, (Action<string>)delegate(string s)
									{
										if (originalEntryValues.TryGetValue(entry2, out var value4) && s == (string)value4)
										{
											changedEntryValues.Remove(entry2);
										}
										else
										{
											changedEntryValues[entry2] = s;
										}
									}, scrollView, Vector2.zero, false, (!string.IsNullOrEmpty(text4)) ? text4 : "<NONE>", (string)entry2.BoxedValue);
									TextMeshProUGUI labelTMP3 = val9.labelTMP;
									TMP_Text inputTMP = val9.inputStringSystem.inputTMP;
									FontStyles fontStyle3 = (FontStyles)0;
									inputTMP.fontStyle = (FontStyles)0;
									((TMP_Text)labelTMP3).fontStyle = fontStyle3;
									return ((REPOElement)val9).rectTransform;
								}, 0f, 0f);
								continue;
							}
							modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
							{
								//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
								//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
								//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
								//IL_0103: Unknown result type (might be due to invalid IL or missing references)
								int num9;
								int num10;
								int num12;
								if (entry2.Description.AcceptableValues is AcceptableValueRange<int> val7)
								{
									num9 = val7.MinValue;
									num10 = val7.MaxValue;
								}
								else
								{
									int num11 = Math.Abs((int)entry2.BoxedValue);
									num12 = ((num11 > 100) ? (-(num10 = num11 * 2)) : ((num11 != 0) ? (-(num10 = num11 * 3)) : (-(num10 = 100))));
									num9 = num12;
								}
								string text3 = modName;
								string empty2 = string.Empty;
								Action<int> obj5 = delegate(int i)
								{
									if (originalEntryValues.TryGetValue(entry2, out var value3) && i == (int)value3)
									{
										changedEntryValues.Remove(entry2);
									}
									else
									{
										changedEntryValues[entry2] = i;
									}
								};
								num12 = (int)entry2.BoxedValue;
								int num13 = num9;
								int num14 = num10;
								REPOSlider val8 = MenuAPI.CreateREPOSlider(text3, empty2, obj5, scrollView, default(Vector2), num13, num14, num12, "", "", (BarBehavior)0);
								TextMeshProUGUI descriptionTMP2 = val8.descriptionTMP;
								TextMeshProUGUI labelTMP2 = val8.labelTMP;
								FontStyles fontStyle2 = (FontStyles)0;
								((TMP_Text)labelTMP2).fontStyle = (FontStyles)0;
								((TMP_Text)descriptionTMP2).fontStyle = fontStyle2;
								return ((REPOElement)val8).rectTransform;
							}, 0f, 0f);
							continue;
						}
						modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
						{
							//IL_0155: Unknown result type (might be due to invalid IL or missing references)
							//IL_015b: Unknown result type (might be due to invalid IL or missing references)
							//IL_0187: Unknown result type (might be due to invalid IL or missing references)
							//IL_018e: Unknown result type (might be due to invalid IL or missing references)
							int num = 2;
							float num2;
							float num3;
							if (entry2.Description.AcceptableValues is AcceptableValueRange<float> val5)
							{
								num2 = val5.MinValue;
								num3 = val5.MaxValue;
								num = Mathf.Max(new int[4]
								{
									GetDecimalPlaces(num2),
									GetDecimalPlaces(num3),
									GetDecimalPlaces((float)entry2.DefaultValue),
									2
								});
							}
							else
							{
								float num4 = Math.Abs((float)entry2.BoxedValue);
								num2 = ((num4 == 0f) ? (0f - (num3 = 100f)) : (((double)num4 <= 0.001) ? (0f - (num3 = 10f)) : (((double)num4 <= 0.01) ? (0f - (num3 = 50f)) : ((!(num4 <= 100f)) ? (0f - (num3 = num4 * 2f)) : (0f - (num3 = num4 * 3f))))));
							}
							string text2 = modName;
							string empty = string.Empty;
							Action<float> obj4 = delegate(float f)
							{
								if (originalEntryValues.TryGetValue(entry2, out var value2) && Math.Abs(f - (float)value2) < float.Epsilon)
								{
									changedEntryValues.Remove(entry2);
								}
								else
								{
									changedEntryValues[entry2] = f;
								}
							};
							float num5 = (float)entry2.BoxedValue;
							float num6 = num2;
							float num7 = num3;
							int num8 = num;
							REPOSlider val6 = MenuAPI.CreateREPOSlider(text2, empty, obj4, scrollView, default(Vector2), num6, num7, num8, num5, "", "", (BarBehavior)0);
							TextMeshProUGUI descriptionTMP = val6.descriptionTMP;
							TextMeshProUGUI labelTMP = val6.labelTMP;
							FontStyles fontStyle = (FontStyles)0;
							((TMP_Text)labelTMP).fontStyle = (FontStyles)0;
							((TMP_Text)descriptionTMP).fontStyle = fontStyle;
							return ((REPOElement)val6).rectTransform;
						}, 0f, 0f);
						continue;
					}
					modPage.AddElementToScrollView((ScrollViewBuilderDelegate)delegate(Transform scrollView)
					{
						//IL_004d: Unknown result type (might be due to invalid IL or missing references)
						//IL_0053: Unknown result type (might be due to invalid IL or missing references)
						string text = modName;
						Action<bool> obj2 = delegate(bool b)
						{
							if (originalEntryValues.TryGetValue(entry2, out var value) && b == (bool)value)
							{
								changedEntryValues.Remove(entry2);
							}
							else
							{
								changedEntryValues[entry2] = b;
							}
						};
						bool flag = (bool)entry2.BoxedValue;
						REPOToggle obj3 = MenuAPI.CreateREPOToggle(text, obj2, scrollView, default(Vector2), "ON", "OFF", flag);
						((TMP_Text)obj3.labelTMP).fontStyle = (FontStyles)0;
						return ((REPOElement)obj3).rectTransform;
					}, 0f, 0f);
				}
				object obj = <>c.<>9__8_2;
				if (obj == null)
				{
					ScrollViewBuilderDelegate val3 = delegate(Transform scrollView)
					{
						//IL_0014: 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_001b: Unknown result type (might be due to invalid IL or missing references)
						Vector2 val4 = default(Vector2);
						((Vector2)(ref val4))..ctor(0f, 20f);
						return ((REPOElement)MenuAPI.CreateREPOSpacer(scrollView, default(Vector2), val4)).rectTransform;
					};
					<>c.<>9__8_2 = val3;
					obj = (object)val3;
				}
				modPage.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f);
			}
		}

		private static Dictionary<string, ConfigEntryBase[]> GetModConfigEntries()
		{
			Dictionary<string, ConfigEntryBase[]> dictionary = new Dictionary<string, ConfigEntryBase[]>();
			foreach (PluginInfo item in Chainloader.PluginInfos.Values.OrderBy((PluginInfo p) => p.Metadata.Name))
			{
				List<ConfigEntryBase> list = new List<ConfigEntryBase>();
				foreach (ConfigEntryBase item2 in ((IEnumerable<KeyValuePair<ConfigDefinition, ConfigEntryBase>>)item.Instance.Config).Select((KeyValuePair<ConfigDefinition, ConfigEntryBase> configEntry) => configEntry.Value))
				{
					ConfigDescription description = item2.Description;
					object[] array = ((description != null) ? description.Tags : null);
					if (array == null || (!array.Contains("HideREPOConfig") && !array.Contains("HideFromREPOConfig")))
					{
						list.Add(item2);
					}
				}
				if (list.Count > 0)
				{
					dictionary.TryAdd(FixNaming(item.Metadata.Name), list.ToArray());
				}
			}
			return dictionary;
		}

		private static string FixNaming(string input)
		{
			input = Regex.Replace(input, "([a-z])([A-Z])", "$1 $2");
			input = Regex.Replace(input, "([A-Z])([A-Z][a-z])", "$1 $2");
			input = Regex.Replace(input, "\\s+", " ");
			input = Regex.Replace(input, "([A-Z]\\.)\\s([A-Z]\\.)", "$1$2");
			return input.Trim();
		}

		private static int GetDecimalPlaces(float value)
		{
			string text = value.ToString(CultureInfo.InvariantCulture);
			int num = text.IndexOf('.');
			if (num != -1)
			{
				string text2 = text;
				int num2 = num + 1;
				return text2.Substring(num2, text2.Length - num2).Length;
			}
			return 0;
		}
	}
	[BepInPlugin("nickklmao.repoconfig", "REPOConfig", "1.2.2")]
	[BepInDependency("nickklmao.menulib", "2.4.1")]
	internal sealed class Entry : BaseUnityPlugin
	{
		private const string MOD_NAME = "REPOConfig";

		internal static readonly ManualLogSource logger = Logger.CreateLogSource("REPOConfig");

		private static ConfigEntry<bool> showInGame;

		private static void MenuPageMain_StartHook(Action<MenuPageMain> orig, MenuPageMain self)
		{
			//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_0090: Unknown result type (might be due to invalid IL or missing references)
			IOrderedEnumerable<Transform> orderedEnumerable = from Transform transform in (IEnumerable)((Component)self).transform
				where ((Object)transform).name.Contains("Menu Button")
				orderby transform.localPosition.y descending
				select transform;
			float num = 224f;
			foreach (Transform item in orderedEnumerable)
			{
				if (((Object)item).name.Contains("Quit"))
				{
					num -= 34f;
				}
				Vector3 localPosition = item.localPosition;
				localPosition.y = num;
				item.localPosition = localPosition;
				num -= 34f;
			}
			orig(self);
		}

		private void Awake()
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			showInGame = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Show In Game", true, new ConfigDescription(string.Empty, (AcceptableValueBase)null, new object[1] { "HideFromREPOConfig" }));
			if (showInGame.Value)
			{
				logger.LogDebug((object)"Hooking `MenuPageMain.Start`");
				new Hook((MethodBase)AccessTools.Method(typeof(MenuPageMain), "Start", (Type[])null, (Type[])null), (Delegate)new Action<Action<MenuPageMain>, MenuPageMain>(MenuPageMain_StartHook));
				ConfigMenu.Initialize();
			}
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
	[Obsolete("This attribute is not used and will be removed eventually.")]
	public class REPOConfigEntryAttribute : Attribute
	{
		public REPOConfigEntryAttribute(string displayName)
		{
		}

		public REPOConfigEntryAttribute(string displayName, int min, int max, string prefix = "", string postfix = "")
		{
		}

		public REPOConfigEntryAttribute(string displayName, float min, float max, string prefix = "", string postfix = "")
		{
		}

		public REPOConfigEntryAttribute(string displayName, float min, float max, int precision = 2, string prefix = "", string postfix = "")
		{
		}

		public REPOConfigEntryAttribute(string displayName, string prefix = "", string postfix = "")
		{
		}

		public REPOConfigEntryAttribute(string displayName, params string[] customOptions)
		{
		}
	}
}