Decompiled source of StatusQuo v1.0.0

StatusQuo.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using ComfyLib;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("StatusQuo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("StatusQuo")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("27d29148-22fd-44ec-86d4-3fc6015dc4f8")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace StatusQuo
{
	public static class PluginConfig
	{
		public static ConfigEntry<bool> IsModEnabled { get; private set; }

		public static ConfigEntry<Vector2> StatusEffectListRectPosition { get; private set; }

		public static ConfigEntry<int> StatusEffectMaxRows { get; private set; }

		public static ConfigEntry<Vector2> StatusEffectRectSizeDelta { get; private set; }

		public static ConfigEntry<Color> StatusEffectBackgroundColor { get; private set; }

		public static ConfigEntry<Color> StatusEffectNameFontColor { get; private set; }

		public static ConfigEntry<float> StatusEffectNameFontSize { get; private set; }

		public static ConfigEntry<bool> StatusEffectNameFontAutoSizing { get; private set; }

		public static ConfigEntry<TextOverflowModes> StatusEffectNameTextOverflowMode { get; set; }

		public static ConfigEntry<TextWrappingModes> StatusEffectNameTextWrappingMode { get; set; }

		public static ConfigEntry<Color> StatusEffectTimeFontColor { get; private set; }

		public static ConfigEntry<float> StatusEffectTimeFontSize { get; private set; }

		public static ConfigEntry<bool> StatusEffectTimeFontAutoSizing { get; private set; }

		public static ConfigEntry<TextOverflowModes> StatusEffectTimeTextOverflowMode { get; private set; }

		public static ConfigEntry<TextWrappingModes> StatusEffectTimeTextWrappingMode { get; private set; }

		public static void BindConfig(ConfigFile config)
		{
			//IL_005b: 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)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0338: Unknown result type (might be due to invalid IL or missing references)
			IsModEnabled = config.BindInOrder("_Global", "isModEnabled", defaultValue: true, "Globally enable or disable this mod.");
			IsModEnabled.OnSettingChanged<bool>(HudUtils.ToggleHudSetup);
			StatusEffectListRectPosition = config.BindInOrder<Vector2>("StatusEffectList", "rectPosition", new Vector2(-250f, -40f), "StatusEffectListRoot<RectTransform>.anchoredPosition value.");
			StatusEffectListRectPosition.OnSettingChanged<Vector2>(HandleStatusEffectListConfigChange);
			StatusEffectMaxRows = config.BindInOrder("StatusEffect", "maxRows", 8, "StatusEffect max-rows per column; if 0, then max-rows is unlimited.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 20));
			StatusEffectMaxRows.OnSettingChanged<int>(HandleStatusEffectConfigChange);
			StatusEffectRectSizeDelta = config.BindInOrder<Vector2>("StatusEffect", "rectSizeDelta", new Vector2(225f, 30f), "StatusEffect<RectTransform>.sizeDelta value.");
			StatusEffectRectSizeDelta.OnSettingChanged<Vector2>(HandleStatusEffectConfigChange);
			StatusEffectBackgroundColor = config.BindInOrder<Color>("StatusEffect", "backgroundColor", new Color(0f, 0f, 0f, 0.3f), "StatusEffect<Image>.color value.");
			StatusEffectBackgroundColor.OnSettingChanged<Color>(HandleStatusEffectConfigChange);
			StatusEffectNameFontColor = config.BindInOrder<Color>("StatusEffect.Name", "fontColor", Color.white, "StatusEffect.Name<TextMeshProUGUI>.color value.");
			StatusEffectNameFontColor.OnSettingChanged<Color>(HandleStatusEffectConfigChange);
			StatusEffectNameFontSize = config.BindInOrder("StatusEffect.Name", "fontSize", 16f, "StatusEffect.Name<TextMeshProUGUI>.fontSize value.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 48f));
			StatusEffectNameFontSize.OnSettingChanged<float>(HandleStatusEffectConfigChange);
			StatusEffectNameFontAutoSizing = config.BindInOrder("StatusEffect.Name", "fontAutoSizing", defaultValue: false, "StatusEffect.Name<TextMeshProUGUI>.enableAutoSizing value.");
			StatusEffectNameFontAutoSizing.OnSettingChanged<bool>(HandleStatusEffectConfigChange);
			StatusEffectNameTextOverflowMode = config.BindInOrder<TextOverflowModes>("StatusEffect.Name", "textOverflowMode", (TextOverflowModes)1, "StatusEffect.Name<TextMeshProUGUI>.overflowMode value.", (AcceptableValueBase)(object)new AcceptableValueEnumList<TextOverflowModes>((TextOverflowModes)1, default(TextOverflowModes), (TextOverflowModes)3));
			StatusEffectNameTextOverflowMode.OnSettingChanged<TextOverflowModes>(HandleStatusEffectConfigChange);
			StatusEffectNameTextWrappingMode = config.BindInOrder<TextWrappingModes>("StatusEffect.Name", "textWrappingMode", (TextWrappingModes)1, "StatusEffect.Name<TextMeshProUGUI>.textWrappingMode value.", (AcceptableValueBase)(object)new AcceptableValueEnumList<TextWrappingModes>((TextWrappingModes)1, default(TextWrappingModes)));
			StatusEffectNameTextWrappingMode.OnSettingChanged<TextWrappingModes>(HandleStatusEffectConfigChange);
			StatusEffectTimeFontColor = config.BindInOrder<Color>("StatusEffect.Time", "fontColor", new Color(1f, 0.717f, 0.36f, 1f), "StatusEffect.Time<TextMeshProUGUI>.color value.");
			StatusEffectTimeFontColor.OnSettingChanged<Color>(HandleStatusEffectConfigChange);
			StatusEffectTimeFontSize = config.BindInOrder("StatusEffect.Time", "fontSize", 18f, "StatusEffect.Time<TextMeshProUGUI>.fontSize value.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 48f));
			StatusEffectTimeFontSize.OnSettingChanged<float>(HandleStatusEffectConfigChange);
			StatusEffectTimeFontAutoSizing = config.BindInOrder("StatusEffect.Time", "fontAutoSizing", defaultValue: false, "StatusEffect.Time<TextMeshProUGUI>.enableAutoSizing value.");
			StatusEffectTimeFontAutoSizing.OnSettingChanged<bool>(HandleStatusEffectConfigChange);
			StatusEffectTimeTextOverflowMode = config.BindInOrder<TextOverflowModes>("StatusEffect.Time", "textOverflowMode", (TextOverflowModes)0, "StatusEffect.Time<TextMeshProUGUI>.overflowMode value.", (AcceptableValueBase)(object)new AcceptableValueEnumList<TextOverflowModes>((TextOverflowModes)1, default(TextOverflowModes), (TextOverflowModes)3));
			StatusEffectTimeTextOverflowMode.OnSettingChanged<TextOverflowModes>(HandleStatusEffectConfigChange);
			StatusEffectTimeTextWrappingMode = config.BindInOrder<TextWrappingModes>("StatusEffect.Time", "textWrappingMode", (TextWrappingModes)0, "StatusEffect.Time<TextMeshProUGUI>.textWrappingMode value.", (AcceptableValueBase)(object)new AcceptableValueEnumList<TextWrappingModes>((TextWrappingModes)1, default(TextWrappingModes)));
			StatusEffectTimeTextWrappingMode.OnSettingChanged<TextWrappingModes>(HandleStatusEffectConfigChange);
		}

		private static void HandleStatusEffectListConfigChange()
		{
			if (IsModEnabled.Value && Object.op_Implicit((Object)(object)Hud.m_instance))
			{
				HudUtils.SetupStatusEffectListRoot(Hud.m_instance, toggleOn: true);
			}
		}

		private static void HandleStatusEffectConfigChange()
		{
			if (IsModEnabled.Value && Object.op_Implicit((Object)(object)Hud.m_instance))
			{
				HudUtils.SetupStatusEffects(Hud.m_instance);
			}
		}
	}
	public static class HudUtils
	{
		public static void ToggleHudSetup(bool toggleOn)
		{
			if (!Object.op_Implicit((Object)(object)Hud.m_instance))
			{
				return;
			}
			SetupStatusEffectListRoot(Hud.m_instance, toggleOn);
			foreach (RectTransform statusEffect in Hud.m_instance.m_statusEffects)
			{
				Object.Destroy((Object)(object)((Component)statusEffect).gameObject);
			}
			Hud.m_instance.m_statusEffects.Clear();
		}

		public static void SetupStatusEffectListRoot(Hud hud, bool toggleOn)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0059: 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_002e: 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)
			hud.m_statusEffectListRoot.SetAnchorMin(Vector2.one).SetAnchorMax(Vector2.one).SetPivot(Vector2.one);
			if (toggleOn)
			{
				hud.m_statusEffectListRoot.SetSizeDelta(Vector2.zero).SetPosition(PluginConfig.StatusEffectListRectPosition.Value);
			}
			else
			{
				hud.m_statusEffectListRoot.SetSizeDelta(new Vector2(431.47f, 55f)).SetPosition(new Vector2(-271f, -45f));
			}
		}

		public static void SetupStatusEffects(Hud hud)
		{
			//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_000b: 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)
			Vector2 value = PluginConfig.StatusEffectRectSizeDelta.Value;
			float y = value.y;
			int num = ((PluginConfig.StatusEffectMaxRows.Value > 0) ? PluginConfig.StatusEffectMaxRows.Value : int.MaxValue);
			int num2 = 0;
			int num3 = 0;
			List<RectTransform> statusEffects = hud.m_statusEffects;
			int i = 0;
			for (int count = statusEffects.Count; i < count; i++)
			{
				RectTransform obj = statusEffects[i];
				SetupEffect(obj, value, num2, num3);
				SetupEffectName(((Transform)obj).Find("Name"), y);
				SetupEffectCooldown(((Transform)obj).Find("Cooldown"), y);
				SetupEffectIcon(((Transform)obj).Find("Icon"), y);
				SetupEffectTime(((Transform)obj).Find("TimeText"));
				num2++;
				if (num2 >= num)
				{
					num2 = 0;
					num3++;
				}
			}
		}

		private static void SetupEffect(RectTransform effectRectTransform, Vector2 sizeDelta, int row, int column)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: 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_0027: 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_0045: 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)
			effectRectTransform.SetAnchorMin(Vector2.up).SetAnchorMax(Vector2.up).SetPivot(Vector2.one)
				.SetSizeDelta(sizeDelta)
				.SetPosition(new Vector2((float)column * (0f - sizeDelta.x - 5f), (float)row * (0f - sizeDelta.y - 2.5f)));
			Image image = default(Image);
			if (!((Component)effectRectTransform).gameObject.TryGetComponent<Image>(ref image))
			{
				image = ((Component)effectRectTransform).gameObject.AddComponent<Image>();
			}
			image.SetSprite(UIResources.GetSprite("UISprite")).SetType((Type)1).SetColor(PluginConfig.StatusEffectBackgroundColor.Value);
		}

		private static void SetupEffectName(Transform nameTransform, float height)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0041: 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_0077: 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)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			((Component)nameTransform).GetComponent<RectTransform>().SetAnchorMin(Vector2.zero).SetAnchorMax(Vector2.one)
				.SetPivot(new Vector2(0f, 0.5f))
				.SetSizeDelta(new Vector2(0f - height - 15f - 50f, 0f))
				.SetPosition(new Vector2(height + 15f, 0f));
			((Component)nameTransform).GetComponent<TextMeshProUGUI>().SetAlignment<TextMeshProUGUI>((TextAlignmentOptions)513).SetColor<TextMeshProUGUI>(PluginConfig.StatusEffectNameFontColor.Value)
				.SetEnableAutoSizing<TextMeshProUGUI>(PluginConfig.StatusEffectNameFontAutoSizing.Value)
				.SetOverflowMode<TextMeshProUGUI>(PluginConfig.StatusEffectNameTextOverflowMode.Value)
				.SetTextWrappingMode<TextMeshProUGUI>(PluginConfig.StatusEffectNameTextWrappingMode.Value)
				.SetFontSizeMin<TextMeshProUGUI>(8f)
				.SetFontSizeMax<TextMeshProUGUI>(PluginConfig.StatusEffectNameFontSize.Value)
				.SetFontSize<TextMeshProUGUI>(PluginConfig.StatusEffectNameFontSize.Value);
		}

		private static void SetupEffectCooldown(Transform cooldownTransform, float height)
		{
			//IL_0010: 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_0038: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			((Component)cooldownTransform).GetComponent<RectTransform>().SetAnchorMin(new Vector2(0f, 0.5f)).SetAnchorMax(new Vector2(0f, 0.5f))
				.SetPivot(new Vector2(0.5f, 0.5f))
				.SetSizeDelta(new Vector2(height, height))
				.SetPosition(new Vector2(height / 2f + 5f, 0f));
			((Component)cooldownTransform).GetComponent<Image>().SetPreserveAspect(preserveAspect: true);
		}

		private static void SetupEffectIcon(Transform iconTransform, float height)
		{
			//IL_0010: 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_0038: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			((Component)iconTransform).GetComponent<RectTransform>().SetAnchorMin(new Vector2(0f, 0.5f)).SetAnchorMax(new Vector2(0f, 0.5f))
				.SetPivot(new Vector2(0.5f, 0.5f))
				.SetSizeDelta(new Vector2(height, height))
				.SetPosition(new Vector2(height / 2f + 5f, 0f));
			((Component)iconTransform).GetComponent<Image>().SetPreserveAspect(preserveAspect: true);
		}

		private static void SetupEffectTime(Transform timeTransform)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0038: 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_0062: 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_008f: Unknown result type (might be due to invalid IL or missing references)
			((Component)timeTransform).GetComponent<RectTransform>().SetAnchorMin(Vector2.zero).SetAnchorMax(Vector2.one)
				.SetPivot(new Vector2(0f, 0.5f))
				.SetSizeDelta(new Vector2(-10f, 0f))
				.SetPosition(Vector2.zero);
			((Component)timeTransform).GetComponent<TextMeshProUGUI>().SetAlignment<TextMeshProUGUI>((TextAlignmentOptions)516).SetColor<TextMeshProUGUI>(PluginConfig.StatusEffectTimeFontColor.Value)
				.SetEnableAutoSizing<TextMeshProUGUI>(PluginConfig.StatusEffectTimeFontAutoSizing.Value)
				.SetOverflowMode<TextMeshProUGUI>(PluginConfig.StatusEffectTimeTextOverflowMode.Value)
				.SetTextWrappingMode<TextMeshProUGUI>(PluginConfig.StatusEffectTimeTextWrappingMode.Value)
				.SetFontSizeMin<TextMeshProUGUI>(8f)
				.SetFontSizeMax<TextMeshProUGUI>(PluginConfig.StatusEffectTimeFontSize.Value)
				.SetFontSize<TextMeshProUGUI>(PluginConfig.StatusEffectTimeFontSize.Value);
		}
	}
	[HarmonyPatch(typeof(Hud))]
	internal static class HudPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Awake")]
		private static void AwakePostfix(Hud __instance)
		{
			if (PluginConfig.IsModEnabled.Value)
			{
				HudUtils.SetupStatusEffectListRoot(__instance, toggleOn: true);
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("UpdateStatusEffects")]
		private static void UpdateStatusEffectsPrefix(Hud __instance, List<StatusEffect> statusEffects, ref bool __state)
		{
			__state = PluginConfig.IsModEnabled.Value && __instance.m_statusEffects.Count != statusEffects.Count;
		}

		[HarmonyPostfix]
		[HarmonyPatch("UpdateStatusEffects")]
		private static void UpdateStatusEffectsPostfix(Hud __instance, bool __state)
		{
			if (__state)
			{
				HudUtils.SetupStatusEffects(__instance);
			}
		}
	}
	[BepInPlugin("redseiko.valheim.statusquo", "StatusQuo", "1.0.0")]
	[BepInIncompatibility("randyknapp.mods.minimalstatuseffects")]
	public sealed class StatusQuo : BaseUnityPlugin
	{
		public const string PluginGuid = "redseiko.valheim.statusquo";

		public const string PluginName = "StatusQuo";

		public const string PluginVersion = "1.0.0";

		private void Awake()
		{
			PluginConfig.BindConfig(((BaseUnityPlugin)this).Config);
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "redseiko.valheim.statusquo");
		}
	}
}
namespace ComfyLib
{
	public sealed class AcceptableValueEnumList<T> : AcceptableValueBase where T : Enum
	{
		public T[] AcceptableValues { get; }

		public AcceptableValueEnumList(params T[] acceptableValues)
			: base(typeof(T))
		{
			if (acceptableValues == null)
			{
				throw new ArgumentNullException("acceptableValues");
			}
			if (acceptableValues.Length == 0)
			{
				throw new ArgumentException("At least one acceptable value is needed.", "acceptableValues");
			}
			AcceptableValues = acceptableValues;
		}

		public override object Clamp(object value)
		{
			if (((AcceptableValueBase)this).IsValid(value))
			{
				return value;
			}
			return AcceptableValues[0];
		}

		public override bool IsValid(object value)
		{
			if (!(value is T))
			{
				return false;
			}
			for (int i = 0; i < AcceptableValues.Length; i++)
			{
				if (AcceptableValues[i].Equals(value))
				{
					return true;
				}
			}
			return false;
		}

		public override string ToDescriptionString()
		{
			return "# Acceptable values: " + string.Join(", ", AcceptableValues.Select(GetEnumName));
		}

		public string GetEnumName(T value)
		{
			return Enum.GetName(typeof(T), value);
		}
	}
	public static class ConfigFileExtensions
	{
		internal sealed class ConfigurationManagerAttributes
		{
			public Action<ConfigEntryBase> CustomDrawer;

			public bool? Browsable;

			public bool? HideDefaultButton;

			public bool? HideSettingName;

			public bool? IsAdvanced;

			public int? Order;

			public bool? ReadOnly;
		}

		private static readonly Dictionary<string, int> _sectionToSettingOrder = new Dictionary<string, int>();

		private static int GetSettingOrder(string section)
		{
			if (!_sectionToSettingOrder.TryGetValue(section, out var value))
			{
				value = 0;
			}
			_sectionToSettingOrder[section] = value - 1;
			return value;
		}

		public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, AcceptableValueBase acceptableValues)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, acceptableValues, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Order = GetSettingOrder(section)
				}
			}));
		}

		public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, Action<ConfigEntryBase> customDrawer = null, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false, bool isAdvanced = false, bool readOnly = false)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Browsable = browsable,
					CustomDrawer = customDrawer,
					HideDefaultButton = hideDefaultButton,
					HideSettingName = hideSettingName,
					IsAdvanced = isAdvanced,
					Order = GetSettingOrder(section),
					ReadOnly = readOnly
				}
			}));
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action settingChangedHandler)
		{
			configEntry.SettingChanged += delegate
			{
				settingChangedHandler();
			};
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<T> settingChangedHandler)
		{
			configEntry.SettingChanged += delegate(object _, EventArgs eventArgs)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				settingChangedHandler((T)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue);
			};
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<ConfigEntry<T>> settingChangedHandler)
		{
			configEntry.SettingChanged += delegate(object _, EventArgs eventArgs)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				settingChangedHandler((ConfigEntry<T>)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue);
			};
		}
	}
	public static class ComponentExtensions
	{
		public static bool TryGetComponentInChildren<T>(this Component rootComponent, out T component) where T : Component
		{
			component = rootComponent.GetComponentInChildren<T>(true);
			return Object.op_Implicit((Object)(object)component);
		}
	}
	public static class ObjectExtensions
	{
		public static T FirstByNameOrThrow<T>(this T[] unityObjects, string name) where T : Object
		{
			foreach (T val in unityObjects)
			{
				if (((Object)val).name == name)
				{
					return val;
				}
			}
			throw new InvalidOperationException($"Could not find Unity object of type {typeof(T)} with name: {name}");
		}

		public static T Ref<T>(this T unityObject) where T : Object
		{
			if (!Object.op_Implicit((Object)(object)unityObject))
			{
				return default(T);
			}
			return unityObject;
		}
	}
	public static class CanvasGroupExtensions
	{
		public static CanvasGroup SetAlpha(this CanvasGroup canvasGroup, float alpha)
		{
			canvasGroup.alpha = alpha;
			return canvasGroup;
		}

		public static CanvasGroup SetBlocksRaycasts(this CanvasGroup canvasGroup, bool blocksRaycasts)
		{
			canvasGroup.blocksRaycasts = blocksRaycasts;
			return canvasGroup;
		}
	}
	public static class ColorExtensions
	{
		public static Color SetAlpha(this Color color, float alpha)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			color.a = alpha;
			return color;
		}
	}
	public static class ContentSizeFitterExtensions
	{
		public static ContentSizeFitter SetHorizontalFit(this ContentSizeFitter fitter, FitMode fitMode)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			fitter.horizontalFit = fitMode;
			return fitter;
		}

		public static ContentSizeFitter SetVerticalFit(this ContentSizeFitter fitter, FitMode fitMode)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			fitter.verticalFit = fitMode;
			return fitter;
		}
	}
	public static class LayoutGroupExtensions
	{
		public static T SetChildAlignment<T>(this T layoutGroup, TextAnchor alignment) where T : HorizontalOrVerticalLayoutGroup
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((LayoutGroup)(object)layoutGroup).childAlignment = alignment;
			return layoutGroup;
		}

		public static T SetChildControl<T>(this T layoutGroup, bool? width = null, bool? height = null) where T : HorizontalOrVerticalLayoutGroup
		{
			if (!width.HasValue && !height.HasValue)
			{
				throw new ArgumentException("Value for width or height must be provided.");
			}
			if (width.HasValue)
			{
				((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlWidth = width.Value;
			}
			if (height.HasValue)
			{
				((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlHeight = height.Value;
			}
			return layoutGroup;
		}

		public static T SetChildForceExpand<T>(this T layoutGroup, bool? width = null, bool? height = null) where T : HorizontalOrVerticalLayoutGroup
		{
			if (!width.HasValue && !height.HasValue)
			{
				throw new ArgumentException("Value for width or height must be provided.");
			}
			if (width.HasValue)
			{
				((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandWidth = width.Value;
			}
			if (height.HasValue)
			{
				((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandHeight = height.Value;
			}
			return layoutGroup;
		}

		public static T SetPadding<T>(this T layoutGroup, int? left = null, int? right = null, int? top = null, int? bottom = null) where T : HorizontalOrVerticalLayoutGroup
		{
			if (!left.HasValue && !right.HasValue && !top.HasValue && !bottom.HasValue)
			{
				throw new ArgumentException("Value for left, right, top or bottom must be provided.");
			}
			if (left.HasValue)
			{
				((LayoutGroup)(object)layoutGroup).padding.left = left.Value;
			}
			if (right.HasValue)
			{
				((LayoutGroup)(object)layoutGroup).padding.right = right.Value;
			}
			if (top.HasValue)
			{
				((LayoutGroup)(object)layoutGroup).padding.top = top.Value;
			}
			if (bottom.HasValue)
			{
				((LayoutGroup)(object)layoutGroup).padding.bottom = bottom.Value;
			}
			return layoutGroup;
		}

		public static T SetSpacing<T>(this T layoutGroup, float spacing) where T : HorizontalOrVerticalLayoutGroup
		{
			((HorizontalOrVerticalLayoutGroup)layoutGroup).spacing = spacing;
			return layoutGroup;
		}
	}
	public static class ImageExtensions
	{
		public static Image SetColor(this Image image, Color color)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			((Graphic)image).color = color;
			return image;
		}

		public static Image SetFillAmount(this Image image, float amount)
		{
			image.fillAmount = amount;
			return image;
		}

		public static Image SetFillCenter(this Image image, bool fillCenter)
		{
			image.fillCenter = fillCenter;
			return image;
		}

		public static Image SetFillMethod(this Image image, FillMethod fillMethod)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			image.fillMethod = fillMethod;
			return image;
		}

		public static Image SetFillOrigin(this Image image, OriginHorizontal origin)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected I4, but got Unknown
			image.fillOrigin = (int)origin;
			return image;
		}

		public static Image SetFillOrigin(this Image image, OriginVertical origin)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected I4, but got Unknown
			image.fillOrigin = (int)origin;
			return image;
		}

		public static Image SetMaskable(this Image image, bool maskable)
		{
			((MaskableGraphic)image).maskable = maskable;
			return image;
		}

		public static Image SetMaterial(this Image image, Material material)
		{
			((Graphic)image).material = material;
			return image;
		}

		public static Image SetPixelsPerUnitMultiplier(this Image image, float pixelsPerUnitMultiplier)
		{
			image.pixelsPerUnitMultiplier = pixelsPerUnitMultiplier;
			return image;
		}

		public static Image SetPreserveAspect(this Image image, bool preserveAspect)
		{
			image.preserveAspect = preserveAspect;
			return image;
		}

		public static Image SetRaycastTarget(this Image image, bool raycastTarget)
		{
			((Graphic)image).raycastTarget = raycastTarget;
			return image;
		}

		public static Image SetSprite(this Image image, Sprite sprite)
		{
			image.sprite = sprite;
			return image;
		}

		public static Image SetType(this Image image, Type type)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			image.type = type;
			return image;
		}
	}
	public static class LayoutElementExtensions
	{
		public static LayoutElement SetFlexible(this LayoutElement layoutElement, float? width = null, float? height = null)
		{
			if (!width.HasValue && !height.HasValue)
			{
				throw new ArgumentException("Value for width or height must be provided.");
			}
			if (width.HasValue)
			{
				layoutElement.flexibleWidth = width.Value;
			}
			if (height.HasValue)
			{
				layoutElement.flexibleHeight = height.Value;
			}
			return layoutElement;
		}

		public static LayoutElement SetIgnoreLayout(this LayoutElement layoutElement, bool ignoreLayout)
		{
			layoutElement.ignoreLayout = ignoreLayout;
			return layoutElement;
		}

		public static LayoutElement SetMinimum(this LayoutElement layoutElement, float? width = null, float? height = null)
		{
			if (!width.HasValue && !height.HasValue)
			{
				throw new ArgumentException("Value for width or height must be provided.");
			}
			if (width.HasValue)
			{
				layoutElement.minWidth = width.Value;
			}
			if (height.HasValue)
			{
				layoutElement.minHeight = height.Value;
			}
			return layoutElement;
		}

		public static LayoutElement SetPreferred(this LayoutElement layoutElement, float? width = null, float? height = null)
		{
			if (!width.HasValue && !height.HasValue)
			{
				throw new ArgumentException("Value for width or height must be provided.");
			}
			if (width.HasValue)
			{
				layoutElement.preferredWidth = width.Value;
			}
			if (height.HasValue)
			{
				layoutElement.preferredHeight = height.Value;
			}
			return layoutElement;
		}
	}
	public static class RectMask2DExtensions
	{
		public static RectMask2D SetSoftness(this RectMask2D rectMask2d, Vector2Int softness)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectMask2d.softness = softness;
			return rectMask2d;
		}
	}
	public static class RectTransformExtensions
	{
		public static RectTransform OffsetPosition(this RectTransform rectTransform, Vector2 offset)
		{
			//IL_0002: 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_0008: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.anchoredPosition += offset;
			return rectTransform;
		}

		public static RectTransform OffsetSizeDelta(this RectTransform rectTransform, Vector2 offset)
		{
			//IL_0002: 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_0008: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.sizeDelta += offset;
			return rectTransform;
		}

		public static RectTransform SetAnchorMin(this RectTransform rectTransform, Vector2 anchorMin)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.anchorMin = anchorMin;
			return rectTransform;
		}

		public static RectTransform SetAnchorMax(this RectTransform rectTransform, Vector2 anchorMax)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.anchorMax = anchorMax;
			return rectTransform;
		}

		public static RectTransform SetPivot(this RectTransform rectTransform, Vector2 pivot)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.pivot = pivot;
			return rectTransform;
		}

		public static RectTransform SetPosition(this RectTransform rectTransform, Vector2 position)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.anchoredPosition = position;
			return rectTransform;
		}

		public static RectTransform SetSizeDelta(this RectTransform rectTransform, Vector2 sizeDelta)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			rectTransform.sizeDelta = sizeDelta;
			return rectTransform;
		}
	}
	public static class SelectableExtensions
	{
		public static T SetColors<T>(this T selectable, ColorBlock colors) where T : Selectable
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((Selectable)selectable).colors = colors;
			return selectable;
		}

		public static T SetImage<T>(this T selectable, Image image) where T : Selectable
		{
			((Selectable)selectable).image = image;
			return selectable;
		}

		public static T SetInteractable<T>(this T selectable, bool interactable) where T : Selectable
		{
			((Selectable)selectable).interactable = interactable;
			return selectable;
		}

		public static T SetSpriteState<T>(this T selectable, SpriteState spriteState) where T : Selectable
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((Selectable)selectable).spriteState = spriteState;
			return selectable;
		}

		public static T SetTargetGraphic<T>(this T selectable, Graphic graphic) where T : Selectable
		{
			((Selectable)selectable).targetGraphic = graphic;
			return selectable;
		}

		public static T SetTransition<T>(this T selectable, Transition transition) where T : Selectable
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((Selectable)selectable).transition = transition;
			return selectable;
		}

		public static T SetNavigationMode<T>(this T selectable, Mode mode) where T : Selectable
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: 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)
			Navigation navigation = ((Selectable)selectable).navigation;
			((Navigation)(ref navigation)).mode = mode;
			((Selectable)selectable).navigation = navigation;
			return selectable;
		}
	}
	public static class ShadowExtensions
	{
		public static Shadow SetEffectColor(this Shadow shadow, Color effectColor)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			shadow.effectColor = effectColor;
			return shadow;
		}

		public static Shadow SetEffectDistance(this Shadow shadow, Vector2 effectDistance)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			shadow.effectDistance = effectDistance;
			return shadow;
		}
	}
	public static class ScrollRectExtensions
	{
		public static T SetContent<T>(this T scrollRect, RectTransform content) where T : ScrollRect
		{
			((ScrollRect)scrollRect).content = content;
			return scrollRect;
		}

		public static T SetHorizontal<T>(this T scrollRect, bool horizontal) where T : ScrollRect
		{
			((ScrollRect)scrollRect).horizontal = horizontal;
			return scrollRect;
		}

		public static T SetMovementType<T>(this T scrollRect, MovementType movementType) where T : ScrollRect
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((ScrollRect)scrollRect).movementType = movementType;
			return scrollRect;
		}

		public static T SetScrollSensitivity<T>(this T scrollRect, float sensitivity) where T : ScrollRect
		{
			((ScrollRect)scrollRect).scrollSensitivity = sensitivity;
			return scrollRect;
		}

		public static T SetVertical<T>(this T scrollRect, bool vertical) where T : ScrollRect
		{
			((ScrollRect)scrollRect).vertical = vertical;
			return scrollRect;
		}

		public static T SetVerticalScrollbar<T>(this T scrollRect, Scrollbar verticalScrollbar) where T : ScrollRect
		{
			((ScrollRect)scrollRect).verticalScrollbar = verticalScrollbar;
			return scrollRect;
		}

		public static T SetVerticalScrollPosition<T>(this T scrollRect, float position) where T : ScrollRect
		{
			((ScrollRect)scrollRect).verticalNormalizedPosition = position;
			return scrollRect;
		}

		public static T SetVerticalScrollbarVisibility<T>(this T scrollRect, ScrollbarVisibility visibility) where T : ScrollRect
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((ScrollRect)scrollRect).verticalScrollbarVisibility = visibility;
			return scrollRect;
		}

		public static T SetViewport<T>(this T scrollRect, RectTransform viewport) where T : ScrollRect
		{
			((ScrollRect)scrollRect).viewport = viewport;
			return scrollRect;
		}
	}
	public static class TextMeshProExtensions
	{
		public static T SetAlignment<T>(this T tmpText, TextAlignmentOptions alignment) where T : TMP_Text
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((TMP_Text)tmpText).alignment = alignment;
			return tmpText;
		}

		public static T SetColor<T>(this T tmpText, Color color) where T : TMP_Text
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((Graphic)(object)tmpText).color = color;
			return tmpText;
		}

		public static T SetEnableAutoSizing<T>(this T tmpText, bool enableAutoSizing) where T : TMP_Text
		{
			((TMP_Text)tmpText).enableAutoSizing = enableAutoSizing;
			return tmpText;
		}

		public static T SetFont<T>(this T tmpText, TMP_FontAsset font) where T : TMP_Text
		{
			((TMP_Text)tmpText).font = font;
			return tmpText;
		}

		public static T SetFontSize<T>(this T tmpText, float fontSize) where T : TMP_Text
		{
			((TMP_Text)tmpText).fontSize = fontSize;
			return tmpText;
		}

		public static T SetFontSizeMax<T>(this T tmpText, float fontSizeMax) where T : TMP_Text
		{
			((TMP_Text)tmpText).fontSizeMax = fontSizeMax;
			return tmpText;
		}

		public static T SetFontSizeMin<T>(this T tmpText, float fontSizeMin) where T : TMP_Text
		{
			((TMP_Text)tmpText).fontSizeMax = fontSizeMin;
			return tmpText;
		}

		public static T SetFontMaterial<T>(this T tmpText, Material fontMaterial) where T : TMP_Text
		{
			((TMP_Text)tmpText).fontMaterial = fontMaterial;
			return tmpText;
		}

		public static T SetMargin<T>(this T tmpText, Vector4 margin) where T : TMP_Text
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((TMP_Text)tmpText).margin = margin;
			return tmpText;
		}

		public static T SetOverflowMode<T>(this T tmpText, TextOverflowModes overflowMode) where T : TMP_Text
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((TMP_Text)tmpText).overflowMode = overflowMode;
			return tmpText;
		}

		public static T SetRichText<T>(this T tmpText, bool richText) where T : TMP_Text
		{
			((TMP_Text)tmpText).richText = richText;
			return tmpText;
		}

		public static T SetTextWrappingMode<T>(this T tmpText, TextWrappingModes textWrappingMode) where T : TMP_Text
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((TMP_Text)tmpText).textWrappingMode = textWrappingMode;
			return tmpText;
		}
	}
	public static class Texture2DExtensions
	{
		public static Texture2D SetFilterMode(this Texture2D texture, FilterMode filterMode)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			((Texture)texture).filterMode = filterMode;
			return texture;
		}

		public static Texture2D SetWrapMode(this Texture2D texture, TextureWrapMode wrapMode)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			((Texture)texture).wrapMode = wrapMode;
			return texture;
		}
	}
	public static class UIResources
	{
		public static readonly ResourceCache<Sprite> SpriteCache = new ResourceCache<Sprite>();

		public static readonly ResourceCache<Material> MaterialCache = new ResourceCache<Material>();

		public static Sprite GetSprite(string spriteName)
		{
			return SpriteCache.GetResource(spriteName);
		}

		public static Material GetMaterial(string materialName)
		{
			return MaterialCache.GetResource(materialName);
		}
	}
	public sealed class ResourceCache<T> where T : Object
	{
		private readonly Dictionary<string, T> _cache = new Dictionary<string, T>();

		public T GetResource(string resourceName)
		{
			if (!_cache.TryGetValue(resourceName, out var value))
			{
				value = Resources.FindObjectsOfTypeAll<T>().FirstByNameOrThrow(resourceName);
				_cache[resourceName] = value;
			}
			return value;
		}
	}
}