Decompiled source of Lethal Apocalypse v1.4.3

Plugins/Darkbrewery-Emblem/Emblem.dll

Decompiled 4 days ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Emblem;
using Emblem.Components;
using Emblem.Managers;
using HarmonyLib;
using LobbyCompatibility.Enums;
using LobbyCompatibility.Features;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Video;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Emblem")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Emblem")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e4927ee1-3a47-4f93-8784-804356949316")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
public class DynamicColorManager : MonoBehaviour
{
	private static DynamicColorManager _instance;

	public static DynamicColorManager Instance
	{
		get
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_instance == (Object)null)
			{
				_instance = new GameObject("DynamicColorManager").AddComponent<DynamicColorManager>();
			}
			return _instance;
		}
	}

	public SubMenuColor SubMenuColors { get; set; }

	private void Awake()
	{
		if ((Object)(object)_instance != (Object)null && (Object)(object)_instance != (Object)(object)this)
		{
			Object.Destroy((Object)(object)((Component)this).gameObject);
			return;
		}
		_instance = this;
		Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
	}

	public void SetupDynamicColorChange(string parentPath)
	{
		AttachObserver(parentPath, SubMenuColors);
	}

	public void AttachObserver(string parentPath, SubMenuColor subMenuColors)
	{
		Transform val = PathFinder.Probe(parentPath);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("[DynamicColorManager] Parent path not found: " + parentPath);
		}
		else
		{
			(((Component)val).gameObject.GetComponent<UIObserver>() ?? ((Component)val).gameObject.AddComponent<UIObserver>()).SetColors(subMenuColors);
		}
	}
}
public class UIObserver : MonoBehaviour
{
	private Dictionary<GameObject, bool> _coloredObjects = new Dictionary<GameObject, bool>();

	private SubMenuColor _subMenuColors;

	public void SetColors(SubMenuColor subMenuColors)
	{
		_subMenuColors = subMenuColors;
	}

	private void OnTransformChildrenChanged()
	{
		ProcessChildren();
	}

	private void ProcessChildren()
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Expected O, but got Unknown
		//IL_0104: 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_0109: 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)
		foreach (Transform item in ((Component)this).transform)
		{
			Transform child = item;
			if ((Object)(object)child == (Object)null)
			{
				LogWarden.LogError("[UIObserver] Child transform is null in " + ((Object)((Component)this).transform).name);
			}
			else if (!(((Object)child).name == "ListHeader (1)") && (((Object)child).name.Contains("LobbyListItem(Clone)") || ((Object)child).name.Contains("LobbyListItemChallenge(Clone)") || ((Object)child).name.Contains("ChallengeLeaderboardSlotItem(Clone)")))
			{
				bool flag = ((Object)child).name.Contains("LobbyListItemChallenge(Clone)") || ((Object)child).name.Contains("ChallengeLeaderboardSlotItem(Clone)");
				Color color = (flag ? _subMenuColors.Background7 : _subMenuColors.Background5);
				ApplyColorToChild(child, color);
				if (((Object)child).name.Contains("LobbyListItem(Clone)") || ((Object)child).name.Contains("LobbyListItemChallenge(Clone)"))
				{
					ApplyChildColors(child, flag);
					HandleJoinButtonClones(child);
				}
				else if (((Object)child).name.Contains("ChallengeLeaderboardSlotItem(Clone)"))
				{
					ApplyChallengeColors(child);
				}
				DelayHelper.StartDelayedAction(0.01f, delegate
				{
					SetupButton(child);
				});
			}
		}
	}

	private void ApplyChildColors(Transform child, bool isChallenge)
	{
		//IL_0012: 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_0048: 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)
		ApplyColors(new List<(string, Color)>
		{
			("Outline", _subMenuColors.BorderColor),
			("ServerName", _subMenuColors.TextFontColor),
			("NumPlayers", _subMenuColors.SubTextColor),
			(isChallenge ? "NumPlayers (1)" : null, _subMenuColors.SubTextColor)
		}, child);
	}

	private void ApplyChallengeColors(Transform child)
	{
		//IL_0012: 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_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		ApplyColors(new List<(string, Color)>
		{
			("Outline", _subMenuColors.BorderColor),
			("ServerName", _subMenuColors.TextFontColor),
			("Collected", _subMenuColors.SubTextColor),
			("RankNum", _subMenuColors.TextFontColor)
		}, child);
	}

	private void ApplyColors(List<(string, Color)> colors, Transform parent)
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		foreach (var (text, color) in colors)
		{
			if (text != null)
			{
				CheckAndApplyColor(parent, text, color);
			}
		}
	}

	private void HandleJoinButtonClones(Transform parent)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		Transform val = parent.Find("NumPlayers");
		if (!((Object)(object)val != (Object)null))
		{
			return;
		}
		foreach (Transform item in val)
		{
			Transform val2 = item;
			if ((Object)(object)val2 != (Object)null && ((Object)val2).name.Contains("JoinButton(Clone)") && (Object)(object)((Component)val2).GetComponent<Button>() != (Object)null)
			{
				SetupJoinButton(val2);
			}
		}
	}

	private void SetupJoinButton(Transform buttonTransform)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		RectTransform component = ((Component)buttonTransform).GetComponent<RectTransform>();
		if ((Object)(object)component != (Object)null)
		{
			component.pivot = new Vector2(component.pivot.x, 1f);
		}
		Transform val = buttonTransform.Find("SelectionHighlight");
		if ((Object)(object)val != (Object)null)
		{
			((Component)val).gameObject.SetActive(true);
		}
	}

	private void SetupButton(Transform child)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Expected O, but got Unknown
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_009f: 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_00b5: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00eb: 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)
		if ((Object)(object)child == (Object)null)
		{
			return;
		}
		foreach (Transform item in child)
		{
			Transform val = item;
			if ((Object)(object)val == (Object)null || !((Object)val).name.Contains("JoinButton"))
			{
				continue;
			}
			Button component = ((Component)val).GetComponent<Button>();
			if ((Object)(object)component != (Object)null)
			{
				Image component2 = ((Component)val).GetComponent<Image>();
				Transform obj = val.Find("Text (TMP)");
				TMP_Text val2 = ((obj != null) ? ((Component)obj).GetComponent<TMP_Text>() : null);
				if ((Object)(object)component2 != (Object)null && (Object)(object)val2 != (Object)null)
				{
					HoverButtonDirect(val, _subMenuColors.ButtonRegText, _subMenuColors.ButtonHoverText, _subMenuColors.Darken, _subMenuColors.ButtonHoverBG);
					SetupEventTriggers(component, component2, val2, _subMenuColors.Darken, _subMenuColors.ButtonHoverBG, _subMenuColors.ButtonRegText, _subMenuColors.ButtonHoverText);
					((Graphic)component2).color = _subMenuColors.Darken;
				}
			}
		}
	}

	private void HoverButtonDirect(Transform buttonTransform, Color regularFontColor, Color highlightFontColor, Color regularBGColor, Color highlightBGColor)
	{
		//IL_0095: 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_00a6: 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_00b6: 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_00ed: 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_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_0117: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: 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_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0158: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: 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_01af: Expected O, but got Unknown
		Button component = ((Component)buttonTransform).GetComponent<Button>();
		Animator component2 = ((Component)buttonTransform).GetComponent<Animator>();
		Image backgroundImage = ((Component)buttonTransform).GetComponent<Image>();
		Transform obj = buttonTransform.Find("Text (TMP)");
		TMP_Text textComponent = ((obj != null) ? ((Component)obj).GetComponent<TMP_Text>() : null);
		if ((Object)(object)component != (Object)null && (Object)(object)textComponent != (Object)null && (Object)(object)backgroundImage != (Object)null)
		{
			if ((Object)(object)component2 != (Object)null)
			{
				((Behaviour)component2).enabled = false;
			}
			((Selectable)component).transition = (Transition)0;
			textComponent.overrideColorTags = true;
			Color initialTextColor = ((Graphic)textComponent).color;
			Color initialBGColor = ((Graphic)backgroundImage).color;
			((Graphic)textComponent).color = regularFontColor;
			((Behaviour)backgroundImage).enabled = true;
			backgroundImage.pixelsPerUnitMultiplier = 4f;
			((Graphic)backgroundImage).color = regularBGColor;
			RectTransform component3 = ((Component)component).GetComponent<RectTransform>();
			component3.anchorMin = new Vector2(component3.anchorMin.x, 0.5f);
			component3.anchorMax = new Vector2(component3.anchorMax.x, 0.5f);
			component3.pivot = new Vector2(component3.pivot.x, 0.5f);
			component3.offsetMax = new Vector2(component3.offsetMax.x, 13f);
			component3.offsetMin = new Vector2(component3.offsetMin.x, -13f);
			Transform obj2 = buttonTransform.Find("SelectionHighlight");
			if (obj2 != null)
			{
				((Component)obj2).gameObject.SetActive(false);
			}
			((UnityEventBase)component.onClick).RemoveAllListeners();
			((UnityEvent)component.onClick).AddListener((UnityAction)delegate
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				((Graphic)backgroundImage).color = initialBGColor;
				((Graphic)textComponent).color = initialTextColor;
			});
		}
		else
		{
			LogWarden.LogError("[HoverButtonDirect] Required components not found on button at '" + ((Object)buttonTransform).name + "'.");
		}
	}

	private void SetupEventTriggers(Button button, Image backgroundImage, TMP_Text textComponent, Color regularBGColor, Color highlightBGColor, Color regularFontColor, Color highlightFontColor)
	{
		//IL_000e: 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_001d: 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_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//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)
		EventTrigger obj = ((Component)button).GetComponent<EventTrigger>() ?? ((Component)button).gameObject.AddComponent<EventTrigger>();
		obj.triggers.Clear();
		Color initialBGColor = ((Graphic)backgroundImage).color;
		Color initialTextColor = ((Graphic)textComponent).color;
		AddEventTrigger(obj, (EventTriggerType)0, delegate
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			((Graphic)backgroundImage).color = highlightBGColor;
			((Graphic)textComponent).color = highlightFontColor;
		});
		AddEventTrigger(obj, (EventTriggerType)1, delegate
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			((Graphic)backgroundImage).color = initialBGColor;
			((Graphic)textComponent).color = initialTextColor;
		});
	}

	private static void AddEventTrigger(EventTrigger trigger, EventTriggerType type, UnityAction<BaseEventData> action)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: 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_000d: Expected O, but got Unknown
		Entry val = new Entry
		{
			eventID = type
		};
		((UnityEvent<BaseEventData>)(object)val.callback).AddListener(action);
		trigger.triggers.Add(val);
	}

	private void CheckAndApplyColor(Transform parent, string childName, Color color)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		Transform val = parent.Find(childName);
		if ((Object)(object)val != (Object)null && (!_coloredObjects.TryGetValue(((Component)val).gameObject, out var value) || !value))
		{
			ApplyColorToChild(val, color);
		}
	}

	private void ApplyColorToChild(Transform child, Color color)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)child == (Object)null))
		{
			Graphic component = ((Component)child).GetComponent<Graphic>();
			if ((Object)(object)component != (Object)null)
			{
				component.color = color;
				_coloredObjects[((Component)child).gameObject] = true;
			}
			else
			{
				LogWarden.LogError("[UIObserver] Graphic component not found on " + ((Object)child).name);
			}
		}
	}
}
public class HoverEffectHandler : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler
{
	public Image backgroundImage;

	public TMP_Text textComponent;

	public Color regularBGColor;

	public Color highlightBGColor;

	public Color regularFontColor;

	public Color highlightFontColor;

	public void OnPointerEnter(PointerEventData eventData)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		((Graphic)backgroundImage).color = highlightBGColor;
		((Graphic)textComponent).color = highlightFontColor;
	}

	public void OnPointerExit(PointerEventData eventData)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		((Graphic)backgroundImage).color = regularBGColor;
		((Graphic)textComponent).color = regularFontColor;
	}
}
public class SubMenuColor
{
	public struct UIPath
	{
		public string Path;

		public Type ComponentType;

		public int Index;

		public UIPath(string path, Type componentType, int index = 0)
		{
			Path = path;
			ComponentType = componentType;
			Index = index;
		}
	}

	private static readonly UIPath HOST_BUTTON = new UIPath("Canvas/MenuContainer/MainButtons/HostButton/", typeof(Button));

	private static readonly UIPath HOST_BG = new UIPath("MenuContainer/LobbyHostSettings/Image", typeof(Image));

	private static readonly UIPath HOST_PANEL_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer", typeof(Image));

	private static readonly UIPath HOST_BORDER = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/Image", typeof(Image));

	private static readonly UIPath HOST_LAN_TITLE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/LANOptions/Header", typeof(TMP_Text));

	private static readonly UIPath HOST_ONLINE_TITLE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/EnterAName", typeof(TMP_Text));

	private static readonly UIPath HOST_ONLINE_INPUT_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/ServerNameField", typeof(Image));

	private static readonly UIPath HOST_ONLINE_PUBLIC = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/Public", typeof(Button));

	private static readonly UIPath HOST_ONLINE_PUBLIC_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/Public", typeof(Image));

	private static readonly UIPath HOST_ONLINE_PRIVATE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/Private", typeof(Button));

	private static readonly UIPath HOST_ONLINE_PRIVATE_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/Private", typeof(Image));

	private static readonly UIPath HOST_LAN_REMOTE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/LANOptions/AllowRemote", typeof(Button));

	private static readonly UIPath HOST_LAN_REMOTE_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/LANOptions/AllowRemote", typeof(Image));

	private static readonly UIPath HOST_LAN_LOCAL = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/LANOptions/Local", typeof(Button));

	private static readonly UIPath HOST_LAN_LOCAL_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/LANOptions/Local", typeof(Image));

	private static readonly UIPath HOST_ONLINE_TAG_BORDER = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/ServerTagInputField", typeof(Image));

	private static readonly UIPath HOST_ONLINE_TAG_PLACE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/ServerTagInputField/Text Area/Placeholder", typeof(TMP_Text));

	private static readonly UIPath HOST_ONLINE_TAG_TEXT = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/ServerTagInputField/Text Area/Text", typeof(TMP_Text));

	private static readonly UIPath HOST_CONFIRM = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/Confirm", typeof(Button));

	private static readonly UIPath HOST_BACK = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/Back", typeof(Button));

	private static readonly UIPath HOST_DESC = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/PrivatePublicDescription", typeof(TMP_Text));

	private static readonly UIPath CREWCOUNT_TITLE = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/CrewCountField(Clone)/Text (TMP)", typeof(TMP_Text));

	private static readonly UIPath CREWCOUNT_INPUT_BG = new UIPath("MenuContainer/LobbyHostSettings/HostSettingsContainer/LobbyHostOptions/OptionsNormal/CrewCountField(Clone)", typeof(Image));

	private static readonly UIPath COSMO_BUTTON = new UIPath("TestOverlay(Clone)/Canvas/GlobalScale/ActivateButton", typeof(Image));

	private static readonly UIPath FILE_PANEL_BG = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel", typeof(Image));

	private static readonly UIPath FILE_BORDER = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel/Outline", typeof(Image));

	private static readonly UIPath FILE_TITLE = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel/EnterAName", typeof(TMP_Text));

	private static readonly UIPath FILE_TIP = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel/ChallengeMoonButton/TipText", typeof(TMP_Text));

	private static readonly UIPath FILE_DARK = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel/Darken", typeof(Image));

	private static readonly UIPath FILES_BUTTON = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel", typeof(TMP_Text));

	private static readonly UIPath FILES_IMAGES = new UIPath("MenuContainer/LobbyHostSettings/FilesPanel", typeof(Image));

	private static readonly UIPath LEAD_BORDER = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel", typeof(Image));

	private static readonly UIPath LEAD_TITLE = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/ListHeader", typeof(TMP_Text));

	private static readonly UIPath LEAD_REFRESH = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/RefreshButton", typeof(Button));

	private static readonly UIPath LEAD_BACK = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/Back", typeof(Button));

	private static readonly UIPath LEAD_REMOVE = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/RemoveScore", typeof(Button));

	private static readonly UIPath LEAD_PLAY = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Retry", typeof(Button));

	private static readonly UIPath LEAD_SCROLL_BAR = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Scroll View/Scrollbar Vertical", typeof(Image));

	private static readonly UIPath LEAD_SCROLL_HANDLE = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Scroll View/Scrollbar Vertical", typeof(Scrollbar));

	private static readonly UIPath LEAD_DROP = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown", typeof(TMP_Dropdown));

	private static readonly UIPath LEAD_DROP_TEXT = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Label", typeof(TMP_Text));

	private static readonly UIPath LEAD_DROP_ARROW = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Arrow", typeof(Image));

	private static readonly UIPath LEAD_DROP_BG = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Template", typeof(Image));

	private static readonly UIPath LEAD_DROP_ITEM_BG = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Background", typeof(Image));

	private static readonly UIPath LEAD_DROP_ITEM_CHECK = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Checkmark", typeof(Image));

	private static readonly UIPath LEAD_DROP_ITEM_TEXT = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Label", typeof(Image));

	private static readonly UIPath LEAD_DROP_ITEM_TOGGLE = new UIPath("MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Dropdown/Template/Viewport/Content/Item", typeof(Toggle));

	private static readonly UIPath LOBBY_BG = new UIPath("MenuContainer/LobbyList/LobbyBackground", typeof(Image));

	private static readonly UIPath LOBBY_TITLE = new UIPath("MenuContainer/LobbyList/ListPanel/ListHeader", typeof(TMP_Text));

	private static readonly UIPath LOBBY_PANEL_BG = new UIPath("MenuContainer/LobbyList/ListPanel/Scroll View", typeof(Image));

	private static readonly UIPath LOBBY_BORDER = new UIPath("MenuContainer/LobbyList/ListPanel", typeof(Image));

	private static readonly UIPath LOBBY_REFRESH = new UIPath("MenuContainer/LobbyList/ListPanel/RefreshButton", typeof(Button));

	private static readonly UIPath LOBBYCOMPAT_REFRESH = new UIPath("MenuContainer/LobbyList/ListPanel/RefreshButton/SelectionHighlight(Clone)", typeof(Image));

	private static readonly UIPath LOBBYCOMPAT_REFRESH_HOVER = new UIPath("MenuContainer/LobbyList/ListPanel/RefreshButton/SelectionHighlight", typeof(Image));

	private static readonly UIPath LOBBY_BACK = new UIPath("MenuContainer/LobbyList/BackToMenu", typeof(Button));

	private static readonly UIPath LOBBY_SCROLL_BAR = new UIPath("MenuContainer/LobbyList/ListPanel/Scroll View/Scrollbar Vertical", typeof(Image));

	private static readonly UIPath LOBBY_SCROLL_HANDLE = new UIPath("MenuContainer/LobbyList/ListPanel/Scroll View/Scrollbar Vertical", typeof(Scrollbar));

	private static readonly UIPath LOBBY_LIST_STATUS = new UIPath("MenuContainer/LobbyList/ListPanel/Scroll View/Viewport/Content/ListHeader (1)", typeof(TMP_Text));

	private static readonly UIPath LOBBY_TAG_BORDER = new UIPath("MenuContainer/LobbyList/ListPanel/ServerTagInputField", typeof(Image));

	private static readonly UIPath LOBBY_TAG_TEXT = new UIPath("MenuContainer/LobbyList/ListPanel/ServerTagInputField/Text Area/Text", typeof(TMP_Text));

	private static readonly UIPath LOBBY_TAG_PLACEHOLDER = new UIPath("MenuContainer/LobbyList/ListPanel/ServerTagInputField/Text Area/Placeholder", typeof(TMP_Text));

	private static readonly UIPath LOBBY_SORT_CHAL_BORDER = new UIPath("MenuContainer/LobbyList/ListPanel/ToggleChallengeSort", typeof(Image));

	private static readonly UIPath LOBBY_SORT_CHAL_TEXT = new UIPath("MenuContainer/LobbyList/ListPanel/ToggleChallengeSort/Text (TMP)", typeof(TMP_Text));

	private static readonly UIPath LOBBY_SORT_CHAL_BOX = new UIPath("MenuContainer/LobbyList/ListPanel/ToggleChallengeSort/Arrow", typeof(Image));

	private static readonly UIPath LOBBY_SORT_CHAL_BOX_CHECK = new UIPath("MenuContainer/LobbyList/ListPanel/ToggleChallengeSort/Arrow (1)", typeof(Image));

	private static readonly UIPath LOBBY_DROP = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown", typeof(TMP_Dropdown));

	private static readonly UIPath LOBBY_DROP_TEXT = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Label", typeof(TMP_Text));

	private static readonly UIPath LOBBY_DROP_ARROW = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Arrow", typeof(Image));

	private static readonly UIPath LOBBY_DROP_BG = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Template", typeof(Image));

	private static readonly UIPath LOBBY_DROP_ITEM_BG = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Background", typeof(Image));

	private static readonly UIPath LOBBY_DROP_ITEM_CHECK = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Checkmark", typeof(Image));

	private static readonly UIPath LOBBY_DROP_ITEM_TEXT = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Template/Viewport/Content/Item/Item Label", typeof(Image));

	private static readonly UIPath LOBBY_DROP_ITEM_TOGGLE = new UIPath("MenuContainer/LobbyList/ListPanel/Dropdown/Template/Viewport/Content/Item", typeof(Toggle));

	private static readonly UIPath LANWARN_BG = new UIPath("MenuContainer/LANWarning/Image", typeof(Image));

	private static readonly UIPath LANWARN_PANEL_BG = new UIPath("MenuContainer/LANWarning/Panel", typeof(Image));

	private static readonly UIPath LANWARN_BORDER = new UIPath("MenuContainer/LANWarning/Panel/Image", typeof(Image));

	private static readonly UIPath LANWARN_TEXT = new UIPath("MenuContainer/LANWarning/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath LANWARN_CONFIRM = new UIPath("MenuContainer/LANWarning/Panel/Confirm", typeof(Button));

	private static readonly UIPath NOTIFY_BG = new UIPath("MenuContainer/MenuNotification/Image", typeof(Image));

	private static readonly UIPath NOTIFY_PANEL_BG = new UIPath("MenuContainer/MenuNotification/Panel", typeof(Image));

	private static readonly UIPath NOTIFY_BORDER = new UIPath("MenuContainer/MenuNotification/Panel/Image", typeof(Image));

	private static readonly UIPath NOTIFY_TEXT = new UIPath("MenuContainer/MenuNotification/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath NOTIFY_BACK = new UIPath("MenuContainer/MenuNotification/Panel/ResponseButton", typeof(Button));

	private static readonly UIPath DELETE_BG = new UIPath("MenuContainer/DeleteFileConfirmation/Image", typeof(Image));

	private static readonly UIPath DELETE_PANEL_BG = new UIPath("MenuContainer/DeleteFileConfirmation/Panel", typeof(Image));

	private static readonly UIPath DELETE_BORDER = new UIPath("MenuContainer/DeleteFileConfirmation/Panel/Image", typeof(Image));

	private static readonly UIPath DELETE_TEXT = new UIPath("MenuContainer/DeleteFileConfirmation/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath DELETE_CONFIRM = new UIPath("MenuContainer/DeleteFileConfirmation/Panel/Delete", typeof(Button));

	private static readonly UIPath DELETE_BACK = new UIPath("MenuContainer/DeleteFileConfirmation/Panel/Back", typeof(Button));

	private static readonly UIPath CREDITS_BG = new UIPath("MenuContainer/CreditsPanel/Image", typeof(Image));

	private static readonly UIPath CREDITS_PANEL_BG = new UIPath("MenuContainer/CreditsPanel/Panel", typeof(Image));

	private static readonly UIPath CREDITS_BORDER = new UIPath("MenuContainer/CreditsPanel/Panel/Image", typeof(Image), 1);

	private static readonly UIPath CREDITS_TITLE = new UIPath("MenuContainer/CreditsPanel/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath CREDITS_TITLE_BG = new UIPath("MenuContainer/CreditsPanel/Panel/Image", typeof(Image));

	private static readonly UIPath CREDITS_TEXT = new UIPath("MenuContainer/CreditsPanel/Panel/Scroll View/Viewport/Content/CreditsText", typeof(TMP_Text));

	private static readonly UIPath CREDITS_TEXT_BG = new UIPath("MenuContainer/CreditsPanel/Panel/Scroll View", typeof(Image));

	private static readonly UIPath CREDITS_BACK = new UIPath("MenuContainer/CreditsPanel/Panel/BackButton", typeof(Button));

	private static readonly UIPath CREDITS_SCROLL_BAR = new UIPath("MenuContainer/CreditsPanel/Panel/Scroll View/Scrollbar Vertical", typeof(Image));

	private static readonly UIPath CREDITS_SCROLL_HANDLE = new UIPath("MenuContainer/CreditsPanel/Panel/Scroll View/Scrollbar Vertical/Sliding Area/Handle", typeof(Image));

	private static readonly UIPath NEWS_BG = new UIPath("MenuContainer/NewsPanel/Image", typeof(Image));

	private static readonly UIPath NEWS_PANEL_BG = new UIPath("MenuContainer/NewsPanel/Panel", typeof(Image));

	private static readonly UIPath NEWS_BORDER = new UIPath("MenuContainer/NewsPanel/Panel/Image", typeof(Image), 1);

	private static readonly UIPath NEWS_TITLE = new UIPath("MenuContainer/NewsPanel/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath NEWS_TEXT = new UIPath("MenuContainer/NewsPanel/Panel/DemoText", typeof(TMP_Text));

	private static readonly UIPath NEWS_CONFIRM = new UIPath("MenuContainer/NewsPanel/Panel/ResponseButton", typeof(Button));

	private static readonly UIPath NEWS_BOX_1 = new UIPath("MenuContainer/NewsPanel/Panel/Image", typeof(Image));

	private static readonly UIPath NEWS_BOX_2 = new UIPath("MenuContainer/NewsPanel/Panel/Image (1)", typeof(Image));

	private static readonly UIPath NEWS_BOX_3 = new UIPath("MenuContainer/NewsPanel/Panel/Image (2)", typeof(Image));

	private static readonly UIPath NEWS_BOX_4 = new UIPath("MenuContainer/NewsPanel/Panel/Image (3)", typeof(Image));

	private static readonly UIPath NEWS_BOX_5 = new UIPath("MenuContainer/NewsPanel/Panel/Image (4)", typeof(Image));

	private static readonly UIPath NEWS_BOX_6 = new UIPath("MenuContainer/NewsPanel/Panel/Image (5)", typeof(Image));

	private static readonly UIPath SETTINGS_CONFIRM = new UIPath("MenuContainer/SettingsPanel/Confirm", typeof(Button));

	private static readonly UIPath SETTINGS_BACK = new UIPath("MenuContainer/SettingsPanel/BackButton", typeof(Button));

	private static readonly UIPath SETTINGS_DEFAULT = new UIPath("MenuContainer/SettingsPanel/SetToDefault", typeof(Button));

	private static readonly UIPath SETTINGS_KEYBINDINGS = new UIPath("MenuContainer/SettingsPanel/KeybindingsButton", typeof(Button));

	private static readonly UIPath SETTINGS_KEYS_TITLE = new UIPath("MenuContainer/SettingsPanel/KeybindsPanel/Controls (1)", typeof(TMP_Text));

	private static readonly UIPath KEYS_SCROLL_BAR = new UIPath("MenuContainer/SettingsPanel/KeybindsPanel/Scroll View/Scrollbar Vertical", typeof(Image));

	private static readonly UIPath KEYS_SCROLL_HANDLE = new UIPath("MenuContainer/SettingsPanel/KeybindsPanel/Scroll View/Scrollbar Vertical/Sliding Area/Handle", typeof(Image));

	private static readonly UIPath SETTINGS_KEYS_REBIND_TEXT = new UIPath("MenuContainer/SettingsPanel/KeybindsPanel/Scroll View/Viewport/Content/RemapKeysContainer/KeybindsSectionText(Clone)", typeof(TMP_Text));

	private static readonly UIPath SETTINGS_KEYS_BACK = new UIPath("MenuContainer/SettingsPanel/KeybindsPanel/Back", typeof(Button));

	private static readonly UIPath SETTINGS_KEYS_DEFAULT = new UIPath("MenuContainer/SettingsPanel/SetDefault", typeof(Button));

	private static readonly UIPath CUSTOM_BG = new UIPath("MenuContainer/CustomMenuPanel/Image", typeof(Image));

	private static readonly UIPath CUSTOM_PANEL_BG = new UIPath("MenuContainer/CustomMenuPanel/Panel", typeof(Image));

	private static readonly UIPath CUSTOM_BORDER = new UIPath("MenuContainer/CustomMenuPanel/Panel/Image", typeof(Image), 1);

	private static readonly UIPath CUSTOM_TITLE = new UIPath("MenuContainer/CustomMenuPanel/Panel/NotificationText", typeof(TMP_Text));

	private static readonly UIPath CUSTOM_TITLE_BG = new UIPath("MenuContainer/CustomMenuPanel/Panel/Image", typeof(Image));

	private static readonly UIPath CUSTOM_TEXT = new UIPath("MenuContainer/CustomMenuPanel/Panel/Scroll View/Viewport/Content/CreditsText", typeof(TMP_Text));

	private static readonly UIPath CUSTOM_TEXT_BG = new UIPath("MenuContainer/CustomMenuPanel/Panel/Scroll View", typeof(Image));

	private static readonly UIPath CUSTOM_BACK = new UIPath("MenuContainer/CustomMenuPanel/Panel/BackButton", typeof(Button));

	private static readonly UIPath CUSTOM_SCROLL_BAR = new UIPath("MenuContainer/CustomMenuPanel/Panel/Scroll View/Scrollbar Vertical", typeof(Image));

	private static readonly UIPath CUSTOM_SCROLL_HANDLE = new UIPath("MenuContainer/CustomMenuPanel/Panel/Scroll View/Scrollbar Vertical/Sliding Area/Handle", typeof(Image));

	private Configurator ConfigManager => Configurator.Instance;

	public Color ThemeColor { get; set; }

	public Color Background1 { get; set; }

	public Color Background2 { get; set; }

	public Color Background3 { get; set; }

	public Color Background4 { get; set; }

	public Color Background5 { get; set; }

	public Color Background6 { get; set; }

	public Color Background7 { get; set; }

	public Color Background8 { get; set; }

	public Color BorderColor { get; set; }

	public Color Highlight { get; set; }

	public Color TextFontColor { get; set; }

	public Color SubTextColor { get; set; }

	public Color DarkTextColor { get; set; }

	public Color ScrollBarColor { get; set; }

	public Color Darken { get; set; }

	public Color ButtonRegText { get; set; }

	public Color ButtonHoverText { get; set; }

	public Color ButtonHoverBG { get; set; }

	public void RecolorSubMenus()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		if (ConfigManager.enableSubMenuColor.Value)
		{
			ThemeColor = ColorParser.RGBA(ConfigManager.subMenuColor.Value);
			InitializeThemeColors();
			ApplyColors();
			SetupDynamicRecoloring();
		}
	}

	private void InitializeThemeColors()
	{
		//IL_0003: 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)
		//IL_001f: 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_003b: 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_0057: 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_0073: 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_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_009e: 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_00ba: 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)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: 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)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0137: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0162: Unknown result type (might be due to invalid IL or missing references)
		//IL_016f: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Unknown result type (might be due to invalid IL or missing references)
		//IL_018b: Unknown result type (might be due to invalid IL or missing references)
		//IL_019a: Unknown result type (might be due to invalid IL or missing references)
		//IL_020a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_0221: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
		Background1 = AdjustColor(ThemeColor, 0f, 0.7882f);
		Background2 = AdjustColor(ThemeColor, 1f, 0.4902f);
		Background3 = AdjustColor(ThemeColor, 0.3396f, 0.7f);
		Background4 = AdjustColor(ThemeColor, 1f, 0.0353f);
		Background5 = AdjustColor(ThemeColor, 0.35f, 0.9f);
		Background6 = AdjustColor(ThemeColor, 0.4f, 0.5f);
		Background7 = AdjustColor(ThemeColor, 0.5f, 0.8f);
		Background8 = AdjustColor(ThemeColor, 0f, 0.95f);
		BorderColor = AdjustColor(ThemeColor, 0.6698f, 1f);
		Highlight = AdjustColor(ThemeColor, 1f, 0.9451f);
		TextFontColor = AdjustColor(ThemeColor, 0.9529f, 1f);
		SubTextColor = AdjustColor(ThemeColor, 1f, 0.4471f);
		DarkTextColor = AdjustColor(ThemeColor, 0.2f, 0.9f);
		ScrollBarColor = AdjustColor(ThemeColor, 0.5f, 0.3f);
		Darken = AdjustColor(ThemeColor, 0f, 0.2f);
		if (ConfigManager.enableUseMenuColors.Value)
		{
			ButtonRegText = ColorParser.RGBA(ConfigManager.menuFontColor.Value);
			ButtonHoverText = ColorParser.RGBA(ConfigManager.menuRolloverFontColor.Value);
			ButtonHoverBG = ColorParser.RGBA(ConfigManager.menuRolloverBGColor.Value);
		}
		else
		{
			ButtonRegText = Highlight;
			ButtonHoverText = Color.black;
			ButtonHoverBG = Highlight;
		}
	}

	private Color AdjustColor(Color baseColor, float factor, float alpha)
	{
		//IL_0000: 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_002e: 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)
		return new Color(Mathf.Clamp(baseColor.r * factor, 0f, 1f), Mathf.Clamp(baseColor.g * factor, 0f, 1f), Mathf.Clamp(baseColor.b * factor, 0f, 1f), alpha);
	}

	public void ApplyColors()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: 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_0036: 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_0056: 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_0076: 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)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: 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_00c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0116: 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_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0144: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0191: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		//IL_0171: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		//IL_0219: Unknown result type (might be due to invalid IL or missing references)
		//IL_0229: Unknown result type (might be due to invalid IL or missing references)
		//IL_022f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0234: Unknown result type (might be due to invalid IL or missing references)
		//IL_023a: Unknown result type (might be due to invalid IL or missing references)
		//IL_024a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0250: Unknown result type (might be due to invalid IL or missing references)
		//IL_0255: Unknown result type (might be due to invalid IL or missing references)
		//IL_025b: Unknown result type (might be due to invalid IL or missing references)
		//IL_026b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0271: Unknown result type (might be due to invalid IL or missing references)
		//IL_0276: Unknown result type (might be due to invalid IL or missing references)
		//IL_027c: Unknown result type (might be due to invalid IL or missing references)
		//IL_028c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0292: Unknown result type (might be due to invalid IL or missing references)
		//IL_0297: Unknown result type (might be due to invalid IL or missing references)
		//IL_029d: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0303: Unknown result type (might be due to invalid IL or missing references)
		//IL_0313: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: Unknown result type (might be due to invalid IL or missing references)
		//IL_033e: Unknown result type (might be due to invalid IL or missing references)
		//IL_034e: Unknown result type (might be due to invalid IL or missing references)
		//IL_035e: Unknown result type (might be due to invalid IL or missing references)
		//IL_036e: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_039b: Unknown result type (might be due to invalid IL or missing references)
		//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_03db: Unknown result type (might be due to invalid IL or missing references)
		//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_040c: Unknown result type (might be due to invalid IL or missing references)
		//IL_041c: Unknown result type (might be due to invalid IL or missing references)
		//IL_042c: Unknown result type (might be due to invalid IL or missing references)
		//IL_043c: Unknown result type (might be due to invalid IL or missing references)
		//IL_044c: Unknown result type (might be due to invalid IL or missing references)
		//IL_045c: Unknown result type (might be due to invalid IL or missing references)
		//IL_046c: Unknown result type (might be due to invalid IL or missing references)
		//IL_047c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0497: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0502: Unknown result type (might be due to invalid IL or missing references)
		//IL_0512: Unknown result type (might be due to invalid IL or missing references)
		//IL_0522: Unknown result type (might be due to invalid IL or missing references)
		//IL_0532: Unknown result type (might be due to invalid IL or missing references)
		//IL_0542: Unknown result type (might be due to invalid IL or missing references)
		//IL_0548: Unknown result type (might be due to invalid IL or missing references)
		//IL_054e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0554: Unknown result type (might be due to invalid IL or missing references)
		//IL_0564: Unknown result type (might be due to invalid IL or missing references)
		//IL_0574: Unknown result type (might be due to invalid IL or missing references)
		//IL_0584: Unknown result type (might be due to invalid IL or missing references)
		//IL_0594: Unknown result type (might be due to invalid IL or missing references)
		//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0606: Unknown result type (might be due to invalid IL or missing references)
		//IL_060c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0612: Unknown result type (might be due to invalid IL or missing references)
		//IL_0618: Unknown result type (might be due to invalid IL or missing references)
		//IL_0628: Unknown result type (might be due to invalid IL or missing references)
		//IL_062e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0634: Unknown result type (might be due to invalid IL or missing references)
		//IL_063a: Unknown result type (might be due to invalid IL or missing references)
		//IL_064a: Unknown result type (might be due to invalid IL or missing references)
		//IL_065a: Unknown result type (might be due to invalid IL or missing references)
		//IL_066a: Unknown result type (might be due to invalid IL or missing references)
		//IL_067a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0689: Unknown result type (might be due to invalid IL or missing references)
		//IL_0699: Unknown result type (might be due to invalid IL or missing references)
		//IL_06a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_06df: Unknown result type (might be due to invalid IL or missing references)
		//IL_06e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_06eb: Unknown result type (might be due to invalid IL or missing references)
		//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_070b: Unknown result type (might be due to invalid IL or missing references)
		//IL_071b: Unknown result type (might be due to invalid IL or missing references)
		//IL_072b: Unknown result type (might be due to invalid IL or missing references)
		//IL_073b: Unknown result type (might be due to invalid IL or missing references)
		//IL_074b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0751: Unknown result type (might be due to invalid IL or missing references)
		//IL_0757: Unknown result type (might be due to invalid IL or missing references)
		//IL_075d: Unknown result type (might be due to invalid IL or missing references)
		//IL_076d: Unknown result type (might be due to invalid IL or missing references)
		//IL_077d: Unknown result type (might be due to invalid IL or missing references)
		//IL_078d: Unknown result type (might be due to invalid IL or missing references)
		//IL_079d: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_07bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_07cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07df: Unknown result type (might be due to invalid IL or missing references)
		//IL_07ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_07f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0801: Unknown result type (might be due to invalid IL or missing references)
		//IL_0811: Unknown result type (might be due to invalid IL or missing references)
		//IL_0817: Unknown result type (might be due to invalid IL or missing references)
		//IL_081d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0823: Unknown result type (might be due to invalid IL or missing references)
		//IL_0833: Unknown result type (might be due to invalid IL or missing references)
		//IL_0839: Unknown result type (might be due to invalid IL or missing references)
		//IL_083f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0845: Unknown result type (might be due to invalid IL or missing references)
		//IL_0855: Unknown result type (might be due to invalid IL or missing references)
		//IL_0865: Unknown result type (might be due to invalid IL or missing references)
		//IL_0875: Unknown result type (might be due to invalid IL or missing references)
		//IL_088b: Unknown result type (might be due to invalid IL or missing references)
		//IL_089b: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_08a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_08ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_08bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_08c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_08cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_08f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0904: Unknown result type (might be due to invalid IL or missing references)
		//IL_0914: Unknown result type (might be due to invalid IL or missing references)
		//IL_0924: Unknown result type (might be due to invalid IL or missing references)
		//IL_0933: Unknown result type (might be due to invalid IL or missing references)
		//IL_0943: Unknown result type (might be due to invalid IL or missing references)
		//IL_0953: Unknown result type (might be due to invalid IL or missing references)
		//IL_0963: Unknown result type (might be due to invalid IL or missing references)
		//IL_0973: Unknown result type (might be due to invalid IL or missing references)
		//IL_0983: Unknown result type (might be due to invalid IL or missing references)
		//IL_0989: Unknown result type (might be due to invalid IL or missing references)
		//IL_098f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0995: Unknown result type (might be due to invalid IL or missing references)
		SetColor(HOST_BG, Background8);
		SetColor(HOST_PANEL_BG, Background3);
		SetColor(HOST_BORDER, BorderColor);
		SetColor(HOST_LAN_TITLE, TextFontColor);
		SetColor(HOST_ONLINE_TITLE, TextFontColor);
		SetColor(HOST_ONLINE_INPUT_BG, Background2);
		SetColor(HOST_ONLINE_TAG_BORDER, BorderColor);
		SetColor(HOST_ONLINE_PUBLIC_BG, Background4);
		SetColor(HOST_ONLINE_PRIVATE_BG, Background4);
		SetColor(HOST_LAN_LOCAL_BG, Background4);
		SetColor(HOST_LAN_REMOTE_BG, Background4);
		SetColor(HOST_ONLINE_TAG_PLACE, TextFontColor);
		SetColor(HOST_ONLINE_TAG_TEXT, TextFontColor);
		SetColor(HOST_DESC, Highlight);
		SetColor(HOST_ONLINE_TAG_TEXT, TextFontColor);
		HandleToggleButtons(HOST_ONLINE_PUBLIC, HOST_ONLINE_PRIVATE);
		HandleToggleButtons(HOST_LAN_REMOTE, HOST_LAN_LOCAL);
		HoverButton(HOST_CONFIRM, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		HoverButton(HOST_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		if (PluginFinder.MoreCompany)
		{
			SetColor(CREWCOUNT_TITLE, Highlight);
			SetColor(CREWCOUNT_INPUT_BG, Background2);
			SetColor(COSMO_BUTTON, Highlight);
		}
		SetColor(FILE_PANEL_BG, Background3);
		SetColor(FILE_BORDER, BorderColor);
		SetColor(FILE_TITLE, TextFontColor);
		SetColor(FILE_TIP, Highlight);
		SetColor(FILE_DARK, Darken);
		if (!PluginFinder.BetterSaves)
		{
			RecolorChildObjects(FILES_IMAGES, "File", "DeleteButton", TextFontColor);
			SetupHostButton();
		}
		SetColor(LEAD_BORDER, BorderColor);
		SetColor(LEAD_TITLE, TextFontColor);
		HoverButton(LEAD_REFRESH, ButtonRegText, ButtonHoverText, Color.clear, ButtonHoverBG);
		HoverButton(LEAD_BACK, ButtonRegText, ButtonHoverText, Color.clear, ButtonHoverBG);
		HoverButton(LEAD_REMOVE, ButtonRegText, ButtonHoverText, Color.clear, ButtonHoverBG);
		HoverButton(LEAD_PLAY, ButtonRegText, ButtonHoverText, Color.clear, ButtonHoverBG);
		SetColor(LEAD_SCROLL_BAR, ScrollBarColor);
		UpdateScrollbarColors(LEAD_SCROLL_HANDLE);
		UpdateDropdownColors(LEAD_DROP);
		SetColor(LEAD_DROP_TEXT, TextFontColor);
		SetColor(LEAD_DROP_ARROW, Highlight);
		SetColor(LEAD_DROP_BG, Background5);
		SetColor(LEAD_DROP_ITEM_BG, Background2);
		SetColor(LEAD_DROP_ITEM_CHECK, Background7);
		SetColor(LEAD_DROP_ITEM_TEXT, SubTextColor);
		UpdateToggleColors(LEAD_DROP_ITEM_TOGGLE);
		SetColor(LOBBY_BG, Background1);
		SetColor(LOBBY_PANEL_BG, Background3);
		SetColor(LOBBY_BORDER, BorderColor);
		SetColor(LOBBY_TITLE, SubTextColor);
		if (PluginFinder.LobbyCompat)
		{
			DelayHelper.StartDelayedAction(0.3f, delegate
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				SetColor(LOBBYCOMPAT_REFRESH, ButtonRegText);
			});
			SetColor(LOBBYCOMPAT_REFRESH_HOVER, ButtonHoverBG);
		}
		else
		{
			HoverButton(LOBBY_REFRESH, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		}
		HoverButton(LOBBY_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(LOBBY_SCROLL_BAR, ScrollBarColor);
		UpdateScrollbarColors(LOBBY_SCROLL_HANDLE);
		SetColor(LOBBY_LIST_STATUS, Highlight);
		SetColor(LOBBY_TAG_BORDER, BorderColor);
		SetColor(LOBBY_TAG_TEXT, TextFontColor);
		SetColor(LOBBY_TAG_PLACEHOLDER, TextFontColor);
		SetColor(LOBBY_SORT_CHAL_BORDER, BorderColor);
		SetColor(LOBBY_SORT_CHAL_TEXT, TextFontColor);
		SetColor(LOBBY_SORT_CHAL_BOX, BorderColor);
		SetColor(LOBBY_SORT_CHAL_BOX_CHECK, BorderColor);
		UpdateDropdownColors(LOBBY_DROP);
		SetColor(LOBBY_DROP_TEXT, TextFontColor);
		SetColor(LOBBY_DROP_ARROW, Highlight);
		SetColor(LOBBY_DROP_BG, Background5);
		SetColor(LOBBY_DROP_ITEM_BG, Background2);
		SetColor(LOBBY_DROP_ITEM_CHECK, Background7);
		SetColor(LOBBY_DROP_ITEM_TEXT, SubTextColor);
		UpdateToggleColors(LOBBY_DROP_ITEM_TOGGLE);
		SetColor(LANWARN_BG, Background1);
		SetColor(LANWARN_PANEL_BG, Background3);
		SetColor(LANWARN_BORDER, BorderColor);
		SetColor(LANWARN_TEXT, SubTextColor);
		HoverButton(LANWARN_CONFIRM, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(NOTIFY_BG, Background1);
		SetColor(NOTIFY_PANEL_BG, Background3);
		SetColor(NOTIFY_BORDER, BorderColor);
		SetColor(NOTIFY_TEXT, SubTextColor);
		HoverButton(NOTIFY_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(DELETE_BG, Background1);
		SetColor(DELETE_PANEL_BG, Background3);
		SetColor(DELETE_BORDER, BorderColor);
		SetColor(DELETE_TEXT, SubTextColor);
		HoverButton(DELETE_CONFIRM, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		HoverButton(DELETE_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(CREDITS_BG, Background1);
		SetColor(CREDITS_PANEL_BG, Background3);
		SetColor(CREDITS_BORDER, BorderColor);
		SetColor(CREDITS_TITLE, TextFontColor);
		SetColor(CREDITS_TITLE_BG, Color.clear);
		SetColor(CREDITS_TEXT, TextFontColor);
		SetColor(CREDITS_TEXT_BG, Background3);
		SetColor(CREDITS_SCROLL_BAR, ScrollBarColor);
		SetColor(CREDITS_SCROLL_HANDLE, BorderColor);
		HoverButton(CREDITS_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(NEWS_BG, Background1);
		SetColor(NEWS_PANEL_BG, Background5);
		SetColor(NEWS_BORDER, BorderColor);
		SetColor(NEWS_TITLE, Highlight);
		SetColor(NEWS_TEXT, SubTextColor);
		HoverButton(NEWS_CONFIRM, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		SetColor(NEWS_BOX_1, Background6);
		SetColor(NEWS_BOX_2, Background6);
		SetColor(NEWS_BOX_3, Background6);
		SetColor(NEWS_BOX_4, Background6);
		SetColor(NEWS_BOX_5, Background6);
		SetColor(NEWS_BOX_6, Background6);
		HoverButton(SETTINGS_KEYBINDINGS, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		HoverButton(SETTINGS_CONFIRM, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		HoverButton(SETTINGS_BACK, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		HoverButton(SETTINGS_DEFAULT, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		SetColor(SETTINGS_KEYS_TITLE, Highlight);
		SetColor(KEYS_SCROLL_BAR, ScrollBarColor);
		SetColor(KEYS_SCROLL_HANDLE, Highlight);
		SetColorOnButtonClick(SETTINGS_KEYS_REBIND_TEXT, SETTINGS_KEYBINDINGS, TextFontColor);
		HoverButton(SETTINGS_KEYS_BACK, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		HoverButton(SETTINGS_KEYS_DEFAULT, ButtonRegText, ButtonHoverText, Background1, ButtonHoverBG);
		if (ConfigManager.enableCustomMenuItem.Value)
		{
			SetColor(CUSTOM_BG, Background1);
			SetColor(CUSTOM_PANEL_BG, Background3);
			SetColor(CUSTOM_BORDER, BorderColor);
			SetColor(CUSTOM_TITLE, TextFontColor);
			SetColor(CUSTOM_TITLE_BG, Color.clear);
			SetColor(CUSTOM_TEXT, TextFontColor);
			SetColor(CUSTOM_TEXT_BG, Background3);
			SetColor(CUSTOM_SCROLL_BAR, ScrollBarColor);
			SetColor(CUSTOM_SCROLL_HANDLE, BorderColor);
			HoverButton(CUSTOM_BACK, ButtonRegText, ButtonHoverText, Darken, ButtonHoverBG);
		}
	}

	public void SetupDynamicRecoloring()
	{
		if ((Object)(object)DynamicColorManager.Instance == (Object)null)
		{
			LogWarden.LogError("DynamicColorManager instance not found.");
			return;
		}
		DynamicColorManager.Instance.SubMenuColors = this;
		string parentPath = "MenuContainer/LobbyList/ListPanel/Scroll View/Viewport/Content";
		DynamicColorManager.Instance.AttachObserver(parentPath, this);
		string parentPath2 = "MenuContainer/LobbyHostSettings/ChallengeLeaderboard/LobbyList (1)/ListPanel/Scroll View/Viewport/Content/";
		DynamicColorManager.Instance.AttachObserver(parentPath2, this);
	}

	public void UpdateScrollbarColors(UIPath uiPath)
	{
		//IL_0076: 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_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: 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)
		Transform val = PathFinder.Probe(uiPath.Path);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("[DynamicColorManager] Scrollbar path not found: " + uiPath.Path);
			return;
		}
		Component component = ((Component)val).GetComponent(uiPath.ComponentType);
		if ((Object)(object)component == (Object)null || !(component is Scrollbar))
		{
			LogWarden.LogError("[DynamicColorManager] No " + uiPath.ComponentType.Name + " component found at path: " + uiPath.Path);
			return;
		}
		Component obj = ((component is Scrollbar) ? component : null);
		ColorBlock colors = ((Selectable)obj).colors;
		((ColorBlock)(ref colors)).normalColor = Background2;
		((ColorBlock)(ref colors)).highlightedColor = BorderColor;
		((ColorBlock)(ref colors)).pressedColor = BorderColor;
		((Selectable)obj).colors = colors;
	}

	public void UpdateDropdownColors(UIPath uiPath)
	{
		//IL_0076: 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_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: 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)
		Transform val = PathFinder.Probe(uiPath.Path);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("[DynamicColorManager] Dropdown path not found: " + uiPath.Path);
			return;
		}
		Component component = ((Component)val).GetComponent(uiPath.ComponentType);
		if ((Object)(object)component == (Object)null || !(component is TMP_Dropdown))
		{
			LogWarden.LogError("[DynamicColorManager] No " + uiPath.ComponentType.Name + " component found at path: " + uiPath.Path);
			return;
		}
		Component obj = ((component is TMP_Dropdown) ? component : null);
		ColorBlock colors = ((Selectable)obj).colors;
		((ColorBlock)(ref colors)).normalColor = Background2;
		((ColorBlock)(ref colors)).highlightedColor = Highlight;
		((ColorBlock)(ref colors)).pressedColor = Highlight;
		((Selectable)obj).colors = colors;
	}

	public void UpdateToggleColors(UIPath uiPath)
	{
		//IL_0076: 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_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.Probe(uiPath.Path);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("[DynamicColorManager] Toggle path not found: " + uiPath.Path);
			return;
		}
		Component component = ((Component)val).GetComponent(uiPath.ComponentType);
		if ((Object)(object)component == (Object)null || !(component is Toggle))
		{
			LogWarden.LogError("[DynamicColorManager] No " + uiPath.ComponentType.Name + " component found at path: " + uiPath.Path);
			return;
		}
		Component obj = ((component is Toggle) ? component : null);
		ColorBlock colors = ((Selectable)obj).colors;
		((ColorBlock)(ref colors)).normalColor = Background6;
		((ColorBlock)(ref colors)).highlightedColor = Background7;
		((ColorBlock)(ref colors)).pressedColor = Background7;
		((ColorBlock)(ref colors)).selectedColor = Background7;
		((ColorBlock)(ref colors)).disabledColor = Darken;
		((Selectable)obj).colors = colors;
	}

	public static void SetColor(UIPath uiPath, Color color)
	{
		//IL_004a: 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)
		Transform[] array = PathFinder.ProbeAll(uiPath.Path);
		if (array != null && array.Length > uiPath.Index)
		{
			Transform val = array[uiPath.Index];
			if ((Object)(object)val != (Object)null)
			{
				TMP_Text component = ((Component)val).GetComponent<TMP_Text>();
				if ((Object)(object)component != (Object)null)
				{
					component.overrideColorTags = true;
					((Graphic)component).color = color;
					return;
				}
				Graphic component2 = ((Component)val).GetComponent<Graphic>();
				if ((Object)(object)component2 != (Object)null)
				{
					component2.color = color;
				}
				else
				{
					LogWarden.LogError($"[SetColor] {uiPath.ComponentType.Name} component not found on object at '{uiPath.Path}' with index {uiPath.Index}.");
				}
			}
			else
			{
				LogWarden.LogError($"[SetColor] Object at index {uiPath.Index} not found at '{uiPath.Path}'.");
			}
		}
		else
		{
			LogWarden.LogError($"[SetColor] Not enough objects found at '{uiPath.Path}'. Expected at least {uiPath.Index + 1}, found {array.Length}.");
		}
	}

	private void RecolorChildObjects(UIPath parentUIPath, string parentNamePrefix, string childName, Color color)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Expected O, but got Unknown
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.Probe(parentUIPath.Path);
		if ((Object)(object)val != (Object)null)
		{
			foreach (Transform item in val)
			{
				Transform val2 = item;
				if (((Object)val2).name.StartsWith(parentNamePrefix))
				{
					Transform val3 = val2.Find(childName);
					if (Object.op_Implicit((Object)(object)val3))
					{
						Component component = ((Component)val3).GetComponent(parentUIPath.ComponentType);
						Graphic val4 = (Graphic)(object)((component is Graphic) ? component : null);
						if (Object.op_Implicit((Object)(object)val4))
						{
							val4.color = color;
						}
						else
						{
							LogWarden.LogError("[SubMenuColor] " + parentUIPath.ComponentType.Name + " component not found on child '" + childName + "' in parent '" + ((Object)val2).name + "'.");
						}
					}
					else
					{
						LogWarden.LogError("[SubMenuColor] Child '" + childName + "' not found in parent '" + ((Object)val2).name + "'.");
					}
				}
			}
			return;
		}
		LogWarden.LogError("[SubMenuColor] Parent path '" + parentUIPath.Path + "' not found.");
	}

	public static void HoverButton(UIPath uiPath, Color regularFontColor, Color highlightFontColor, Color regularBGColor, Color highlightBGColor)
	{
		//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_000e: 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_0015: 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_001d: 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_00ca: 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_0135: Unknown result type (might be due to invalid IL or missing references)
		//IL_013f: Expected O, but got Unknown
		Transform val = PathFinder.Probe(uiPath.Path);
		if ((Object)(object)val != (Object)null)
		{
			Button component = ((Component)val).GetComponent<Button>();
			Animator component2 = ((Component)val).GetComponent<Animator>();
			Image backgroundImage = ((Component)val).GetComponent<Image>();
			Transform obj = val.Find("Text (TMP)");
			TMP_Text textComponent = ((obj != null) ? ((Component)obj).GetComponent<TMP_Text>() : null);
			if ((Object)(object)component != (Object)null && (Object)(object)textComponent != (Object)null && (Object)(object)backgroundImage != (Object)null)
			{
				if ((Object)(object)component2 != (Object)null)
				{
					((Behaviour)component2).enabled = false;
				}
				((Selectable)component).transition = (Transition)0;
				textComponent.overrideColorTags = true;
				((Graphic)textComponent).color = regularFontColor;
				((Behaviour)backgroundImage).enabled = true;
				backgroundImage.pixelsPerUnitMultiplier = 4f;
				((Graphic)backgroundImage).color = regularBGColor;
				RectTransform component3 = ((Component)backgroundImage).GetComponent<RectTransform>();
				if (component3 != null)
				{
					component3.SetSizeWithCurrentAnchors((Axis)1, 22f);
				}
				((UnityEventBase)component.onClick).RemoveAllListeners();
				((UnityEvent)component.onClick).AddListener((UnityAction)delegate
				{
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					//IL_0018: Unknown result type (might be due to invalid IL or missing references)
					((Graphic)backgroundImage).color = regularBGColor;
					((Graphic)textComponent).color = regularFontColor;
				});
				EventTrigger component4 = ((Component)component).GetComponent<EventTrigger>();
				if ((Object)(object)component4 != (Object)null)
				{
					Object.Destroy((Object)(object)component4);
				}
				EventTrigger trigger = ((Component)component).gameObject.AddComponent<EventTrigger>();
				AddEventTrigger(trigger, (EventTriggerType)0, delegate
				{
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					//IL_0018: Unknown result type (might be due to invalid IL or missing references)
					((Graphic)backgroundImage).color = highlightBGColor;
					((Graphic)textComponent).color = highlightFontColor;
				});
				AddEventTrigger(trigger, (EventTriggerType)1, delegate
				{
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					//IL_0018: Unknown result type (might be due to invalid IL or missing references)
					((Graphic)backgroundImage).color = regularBGColor;
					((Graphic)textComponent).color = regularFontColor;
				});
				Transform obj2 = val.Find("SelectionHighlight");
				CanvasRenderer val2 = ((obj2 != null) ? ((Component)obj2).GetComponent<CanvasRenderer>() : null);
				if ((Object)(object)val2 != (Object)null)
				{
					val2.cull = true;
				}
			}
			else
			{
				LogWarden.LogError("[HoverButton] Required components not found at '" + uiPath.Path + "'.");
			}
		}
		else
		{
			LogWarden.LogError("[HoverButton] Failed to find path '" + uiPath.Path + "'.");
		}
	}

	private static void AddEventTrigger(EventTrigger trigger, EventTriggerType type, UnityAction<BaseEventData> action)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: 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_000d: Expected O, but got Unknown
		Entry val = new Entry
		{
			eventID = type
		};
		((UnityEvent<BaseEventData>)(object)val.callback).AddListener(action);
		trigger.triggers.Add(val);
	}

	private void HandleToggleButtons(UIPath buttonPath1, UIPath buttonPath2)
	{
		ToggleButton(buttonPath1, highlighted: false);
		ToggleButton(buttonPath2, highlighted: true);
		AttachToggleHandler(buttonPath1, buttonPath2);
		AttachToggleHandler(buttonPath2, buttonPath1);
	}

	private void AttachToggleHandler(UIPath buttonPath, UIPath otherButtonPath)
	{
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Expected O, but got Unknown
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Expected O, but got Unknown
		Transform obj = PathFinder.Probe(buttonPath.Path);
		Button val = ((obj != null) ? ((Component)obj).GetComponent<Button>() : null);
		if ((Object)(object)val != (Object)null)
		{
			((UnityEvent)val.onClick).AddListener((UnityAction)delegate
			{
				ToggleButton(buttonPath, highlighted: true);
			});
			((UnityEvent)val.onClick).AddListener((UnityAction)delegate
			{
				ToggleButton(otherButtonPath, highlighted: false);
			});
		}
		else
		{
			LogWarden.LogError("[SubMenuColor] Button component not found at '" + buttonPath.Path + "'.");
		}
	}

	private void ToggleButton(UIPath buttonPath, bool highlighted)
	{
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: 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)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f5: 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_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0125: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0163: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.Probe(buttonPath.Path);
		Image val2 = ((val != null) ? ((Component)val).GetComponent<Image>() : null);
		Animator val3 = ((val != null) ? ((Component)val).GetComponent<Animator>() : null);
		if ((Object)(object)val3 != (Object)null)
		{
			((Behaviour)val3).enabled = false;
		}
		if ((Object)(object)val2 != (Object)null)
		{
			((Behaviour)val2).enabled = true;
			val2.pixelsPerUnitMultiplier = 4f;
			((Graphic)val2).color = (highlighted ? ButtonHoverBG : Color.clear);
			Transform val4 = val.Find("SelectionHighlight");
			if ((Object)(object)val4 != (Object)null)
			{
				Image component = ((Component)val4).GetComponent<Image>();
				if ((Object)(object)component != (Object)null)
				{
					((Behaviour)component).enabled = false;
				}
			}
			TMP_Text componentInChildren = ((Component)val).GetComponentInChildren<TMP_Text>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				componentInChildren.overrideColorTags = true;
				((Graphic)componentInChildren).color = (highlighted ? ButtonHoverText : ButtonRegText);
				componentInChildren.extraPadding = true;
				componentInChildren.fontSizeMax = 13f;
				componentInChildren.fontStyle = (FontStyles)16;
				RectTransform rectTransform = componentInChildren.rectTransform;
				Vector3 localScale = ((Transform)rectTransform).localScale;
				((Transform)rectTransform).localScale = new Vector3(localScale.x, 1.1f, localScale.z);
			}
			{
				foreach (Transform item in val)
				{
					TMP_Text[] componentsInChildren = ((Component)item).GetComponentsInChildren<TMP_Text>();
					foreach (TMP_Text val5 in componentsInChildren)
					{
						if (((Object)((Component)val5).gameObject).name == "StatsText")
						{
							val5.overrideColorTags = true;
							((Graphic)val5).color = (highlighted ? ButtonHoverText : ButtonRegText);
						}
					}
				}
				return;
			}
		}
		LogWarden.LogError("[SubMenuColor] Image component for highlight not found at '" + buttonPath.Path + "'.");
	}

	private void SetupHostButton()
	{
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Expected O, but got Unknown
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Expected O, but got Unknown
		Transform val = PathFinder.Probe(HOST_BUTTON.Path);
		if ((Object)(object)val != (Object)null)
		{
			Button component = ((Component)val).GetComponent<Button>();
			if ((Object)(object)component != (Object)null)
			{
				((UnityEvent)component.onClick).RemoveListener(new UnityAction(HandleSaveButtons));
				((UnityEvent)component.onClick).AddListener(new UnityAction(HandleSaveButtons));
				LogWarden.LogInfo("Listener added to host button to handle save buttons.");
			}
			else
			{
				LogWarden.LogError("Host button component not found.");
			}
		}
		else
		{
			LogWarden.LogError("Host button path not found.");
		}
	}

	private void HandleSaveButtons()
	{
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.Probe(FILES_BUTTON.Path);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("[SubMenuColor] Parent path '" + FILES_BUTTON.Path + "' not found.");
			return;
		}
		List<Button> list = new List<Button>();
		foreach (Transform item in val)
		{
			Button component = ((Component)item).GetComponent<Button>();
			if ((Object)(object)component != (Object)null)
			{
				list.Add(component);
			}
		}
		foreach (Button item2 in list)
		{
			if (EmblemPlugin.SaveFileStrings.TryGetValue(((Component)item2).gameObject, out var value))
			{
				bool highlighted = GameNetworkManager.Instance.currentSaveFileName == value;
				UIPath buttonPath = new UIPath(((Object)item2).name, typeof(Button));
				ToggleButton(buttonPath, highlighted);
			}
		}
		AttachToggleHandlerToAll(list.ToArray());
	}

	private void AttachToggleHandlerToAll(Button[] allButtons)
	{
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Expected O, but got Unknown
		Button[] array = allButtons;
		foreach (Button button in array)
		{
			((UnityEventBase)button.onClick).RemoveAllListeners();
			((UnityEvent)button.onClick).AddListener((UnityAction)delegate
			{
				Button[] array2 = allButtons;
				foreach (Button val in array2)
				{
					bool highlighted = (Object)(object)val == (Object)(object)button;
					UIPath buttonPath = new UIPath(((Object)val).name, typeof(Button));
					ToggleButton(buttonPath, highlighted);
				}
			});
		}
	}

	private void SetColorOnButtonClick(UIPath targetUIPath, UIPath triggerUIPath, Color color)
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.ProbeAll(triggerUIPath.Path)?.ElementAtOrDefault(triggerUIPath.Index);
		if ((Object)(object)val != (Object)null)
		{
			((Component)val).gameObject.AddComponent<ColorSetter>().SetupColorChangeDeferred(targetUIPath, triggerUIPath.ComponentType, color);
		}
		else
		{
			LogWarden.LogError("[SetColorOnButtonClick] Trigger object not found.");
		}
	}

	public void RecolorCosmoButton()
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		if (PluginFinder.MoreCompany)
		{
			InitializeThemeColors();
			SetColor(COSMO_BUTTON, Highlight);
		}
	}
}
[BepInPlugin("Darkbrewery.Emblem", "Emblem", "1.5.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class EmblemPlugin : BaseUnityPlugin
{
	public static Dictionary<GameObject, string> SaveFileStrings = new Dictionary<GameObject, string>();

	private UIComponent uiComponent;

	private HeaderReplacement headerReplacement;

	private Boardwalk boardwalk;

	private BackgroundManager backgroundManager;

	private LoadingText loadingText;

	private MenuMoodSetter menuMoodSetter;

	private Harmony harmony;

	private CustomMediaManager customMediaManager;

	private SceneManagerHelper sceneManagerHelper;

	private InterfaceDecorator interfaceDecorator;

	private VersionStyler versionStyler;

	private Slideshow slideshow;

	private SubMenuColor subMenuColor;

	private void Awake()
	{
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Expected O, but got Unknown
		if (PluginFinder.LobbyCompat)
		{
			LobbyCCheck.Init();
		}
		LogWarden.Initialize(((BaseUnityPlugin)this).Logger);
		LogWarden.LogInfo("   ---------------------------------------------------------------------   ");
		LogWarden.LogInfo(" %%          EEEEE   M     M   BBBBB    L      EEEEE   M     M          %% ");
		LogWarden.LogInfo("#   *   ==   E       MM   MM   B    B   L      E       MM   MM   ==   *   #");
		LogWarden.LogInfo("  *   *      EEEE    M M M M   BBBBB    L      EEEE    M M M M      *   *  ");
		LogWarden.LogInfo("#   *   ==   E       M  M  M   B    B   L      E       M  M  M   ==   *   #");
		LogWarden.LogInfo(" %%          EEEEE   M     M   BBBBB    LLLLL  EEEEE   M     M          %% ");
		LogWarden.LogInfo("   ------------------------- BY DARKBREWERY ----------------------------   ");
		LogWarden.LogInfo("Stirring from darkness...");
		try
		{
			harmony = new Harmony("com.darkbrewery.emblem.harmony");
			Configurator.InitializeInstance(((BaseUnityPlugin)this).Config);
			customMediaManager = new CustomMediaManager();
			uiComponent = new UIComponent();
			backgroundManager = new BackgroundManager();
			headerReplacement = new HeaderReplacement();
			boardwalk = new Boardwalk();
			loadingText = new LoadingText();
			menuMoodSetter = new MenuMoodSetter();
			versionStyler = new VersionStyler();
			slideshow = new Slideshow(((Component)this).transform);
			subMenuColor = new SubMenuColor();
			interfaceDecorator = new InterfaceDecorator(uiComponent, backgroundManager, headerReplacement, boardwalk, loadingText, menuMoodSetter, versionStyler, slideshow, subMenuColor);
			sceneManagerHelper = new SceneManagerHelper(interfaceDecorator);
			harmony.PatchAll();
			LogWarden.LogInfo("Successfully deployed, its intent shrouded");
		}
		catch (Exception arg)
		{
			LogWarden.LogError($"Error initializing Emblem plugin: {arg}");
		}
	}
}
public class ColorSetter : MonoBehaviour
{
	private SubMenuColor.UIPath targetUIPath;

	private Color newColor;

	private Type triggerComponentType;

	private Button button;

	private void OnDestroy()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		if ((Object)(object)button != (Object)null)
		{
			((UnityEvent)button.onClick).RemoveListener(new UnityAction(OnButtonClick));
		}
	}

	public void SetupColorChangeDeferred(SubMenuColor.UIPath targetPath, Type triggerCompType, Color color)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Expected O, but got Unknown
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Expected O, but got Unknown
		targetUIPath = targetPath;
		newColor = color;
		triggerComponentType = triggerCompType;
		ref Button reference = ref button;
		Component component = ((Component)this).GetComponent(triggerComponentType);
		reference = (Button)(object)((component is Button) ? component : null);
		if ((Object)(object)button != (Object)null)
		{
			((UnityEvent)button.onClick).RemoveListener(new UnityAction(OnButtonClick));
			((UnityEvent)button.onClick).AddListener(new UnityAction(OnButtonClick));
		}
		else
		{
			LogWarden.LogError("[ColorSetter] Trigger component not found on this gameObject.");
		}
	}

	private void OnButtonClick()
	{
		((MonoBehaviour)this).StartCoroutine(WaitForTargetAndApplyColor());
	}

	private IEnumerator WaitForTargetAndApplyColor()
	{
		Transform targetTransform = null;
		while ((Object)(object)targetTransform == (Object)null)
		{
			targetTransform = PathFinder.ProbeAll(targetUIPath.Path)?.ElementAtOrDefault(targetUIPath.Index);
			if ((Object)(object)targetTransform == (Object)null)
			{
				yield return (object)new WaitForSeconds(0.5f);
			}
		}
		Component component = ((Component)targetTransform).GetComponent(targetUIPath.ComponentType);
		Graphic val = (Graphic)(object)((component is Graphic) ? component : null);
		if ((Object)(object)val != (Object)null)
		{
			val.color = newColor;
		}
		else
		{
			LogWarden.LogError("[ColorSetter] " + targetUIPath.ComponentType.Name + " component not found on target object.");
		}
	}
}
public class DelayHelper : MonoBehaviour
{
	private static DelayHelper instance;

	private Dictionary<string, Coroutine> coroutineDictionary = new Dictionary<string, Coroutine>();

	private Dictionary<TextMeshProUGUI, Coroutine> typingCoroutines = new Dictionary<TextMeshProUGUI, Coroutine>();

	private static DelayHelper GetInstance()
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Expected O, but got Unknown
		if ((Object)(object)instance == (Object)null)
		{
			GameObject val = new GameObject("GlobalDelayHelper");
			instance = val.AddComponent<DelayHelper>();
			Object.DontDestroyOnLoad((Object)val);
		}
		return instance;
	}

	public static void StopAll()
	{
		foreach (Coroutine value in GetInstance().coroutineDictionary.Values)
		{
			((MonoBehaviour)GetInstance()).StopCoroutine(value);
		}
		GetInstance().coroutineDictionary.Clear();
	}

	public static void StartDelayedAction(float delayInSeconds, Action action)
	{
		GetInstance().DelayedAction(delayInSeconds, action);
	}

	private void DelayedAction(float delayInSeconds, Action action)
	{
		((MonoBehaviour)this).StartCoroutine(DelayCoroutine(delayInSeconds, action));
	}

	private IEnumerator DelayCoroutine(float delayInSeconds, Action action)
	{
		yield return (object)new WaitForSeconds(delayInSeconds);
		action?.Invoke();
	}

	public static void StartRepeatingAction(string name, float intervalInSeconds, Action action)
	{
		StopRepeatingAction(name);
		Coroutine value = ((MonoBehaviour)GetInstance()).StartCoroutine(GetInstance().RepeatingActionCoroutine(intervalInSeconds, action));
		GetInstance().coroutineDictionary[name] = value;
	}

	public static void StopRepeatingAction(string name)
	{
		if ((Object)(object)instance != (Object)null && instance.coroutineDictionary.TryGetValue(name, out var value))
		{
			((MonoBehaviour)instance).StopCoroutine(value);
			instance.coroutineDictionary.Remove(name);
		}
	}

	private IEnumerator RepeatingActionCoroutine(float intervalInSeconds, Action action)
	{
		while (true)
		{
			yield return (object)new WaitForSeconds(intervalInSeconds);
			action?.Invoke();
		}
	}

	public static void StartFadeAction(Image image, float duration, Action onComplete = null)
	{
		GetInstance().FadeImageCoroutine(image, duration, onComplete);
	}

	private void FadeImageCoroutine(Image image, float duration, Action onComplete)
	{
		((MonoBehaviour)this).StartCoroutine(FadeImage(image, duration, onComplete));
	}

	private IEnumerator FadeImage(Image image, float duration, Action onComplete)
	{
		float currentTime = 0f;
		Color startColor = ((Graphic)image).color;
		Color endColor = new Color(startColor.r, startColor.g, startColor.b, 0f);
		while (currentTime < duration)
		{
			currentTime += Time.deltaTime;
			((Graphic)image).color = Color.Lerp(startColor, endColor, currentTime / duration);
			yield return null;
		}
		((Graphic)image).color = endColor;
		onComplete?.Invoke();
	}

	public static void StartTypingText(TextMeshProUGUI textComponent, string text, float typingSpeed, float flashDuration = 0.3f, int flashCount = 2)
	{
		GetInstance().TypingTextCoroutine(textComponent, text, typingSpeed, flashDuration, flashCount);
	}

	private void TypingTextCoroutine(TextMeshProUGUI textComponent, string text, float typingSpeed, float flashDuration, int flashCount)
	{
		if (typingCoroutines.TryGetValue(textComponent, out var value))
		{
			((MonoBehaviour)this).StopCoroutine(value);
			typingCoroutines.Remove(textComponent);
		}
		Coroutine value2 = ((MonoBehaviour)this).StartCoroutine(TypeTextWithCursorFlash(textComponent, text, typingSpeed, flashDuration, flashCount));
		typingCoroutines[textComponent] = value2;
	}

	private IEnumerator TypeTextWithCursorFlash(TextMeshProUGUI textComponent, string text, float typingSpeed, float flashDuration, int flashCount)
	{
		StringBuilder stringBuilder = new StringBuilder();
		for (int j = 0; j < flashCount; j++)
		{
			((TMP_Text)textComponent).text = "_";
			yield return (object)new WaitForSeconds(flashDuration);
			((TMP_Text)textComponent).text = "";
			yield return (object)new WaitForSeconds(flashDuration);
		}
		foreach (char value in text)
		{
			stringBuilder.Append(value);
			((TMP_Text)textComponent).text = stringBuilder.ToString() + "_";
			yield return (object)new WaitForSeconds(typingSpeed);
			((TMP_Text)textComponent).text = stringBuilder.ToString();
		}
	}
}
public class EmblemFolder
{
	private readonly string basePluginsPath;

	private readonly Dictionary<string, string> fullPathCache = new Dictionary<string, string>();

	private readonly Dictionary<string, IEnumerable<string>> validPathsCache = new Dictionary<string, IEnumerable<string>>();

	private readonly Lazy<IEnumerable<string>> emblemDirectories;

	public EmblemFolder()
	{
		basePluginsPath = Path.Combine(Paths.BepInExRootPath, "plugins");
		emblemDirectories = new Lazy<IEnumerable<string>>(() => FindEmblemDirectories());
	}

	private IEnumerable<string> FindEmblemDirectories()
	{
		try
		{
			return (from dir in Directory.GetDirectories(basePluginsPath, "*", SearchOption.AllDirectories)
				where Path.GetFileName(dir).Equals("Emblem", StringComparison.OrdinalIgnoreCase)
				select dir).ToList();
		}
		catch (Exception ex)
		{
			LogWarden.LogError("[EmblemFolder] Error finding Emblem directories: " + ex.Message);
			return new List<string>();
		}
	}

	public string FindFullPath(string inputPath)
	{
		if (fullPathCache.TryGetValue(inputPath, out var value))
		{
			return value;
		}
		string path = ExtractRelativePathFromEmblem(inputPath);
		string[] directories = Directory.GetDirectories(basePluginsPath, "*", SearchOption.AllDirectories);
		foreach (string text in directories)
		{
			if (text.EndsWith("Emblem", StringComparison.OrdinalIgnoreCase))
			{
				string text2 = Path.Combine(text, path);
				if (File.Exists(text2) || Directory.Exists(text2))
				{
					fullPathCache[inputPath] = text2;
					return text2;
				}
			}
		}
		LogWarden.LogError("[EmblemFolder] Could not find a valid path for: " + inputPath);
		return null;
	}

	public IEnumerable<string> FindAllValidPaths(string inputPathPattern)
	{
		if (validPathsCache.TryGetValue(inputPathPattern, out var value))
		{
			return value;
		}
		string path = ExtractRelativePathFromEmblem(inputPathPattern);
		string[] directories = Directory.GetDirectories(basePluginsPath, "*", SearchOption.AllDirectories);
		List<string> list = new List<string>();
		string[] array = directories;
		foreach (string text in array)
		{
			if (text.EndsWith("Emblem", StringComparison.OrdinalIgnoreCase))
			{
				string searchPattern = Path.Combine(text, path);
				list.AddRange(Directory.GetFiles(text, searchPattern, SearchOption.AllDirectories));
			}
		}
		validPathsCache[inputPathPattern] = list;
		return list;
	}

	private string ExtractRelativePathFromEmblem(string path)
	{
		string[] array = path.Split(new char[2]
		{
			Path.DirectorySeparatorChar,
			Path.AltDirectorySeparatorChar
		}, StringSplitOptions.RemoveEmptyEntries);
		int num = Array.FindIndex(array, (string segment) => segment.Equals("Emblem", StringComparison.OrdinalIgnoreCase));
		if (num != -1 && num < array.Length - 1)
		{
			return Path.Combine(array.Skip(num + 1).ToArray());
		}
		return path;
	}
}
public class ImageFilters
{
	private readonly Configurator configManager;

	public ImageFilters(Configurator configManager)
	{
		this.configManager = configManager;
	}

	public void Blend(string targetImagePath, Color vignetteColor)
	{
		//IL_0091: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_0151: Unknown result type (might be due to invalid IL or missing references)
		Transform val = PathFinder.Probe(targetImagePath);
		if ((Object)(object)val == (Object)null)
		{
			LogWarden.LogError("ImageFilters.Blend: Image with path '" + targetImagePath + "' not found.");
			return;
		}
		GameObject gameObject = ((Component)val).gameObject;
		Transform val2 = gameObject.transform.Find("VignetteOverlay");
		if (!configManager.enableRadiantTaper.Value)
		{
			if ((Object)(object)val2 != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)val2).gameObject);
				LogWarden.LogInfo("ImageFilters.Blend: Vignette effect removed from '" + targetImagePath + "'.");
			}
			return;
		}
		GameObject val3;
		if ((Object)(object)val2 != (Object)null)
		{
			val3 = ((Component)val2).gameObject;
		}
		else
		{
			val3 = new GameObject("VignetteOverlay");
			RectTransform obj = val3.AddComponent<RectTransform>();
			((Transform)obj).SetParent(gameObject.transform, false);
			((Transform)obj).SetAsLastSibling();
			Rect rect = gameObject.GetComponent<RectTransform>().rect;
			float width = ((Rect)(ref rect)).width;
			rect = gameObject.GetComponent<RectTransform>().rect;
			obj.sizeDelta = new Vector2(width, ((Rect)(ref rect)).height);
		}
		Image obj2 = val3.GetComponent<Image>() ?? val3.AddComponent<Image>();
		Texture2D val4 = CreateVignetteTexture(((Texture)gameObject.GetComponent<Image>().sprite.texture).width, ((Texture)gameObject.GetComponent<Image>().sprite.texture).height, vignetteColor);
		obj2.sprite = Sprite.Create(val4, new Rect(0f, 0f, (float)((Texture)val4).width, (float)((Texture)val4).height), new Vector2(0.5f, 0.5f));
		((Graphic)obj2).raycastTarget = false;
	}

	private Texture2D CreateVignetteTexture(int width, int height, Color vignetteColor)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Expected O, but got Unknown
		//IL_005b: 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: 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)
		Texture2D val = new Texture2D(width, height, (TextureFormat)4, false);
		Color val2 = default(Color);
		for (int i = 0; i < height; i++)
		{
			for (int j = 0; j < width; j++)
			{
				float distance2 = j;
				float distance3 = width - j;
				float distance4 = height - i;
				float distance5 = i;
				float num = Mathf.Max(CalculateExponentialBlend(distance2, width), CalculateExponentialBlend(distance3, width));
				float num2 = Mathf.Max(CalculateExponentialBlend(distance4, height), CalculateExponentialBlend(distance5, height));
				float num3 = Mathf.Max(num, num2);
				((Color)(ref val2))..ctor(vignetteColor.r, vignetteColor.g, vignetteColor.b, num3);
				val.SetPixel(j, i, val2);
			}
		}
		val.Apply();
		return val;
		static float CalculateExponentialBlend(floa

Plugins/loaforc-loaforcsSoundAPI/me.loaforc.soundapi.dll

Decompiled 4 days ago
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using loaforcsSoundAPI.API;
using loaforcsSoundAPI.Behaviours;
using loaforcsSoundAPI.Data;
using loaforcsSoundAPI.LethalCompany;
using loaforcsSoundAPI.LethalCompany.Conditions;
using loaforcsSoundAPI.Providers.Conditions;
using loaforcsSoundAPI.Providers.Formats;
using loaforcsSoundAPI.Utils;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("me.loaforc.soundapi")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.12.0")]
[assembly: AssemblyInformationalVersion("1.0.12+1b30b029801e2cb447a946bced5682802d4af417")]
[assembly: AssemblyProduct("loaforcsSoundAPI")]
[assembly: AssemblyTitle("me.loaforc.soundapi")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.12.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 loaforcsSoundAPI
{
	public static class SoundLoader
	{
		public static bool GetAudioClip(string packName, string folder, string soundName, out AudioClip clip)
		{
			clip = null;
			if (!GetAudioPath(packName, folder, soundName, out var path))
			{
				((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed getting path, check above for more detailed error!");
				return false;
			}
			clip = SoundAPI.FileFormats[Path.GetExtension(path).ToLower()].LoadAudioClip(path);
			if ((Object)(object)clip == (Object)null)
			{
				((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed getting clip from disk, check above for more detailed error!");
				return false;
			}
			if (string.IsNullOrEmpty(clip.GetName()))
			{
				((Object)clip).name = soundName;
			}
			return true;
		}

		private static bool GetAudioPath(string packName, string folder, string soundName, out string path)
		{
			string text = Path.Combine(Paths.PluginPath, packName, "sounds", folder);
			path = Path.Combine(text, soundName);
			if (!Directory.Exists(text))
			{
				((ManualLogSource)SoundPlugin.logger).LogError((object)(text + " doesn't exist! (failed loading: " + soundName + ")"));
				path = null;
				return false;
			}
			if (!File.Exists(path))
			{
				((ManualLogSource)SoundPlugin.logger).LogError((object)(path + " is a valid folder but the sound contained doesn't exist!"));
				path = null;
				return false;
			}
			return true;
		}
	}
	[BepInPlugin("me.loaforc.soundapi", "loaforcsSoundAPI", "1.0.12")]
	public class SoundPlugin : BaseUnityPlugin
	{
		internal static List<SoundPack> SoundPacks = new List<SoundPack>();

		internal JoinableThreadPool nonstartupThreadPool;

		public static SoundPlugin Instance { get; private set; }

		internal static LoafLogger logger { get; private set; }

		private void Awake()
		{
			logger = new LoafLogger("me.loaforc.soundapi");
			Logger.Sources.Add((ILogSource)(object)logger);
			Instance = this;
			((ManualLogSource)logger).LogInfo((object)"Patching...");
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "me.loaforc.soundapi");
			((ManualLogSource)logger).LogInfo((object)"Setting up config...");
			new SoundPluginConfig(((BaseUnityPlugin)this).Config);
			((ManualLogSource)logger).LogInfo((object)("Logging Level at: " + SoundPluginConfig.LOGGING_LEVEL.Value));
			((ManualLogSource)logger).LogInfo((object)"Searching for soundpacks...");
			string[] directories = Directory.GetDirectories(Paths.PluginPath);
			((ManualLogSource)logger).LogInfo((object)"Beginning Bindings");
			((ManualLogSource)logger).LogInfo((object)"Bindings => General => Audio Formats");
			SoundAPI.RegisterAudioFormatProvider(".mp3", new Mp3AudioFormat());
			SoundAPI.RegisterAudioFormatProvider(".ogg", new OggAudioFormat());
			SoundAPI.RegisterAudioFormatProvider(".wav", new WavAudioFormat());
			((ManualLogSource)logger).LogInfo((object)"Bindings => General => Conditions");
			SoundAPI.RegisterConditionProvider("config", new ConfigCondition());
			SoundAPI.RegisterConditionProvider("mod_installed", new ModInstalledConditionProvider());
			SoundAPI.RegisterConditionProvider("and", new AndCondition());
			SoundAPI.RegisterConditionProvider("not", new NotCondition());
			SoundAPI.RegisterConditionProvider("or", new OrCondition());
			LethalCompanyBindings.Bind();
			string[] array = directories;
			foreach (string text in array)
			{
				string[] directories2 = Directory.GetDirectories(text);
				foreach (string text2 in directories2)
				{
					string path = Path.Combine(text2, "sound_pack.json");
					((BaseUnityPlugin)this).Logger.LogDebug((object)text2);
					if (File.Exists(path))
					{
						SoundPacks.Add(new SoundPack(text2));
						break;
					}
				}
				string path2 = Path.Combine(text, "sound_pack.json");
				if (File.Exists(path2))
				{
					SoundPacks.Add(new SoundPack(text));
				}
			}
			((ManualLogSource)logger).LogInfo((object)"Starting up JoinableThreadPool.");
			if (SoundPluginConfig.ENABLE_MULTITHREADING.Value)
			{
				nonstartupThreadPool = new JoinableThreadPool(SoundPluginConfig.THREADPOOL_MAX_THREADS.Value);
			}
			else
			{
				nonstartupThreadPool = null;
			}
			foreach (SoundPack soundPack in SoundPacks)
			{
				soundPack.QueueLoad(nonstartupThreadPool);
			}
			nonstartupThreadPool?.Start();
			((ManualLogSource)logger).LogInfo((object)"Registering onSceneLoaded");
			SceneManager.sceneLoaded += delegate(Scene scene, LoadSceneMode __)
			{
				//IL_0018: 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)
				AudioSource[] array2 = Object.FindObjectsOfType<AudioSource>(true);
				foreach (AudioSource val in array2)
				{
					if (!(((Component)val).gameObject.scene != scene))
					{
						if (val.playOnAwake)
						{
							logger.LogLosingIt($"a: {(Object)(object)((Component)val).gameObject == (Object)null}, b: {(Object)(object)val == (Object)null}");
							logger.LogLosingIt($"c: {(Object)(object)val.clip == (Object)null}");
							logger.LogLosingIt(((Object)((Component)val).gameObject).name + ":" + (((Object)(object)val.clip == (Object)null) ? "null" : ((Object)val.clip).name) + " calling Stop() because its play on awake.");
							val.Stop();
						}
						AudioSourceReplaceHelper audioSourceReplaceHelper = ((Component)val).gameObject.AddComponent<AudioSourceReplaceHelper>();
						audioSourceReplaceHelper.source = val;
					}
				}
			};
			((ManualLogSource)logger).LogInfo((object)"me.loaforc.soundapi:1.0.12 has loaded!");
		}

		private void OnDisable()
		{
			nonstartupThreadPool?.Join();
		}
	}
	internal class SoundPluginConfig
	{
		internal enum LoggingLevel
		{
			NORMAL,
			EXTENDED,
			IM_GOING_TO_LOSE_IT
		}

		internal static ConfigEntry<bool> ENABLE_MULTITHREADING;

		internal static ConfigEntry<int> THREADPOOL_MAX_THREADS;

		internal static ConfigEntry<LoggingLevel> LOGGING_LEVEL;

		private static ConfigEntry<int> CONFIG_VERSION;

		internal SoundPluginConfig(ConfigFile config)
		{
			ENABLE_MULTITHREADING = config.Bind<bool>("SoundLoading", "Multithreading", true, "Whether or not to use multithreading when loading a sound pack. If you haven't been told that you should disable multithreading, you probably don't need to!\nThis setting may not be needed with the new 1.0.0 rewrite of multithreading.");
			THREADPOOL_MAX_THREADS = config.Bind<int>("SoundLoading", "MaxThreadsInThreadPool", 4, "Max amount of threads the loading thread pool can create at once.\nIncreasing this number will decrease loading of non-startup packs but may be unsupported by your CPU.");
			LOGGING_LEVEL = config.Bind<LoggingLevel>("Logging", "LoggingLevel", LoggingLevel.NORMAL, "What level should sound api log at?");
			CONFIG_VERSION = config.Bind<int>("INTERNAL_DO_NOT_TOUCH", "CONFIG_VERSION_DO_NOT_TOUCH", 1, "Don't touch this. This is for internal use only.");
			if (CONFIG_VERSION.Value == 1)
			{
				CONFIG_VERSION.Value = 2;
				if (THREADPOOL_MAX_THREADS.Value == 32)
				{
					THREADPOOL_MAX_THREADS.Value = 4;
					((ManualLogSource)SoundPlugin.logger).LogInfo((object)"Migrated config info.");
				}
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "me.loaforc.soundapi";

		public const string PLUGIN_NAME = "loaforcsSoundAPI";

		public const string PLUGIN_VERSION = "1.0.12";
	}
}
namespace loaforcsSoundAPI.Utils
{
	public static class ExtensionMethods
	{
		public static T GetValueOrDefault<T>(this JObject jsonObject, string key, T defaultValue = default(T))
		{
			JToken val = ((jsonObject != null) ? jsonObject.GetValue(key, StringComparison.OrdinalIgnoreCase) : null);
			if (val == null)
			{
				return defaultValue;
			}
			return val.ToObject<T>();
		}

		public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue)
		{
			if (!dictionary.TryGetValue(key, out var value))
			{
				return defaultValue;
			}
			return value;
		}

		public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, Func<TValue> defaultValueProvider)
		{
			if (!dictionary.TryGetValue(key, out var value))
			{
				return defaultValueProvider();
			}
			return value;
		}

		public static bool IsNumber(this object @object)
		{
			if (!(@object is int) && !(@object is double))
			{
				return @object is float;
			}
			return true;
		}
	}
	internal class JoinableThreadPool
	{
		private readonly ConcurrentQueue<Action> ActionQueue = new ConcurrentQueue<Action>();

		private const int DEFAULT_MAX = 4;

		private int max;

		private Stopwatch timer;

		private object locker = new object();

		private int _activeThreads;

		public void Queue(Action action)
		{
			ActionQueue.Enqueue(action);
		}

		public void Start()
		{
			lock (locker)
			{
				timer = Stopwatch.StartNew();
			}
			for (int i = 0; i < Mathf.Min(max, ActionQueue.Count); i++)
			{
				Interlocked.Increment(ref _activeThreads);
				new Thread(RunThroughQueue).Start();
				Thread.Sleep(100);
				((ManualLogSource)SoundPlugin.logger).LogDebug((object)("[Multithreading] Started thread " + i + "/" + max));
			}
		}

		public void Join()
		{
			((ManualLogSource)SoundPlugin.logger).LogDebug((object)"[Multithreading] Joined JoinableThreadPool.");
			RunThroughQueue();
		}

		private void RunThroughQueue()
		{
			Action result;
			while (ActionQueue.TryDequeue(out result))
			{
				try
				{
					result();
				}
				catch (Exception ex)
				{
					((ManualLogSource)SoundPlugin.logger).LogError((object)ex);
				}
				Thread.Yield();
				((ManualLogSource)SoundPlugin.logger).LogDebug((object)"[Multithreading] Finished processing an action.");
			}
			Interlocked.Decrement(ref _activeThreads);
			lock (locker)
			{
				if (timer.IsRunning && _activeThreads == 0)
				{
					timer.Stop();
					((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"[Multithreading] Finished all actions in {timer.ElapsedMilliseconds}ms.");
				}
			}
		}

		public JoinableThreadPool(int max = 4)
		{
			this.max = max;
		}
	}
	internal class LoafLogger : ManualLogSource
	{
		public LoafLogger(string sourceName)
			: base(sourceName)
		{
		}

		internal void LogExtended(object message)
		{
			if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.EXTENDED || SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT)
			{
				((ManualLogSource)this).LogDebug(message);
			}
		}

		internal void LogLosingIt(object message)
		{
			if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT)
			{
				((ManualLogSource)this).LogDebug(message);
			}
		}
	}
}
namespace loaforcsSoundAPI.Providers.Formats
{
	internal class Mp3AudioFormat : AudioFormatProvider
	{
		public override AudioClip LoadAudioClip(string path)
		{
			return LoadFromUWR(path, (AudioType)24);
		}
	}
	internal class OggAudioFormat : AudioFormatProvider
	{
		public override AudioClip LoadAudioClip(string path)
		{
			return LoadFromUWR(path, (AudioType)14);
		}
	}
	internal class WavAudioFormat : AudioFormatProvider
	{
		public override AudioClip LoadAudioClip(string path)
		{
			return LoadFromUWR(path, (AudioType)20);
		}
	}
}
namespace loaforcsSoundAPI.Providers.Conditions
{
	internal class AndCondition : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			foreach (JObject item in (IEnumerable<JToken>)conditionDef["conditions"])
			{
				JObject val = item;
				if (!SoundAPI.ConditionProviders[(string)val["type"]].Evaluate(pack, val))
				{
					return false;
				}
			}
			return true;
		}
	}
	internal class ConfigCondition : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef)
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Invalid comparison between Unknown and I4
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Invalid comparison between Unknown and I4
			if (!conditionDef.ContainsKey("value"))
			{
				return group.pack.GetConfigOption<bool>((string)conditionDef["config"]);
			}
			if ((int)conditionDef["value"].Type == 9)
			{
				return group.pack.GetConfigOption<bool>((string)conditionDef["config"]) == (bool)conditionDef["value"];
			}
			object rawConfigOption = group.pack.GetRawConfigOption((string)conditionDef["config"]);
			if ((int)conditionDef["value"].Type == 8)
			{
				if (rawConfigOption is ConfigEntry<float>)
				{
					return EvaluateRangeOperator((rawConfigOption as ConfigEntry<float>).Value, (string)conditionDef["value"]);
				}
				return (string)rawConfigOption == (string)conditionDef["value"];
			}
			return false;
		}
	}
	internal class ModInstalledConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef)
		{
			return Chainloader.PluginInfos.ContainsKey((string)conditionDef["value"]);
		}
	}
	internal class NotCondition : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef)
		{
			ConditionProvider conditionProvider = SoundAPI.ConditionProviders[(string)conditionDef["condition"][(object)"type"]];
			JToken obj = conditionDef["condition"];
			return !conditionProvider.Evaluate(pack, (JObject)(object)((obj is JObject) ? obj : null));
		}
	}
	internal class OrCondition : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			foreach (JObject item in (IEnumerable<JToken>)conditionDef["conditions"])
			{
				JObject val = item;
				if (SoundAPI.ConditionProviders[(string)val["type"]].Evaluate(pack, val))
				{
					return true;
				}
			}
			return false;
		}
	}
}
namespace loaforcsSoundAPI.Patches
{
	[HarmonyPatch(typeof(AudioSource))]
	internal static class AudioSourcePatch
	{
		[HarmonyPrefix]
		[HarmonyPatch("Play", new Type[] { })]
		[HarmonyPatch("Play", new Type[] { typeof(ulong) })]
		private static bool Play(AudioSource __instance)
		{
			if (TryReplaceAudio(__instance, __instance.clip, out var replacement))
			{
				if ((Object)(object)replacement == (Object)null)
				{
					return false;
				}
				__instance.clip = replacement;
			}
			return true;
		}

		[HarmonyPrefix]
		[HarmonyPatch("PlayOneShot", new Type[]
		{
			typeof(AudioClip),
			typeof(float)
		})]
		private static bool PlayOneShot(AudioSource __instance, ref AudioClip clip)
		{
			if (TryReplaceAudio(__instance, clip, out var replacement))
			{
				if ((Object)(object)replacement == (Object)null)
				{
					return false;
				}
				clip = replacement;
			}
			return true;
		}

		internal static bool TryReplaceAudio(AudioSource __instance, AudioClip clip, out AudioClip replacement)
		{
			replacement = null;
			if ((Object)(object)((Component)__instance).gameObject == (Object)null)
			{
				((ManualLogSource)SoundPlugin.logger).LogWarning((object)"AudioSource has no GameObject!!");
				return false;
			}
			if (AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value) && value.DisableReplacing)
			{
				return false;
			}
			if (!TryGetReplacementClip(ProcessName(__instance, clip), out var collection, out var clip2))
			{
				return false;
			}
			if ((Object)(object)value == (Object)null)
			{
				if (__instance.playOnAwake)
				{
					__instance.Stop();
				}
				value = ((Component)__instance).gameObject.AddComponent<AudioSourceReplaceHelper>();
				value.source = __instance;
			}
			((Object)clip2).name = ((Object)clip).name;
			replacement = clip2;
			value.replacedWith = collection;
			return true;
		}

		private static string TrimGameObjectName(GameObject gameObject)
		{
			string text = ((Object)gameObject).name.Replace("(Clone)", "");
			for (int i = 0; i < 10; i++)
			{
				text = text.Replace("(" + i + ")", "");
			}
			return text.Trim();
		}

		private static string ProcessName(AudioSource source, AudioClip clip)
		{
			if ((Object)(object)clip == (Object)null)
			{
				return null;
			}
			string text = ":" + TrimGameObjectName(((Component)source).gameObject);
			if ((Object)(object)((Component)source).transform.parent != (Object)null)
			{
				text = TrimGameObjectName(((Component)((Component)source).transform.parent).gameObject) + text;
			}
			return text + ":" + ((Object)clip).name;
		}

		private static bool TryGetReplacementClip(string name, out SoundReplacementCollection collection, out AudioClip clip)
		{
			collection = null;
			clip = null;
			if (name == null)
			{
				return false;
			}
			SoundPlugin.logger.LogExtended("Getting replacement for: " + name);
			if (!SoundAPI.SoundReplacements.ContainsKey(name.Split(":")[2]))
			{
				return false;
			}
			List<SoundReplacementCollection> list = (from x in SoundAPI.SoundReplacements[name.Split(":")[2]]
				where x.MatchesWith(name)
				where x.TestCondition()
				select x).ToList();
			if (list.Count == 0)
			{
				return false;
			}
			collection = list[Random.Range(0, list.Count)];
			List<SoundReplacement> list2 = collection.replacements.Where((SoundReplacement x) => x.TestCondition()).ToList();
			if (list2.Count == 0)
			{
				return false;
			}
			int totalWeight = 0;
			list2.ForEach(delegate(SoundReplacement replacement)
			{
				totalWeight += replacement.Weight;
			});
			int num = Random.Range(0, totalWeight);
			int index = 0;
			while (num > 0)
			{
				index = Random.Range(0, list2.Count);
				num -= Random.Range(1, list2[index].Weight);
			}
			clip = list2[index].Clip;
			return true;
		}
	}
	[HarmonyPatch(typeof(GameObject))]
	internal class GameObjectPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("AddComponent", new Type[] { typeof(Type) })]
		internal static void NewAudioSource(GameObject __instance, ref Component __result)
		{
			if (__result is AudioSource)
			{
				Component obj = __result;
				AudioSource val = (AudioSource)(object)((obj is AudioSource) ? obj : null);
				if (val.playOnAwake)
				{
					val.Stop();
				}
				AudioSourceReplaceHelper audioSourceReplaceHelper = __instance.AddComponent<AudioSourceReplaceHelper>();
				audioSourceReplaceHelper.source = val;
			}
		}
	}
	[HarmonyPatch(typeof(Object))]
	internal static class UnityObjectPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Instantiate", new Type[] { typeof(Object) })]
		[HarmonyPatch("Instantiate", new Type[]
		{
			typeof(Object),
			typeof(Transform),
			typeof(bool)
		})]
		[HarmonyPatch("Instantiate", new Type[]
		{
			typeof(Object),
			typeof(Vector3),
			typeof(Quaternion)
		})]
		[HarmonyPatch("Instantiate", new Type[]
		{
			typeof(Object),
			typeof(Vector3),
			typeof(Quaternion),
			typeof(Transform)
		})]
		internal static void FixPlayOnAwake(ref Object __result)
		{
			if (__result is GameObject)
			{
				Object obj = __result;
				CheckGameObject((GameObject)(object)((obj is GameObject) ? obj : null));
			}
		}

		private static void CheckGameObject(GameObject @object)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Expected O, but got Unknown
			AudioSourceReplaceHelper audioSourceReplaceHelper = default(AudioSourceReplaceHelper);
			if (@object.TryGetComponent<AudioSourceReplaceHelper>(ref audioSourceReplaceHelper))
			{
				return;
			}
			AudioSource[] components = @object.GetComponents<AudioSource>();
			AudioSource[] array = components;
			foreach (AudioSource val in array)
			{
				if (val.playOnAwake)
				{
					val.Stop();
				}
				AudioSourceReplaceHelper audioSourceReplaceHelper2 = @object.AddComponent<AudioSourceReplaceHelper>();
				audioSourceReplaceHelper2.source = val;
			}
			foreach (Transform item in @object.transform)
			{
				Transform val2 = item;
				CheckGameObject(((Component)val2).gameObject);
			}
		}
	}
}
namespace loaforcsSoundAPI.LethalCompany
{
	internal static class LethalCompanyBindings
	{
		internal static void Bind()
		{
			SoundAPI.RegisterConditionProvider("LethalCompany:dungeon_name", new DungeonConditionProvider());
			SoundAPI.RegisterConditionProvider("LethalCompany:moon_name", new MoonConditionProvider());
			SoundAPI.RegisterConditionProvider("LethalCompany:player_health", new PlayerHealthConditionProvider());
			SoundAPI.RegisterConditionProvider("LethalCompany:time_of_day", new TimeOfDayConditionProvider());
			SoundAPI.RegisterConditionProvider("LethalCompany:player_location", new PlayerLocationTypeConditionProvider());
		}
	}
}
namespace loaforcsSoundAPI.LethalCompany.Conditions
{
	internal class DungeonConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef)
		{
			SoundPlugin.logger.LogExtended("LethalCompany:dungeon_name value: " + ((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name);
			return Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"]) == ((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name;
		}
	}
	internal class MoonConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef)
		{
			SoundPlugin.logger.LogExtended("LethalCompany:moon_name value: " + ((Object)StartOfRound.Instance.currentLevel).name);
			return Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"]) == ((Object)StartOfRound.Instance.currentLevel).name;
		}
	}
	internal class PlayerHealthConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef)
		{
			return EvaluateRangeOperator(GameNetworkManager.Instance.localPlayerController.health, Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"]));
		}
	}
	internal class PlayerLocationTypeConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject varDef)
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			if (GameNetworkManager.Instance.localPlayerController.isPlayerDead)
			{
				return false;
			}
			if (GameNetworkManager.Instance.localPlayerController.isInsideFactory)
			{
				return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "inside";
			}
			Bounds bounds = StartOfRound.Instance.shipBounds.bounds;
			if (((Bounds)(ref bounds)).Contains(((Component)GameNetworkManager.Instance.localPlayerController).transform.position))
			{
				return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "on_ship";
			}
			return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "outside";
		}
	}
	internal class TimeOfDayConditionProvider : ConditionProvider
	{
		public override bool Evaluate(SoundReplaceGroup group, JObject varDef)
		{
			return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == ((object)(DayMode)(ref TimeOfDay.Instance.dayMode)).ToString().ToLower();
		}
	}
}
namespace loaforcsSoundAPI.Data
{
	public class SoundPack
	{
		private static List<SoundPack> LoadedSoundPacks = new List<SoundPack>();

		private List<SoundReplaceGroup> replaceGroups = new List<SoundReplaceGroup>();

		private Dictionary<string, object> Config = new Dictionary<string, object>();

		public string Name { get; private set; }

		public string PackPath { get; private set; }

		public IReadOnlyCollection<SoundReplaceGroup> ReplaceGroups => replaceGroups.AsReadOnly();

		public T GetConfigOption<T>(string configID)
		{
			return ((ConfigEntry<T>)Config[configID]).Value;
		}

		internal object GetRawConfigOption(string configID)
		{
			return Config[configID];
		}

		public SoundPack(string folder)
		{
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Expected O, but got Unknown
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Expected O, but got Unknown
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Expected I4, but got Unknown
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			((ManualLogSource)SoundPlugin.logger).LogDebug((object)("Soundpack `" + folder + "` is being loaded."));
			Stopwatch stopwatch = Stopwatch.StartNew();
			PackPath = Path.Combine(Paths.PluginPath, folder);
			string text = File.ReadAllText(Path.Combine(PackPath, "sound_pack.json"));
			object obj = JsonConvert.DeserializeObject(text);
			JObject val = (JObject)((obj is JObject) ? obj : null);
			Name = (string)val["name"];
			if (string.IsNullOrEmpty(Name))
			{
				((ManualLogSource)SoundPlugin.logger).LogError((object)("`name` is missing or empty in `" + folder + "/sound_pack.json`"));
				return;
			}
			if (!Directory.Exists(Path.Combine(PackPath, "replacers")))
			{
				((ManualLogSource)SoundPlugin.logger).LogInfo((object)"You've succesfully made a Sound-Pack! Continue with the tutorial to learn how to begin replacing sounds.");
			}
			else if (val.ContainsKey("load_on_startup"))
			{
				((ManualLogSource)SoundPlugin.logger).LogWarning((object)("Soundpack '" + Name + "' is using 'load_on_startup' which is deprecated and doesn't do anything! (If you're the creator, you can safely delete that from your sound_pack.json)"));
			}
			if (val.ContainsKey("config"))
			{
				Stopwatch stopwatch2 = Stopwatch.StartNew();
				ConfigFile val2 = new ConfigFile(Utility.CombinePaths(new string[2]
				{
					Paths.ConfigPath,
					"soundpack." + Name + ".cfg"
				}), false, MetadataHelper.GetMetadata((object)SoundPlugin.Instance));
				foreach (JProperty item in (IEnumerable<JToken>)val["config"])
				{
					JProperty val3 = item;
					JToken value = val3.Value;
					JObject val4 = (JObject)(object)((value is JObject) ? value : null);
					if (!val4.ContainsKey("default"))
					{
						((ManualLogSource)SoundPlugin.logger).LogError((object)("`" + val3.Name + " doesn't have a default value!"));
						continue;
					}
					if (!val4.ContainsKey("description"))
					{
						((ManualLogSource)SoundPlugin.logger).LogWarning((object)("`" + val3.Name + " doesn't have a description, consider adding one!"));
					}
					JTokenType type = val4["default"].Type;
					switch (type - 6)
					{
					case 3:
						Config.Add(val3.Name, val2.Bind<bool>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (bool)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]")));
						break;
					case 2:
						Config.Add(val3.Name, val2.Bind<string>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (string)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]")));
						break;
					case 0:
					case 1:
						Config.Add(val3.Name, val2.Bind<float>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (float)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]")));
						break;
					default:
						((ManualLogSource)SoundPlugin.logger).LogError((object)string.Format("`{0} configtype is currently unsupported! Supported values: bool, float, int, string", val4["default"].Type));
						break;
					}
				}
				stopwatch2.Stop();
				((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {Name}(config) in {stopwatch2.ElapsedMilliseconds}ms.");
			}
			LoadedSoundPacks.Add(this);
			stopwatch.Stop();
			((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {Name}(start-up) in {stopwatch.ElapsedMilliseconds}ms.");
		}

		internal void QueueLoad(JoinableThreadPool threadPool = null)
		{
			if (!Directory.Exists(Path.Combine(PackPath, "replacers")))
			{
				return;
			}
			string[] array = Directory.GetFiles(Path.Combine(PackPath, "replacers")).Select(Path.GetFileName).ToArray();
			string[] array2 = array;
			foreach (string replacer in array2)
			{
				if (threadPool == null)
				{
					ParseReplacer(replacer);
					continue;
				}
				threadPool.Queue(delegate
				{
					ParseReplacer(replacer);
				});
			}
		}

		private void ParseReplacer(string replacer)
		{
			string path = Path.Combine(PackPath, "replacers", replacer);
			((ManualLogSource)SoundPlugin.logger).LogDebug((object)("Parsing `" + Path.GetFileName(path) + "` as a sound replacer"));
			object obj = JsonConvert.DeserializeObject(File.ReadAllText(path));
			JObject data = (JObject)((obj is JObject) ? obj : null);
			new SoundReplaceGroup(this, data);
		}
	}
	public class SoundReplaceGroup : Conditonal
	{
		public SoundPack pack { get; private set; }

		internal JObject RandomSettings { get; private set; }

		internal bool UpdateEveryFrame { get; private set; }

		public SoundReplaceGroup(SoundPack pack, JObject data)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			this.pack = pack;
			foreach (JObject item in (IEnumerable<JToken>)data["replacements"])
			{
				JObject data2 = item;
				new SoundReplacementCollection(this, data2);
			}
			if (data.ContainsKey("condition"))
			{
				JToken obj = data["condition"];
				Setup(this, (JObject)(object)((obj is JObject) ? obj : null));
			}
			if (data.ContainsKey("update_every_frame"))
			{
				UpdateEveryFrame = (bool)data["update_every_frame"];
			}
		}
	}
	internal class SoundReplacementCollection : Conditonal
	{
		internal readonly List<SoundReplacement> replacements = new List<SoundReplacement>();

		private readonly List<string> matchers = new List<string>();

		internal readonly SoundReplaceGroup group;

		internal SoundReplacementCollection(SoundReplaceGroup group, JObject data)
		{
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Expected O, but got Unknown
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Invalid comparison between Unknown and I4
			this.group = group;
			JToken val = default(JToken);
			if (data.TryGetValue("condition", ref val))
			{
				Setup(group, (JObject)(object)((val is JObject) ? val : null));
			}
			if (((object)data["matches"]).GetType() == typeof(JValue))
			{
				RegisterWithMatch((string)data["matches"]);
			}
			else
			{
				foreach (JToken item in (IEnumerable<JToken>)data["matches"])
				{
					string matchString = (string)item;
					RegisterWithMatch(matchString);
				}
			}
			foreach (JObject item2 in (IEnumerable<JToken>)data["sounds"])
			{
				JObject val2 = item2;
				if ((int)val2["sound"].Type == 10)
				{
					SoundPlugin.logger.LogExtended("Adding null sound, will remove the sound when chosen");
					replacements.Add(new SoundReplacement(group, val2)
					{
						Weight = val2.GetValueOrDefault("weight", 1)
					});
					continue;
				}
				SoundReplacement soundReplacement = new SoundReplacement(group, val2)
				{
					Weight = val2.GetValueOrDefault("weight", 1)
				};
				SoundLoader.GetAudioClip(group.pack.PackPath, Path.GetDirectoryName((string)val2["sound"]), Path.GetFileName((string)val2["sound"]), out var clip);
				if ((Object)(object)clip == (Object)null)
				{
					((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed to get audio clip, check above more detailed error");
					continue;
				}
				soundReplacement.Clip = clip;
				replacements.Add(soundReplacement);
			}
		}

		internal bool MatchesWith(string a)
		{
			foreach (string matcher in matchers)
			{
				if (SoundAPI.MatchStrings(a, matcher))
				{
					return true;
				}
			}
			return false;
		}

		private void RegisterWithMatch(string matchString)
		{
			string key = SoundAPI.FormatMatchString(matchString).Split(":")[2];
			List<SoundReplacementCollection> valueOrDefault = SoundAPI.SoundReplacements.GetValueOrDefault(key, new List<SoundReplacementCollection>());
			valueOrDefault.Add(this);
			matchers.Add(SoundAPI.FormatMatchString(matchString));
			SoundAPI.SoundReplacements[key] = valueOrDefault;
		}

		public override bool TestCondition()
		{
			if (base.TestCondition())
			{
				return group.TestCondition();
			}
			return false;
		}
	}
	internal class SoundReplacement : Conditonal
	{
		public int Weight = 1;

		public AudioClip Clip { get; set; }

		public SoundReplacement(SoundReplaceGroup group, JObject data)
		{
			if (data.ContainsKey("condition"))
			{
				JToken obj = data["condition"];
				Setup(group, (JObject)(object)((obj is JObject) ? obj : null));
			}
		}
	}
}
namespace loaforcsSoundAPI.Behaviours
{
	public class AudioSourceReplaceHelper : MonoBehaviour
	{
		internal AudioSource source;

		internal SoundReplacementCollection replacedWith;

		internal static Dictionary<AudioSource, AudioSourceReplaceHelper> helpers = new Dictionary<AudioSource, AudioSourceReplaceHelper>();

		public bool DisableReplacing { get; private set; }

		private void Start()
		{
			if ((Object)(object)source == (Object)null)
			{
				((ManualLogSource)SoundPlugin.logger).LogWarning((object)("AudioSource (on gameobject: " + ((Object)((Component)this).gameObject).name + ") became null between the OnSceneLoaded callback and Start."));
				return;
			}
			string text = (((Object)(object)source.clip == (Object)null) ? "null" : ((Object)source.clip).name);
			SoundPlugin.logger.LogLosingIt("AudioSourceReplaceHelper.Start(), gameObject: " + ((Object)((Component)this).gameObject).name + ", audioClip.name: " + text);
			if (source.playOnAwake)
			{
				if (((Behaviour)source).enabled)
				{
					source.Play();
					SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + text + " calling source.Play() because its playOnAwake and enabled.");
				}
				else
				{
					SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + text + " not calling Play() because its playOnAwake but not enabled.");
				}
			}
			helpers[source] = this;
		}

		private void OnEnable()
		{
			if (!((Object)(object)source == (Object)null))
			{
				helpers[source] = this;
			}
		}

		private void OnDestroy()
		{
			if (!((Object)(object)source == (Object)null) && helpers.ContainsKey(source))
			{
				helpers.Remove(source);
			}
		}

		private void LateUpdate()
		{
			if (replacedWith != null && replacedWith.group.UpdateEveryFrame)
			{
				DisableReplacing = true;
				float time = source.time;
				SoundReplacement soundReplacement = replacedWith.replacements.Where((SoundReplacement x) => x.TestCondition()).ToList()[0];
				if (!((Object)(object)soundReplacement.Clip == (Object)(object)source.clip))
				{
					source.clip = soundReplacement.Clip;
					source.Play();
					source.time = time;
				}
			}
		}
	}
}
namespace loaforcsSoundAPI.API
{
	public abstract class AudioFormatProvider
	{
		public abstract AudioClip LoadAudioClip(string path);

		protected AudioClip LoadFromUWR(string path, AudioType type)
		{
			//IL_0003: 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_0020: Invalid comparison between Unknown and I4
			AudioClip result = null;
			UnityWebRequest audioClip = UnityWebRequestMultimedia.GetAudioClip(path, type);
			try
			{
				audioClip.SendWebRequest();
				try
				{
					while (!audioClip.isDone)
					{
					}
					if ((int)audioClip.result != 1)
					{
						((ManualLogSource)SoundPlugin.logger).LogError((object)"============");
						((ManualLogSource)SoundPlugin.logger).LogError((object)("UnityWebRequest failed while trying to get " + path + ". Full error below"));
						((ManualLogSource)SoundPlugin.logger).LogError((object)audioClip.error);
						((ManualLogSource)SoundPlugin.logger).LogError((object)"============");
					}
					else
					{
						result = DownloadHandlerAudioClip.GetContent(audioClip);
					}
				}
				catch (Exception ex)
				{
					((ManualLogSource)SoundPlugin.logger).LogError((object)(ex.Message + ", " + ex.StackTrace));
				}
			}
			finally
			{
				((IDisposable)audioClip)?.Dispose();
			}
			return result;
		}
	}
	public abstract class ConditionProvider
	{
		public abstract bool Evaluate(SoundReplaceGroup group, JObject conditionDef);

		public bool EvaluateRangeOperator(JToken number, string condition)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)number.Type == 7)
			{
				return EvaluateRangeOperator(Extensions.Value<float>((IEnumerable<JToken>)number), condition);
			}
			return EvaluateRangeOperator(Extensions.Value<int>((IEnumerable<JToken>)number), condition);
		}

		public bool EvaluateRangeOperator(int number, string condition)
		{
			return EvaluateRangeOperator((double)number, condition);
		}

		public bool EvaluateRangeOperator(float number, string condition)
		{
			return EvaluateRangeOperator((double)number, condition);
		}

		public bool EvaluateRangeOperator(double number, string condition)
		{
			string[] array = condition.Split("..");
			if (array.Length == 1)
			{
				if (double.TryParse(array[0], out var result))
				{
					return number == result;
				}
				return false;
			}
			if (array.Length == 2)
			{
				double result2;
				if (array[0] == "")
				{
					result2 = double.MinValue;
				}
				else if (!double.TryParse(array[0], out result2))
				{
					return false;
				}
				double result3;
				if (array[1] == "")
				{
					result3 = double.MaxValue;
				}
				else if (!double.TryParse(array[1], out result3))
				{
					return false;
				}
				if (number >= result2)
				{
					return number <= result3;
				}
				return false;
			}
			return false;
		}
	}
	public abstract class Conditonal
	{
		private ConditionProvider GroupCondition;

		private SoundReplaceGroup group;

		internal JObject ConditionSettings { get; private set; }

		protected void Setup(SoundReplaceGroup group, JObject settings)
		{
			this.group = group;
			if (settings != null)
			{
				ConditionSettings = settings;
				GroupCondition = SoundAPI.ConditionProviders[(string)ConditionSettings["type"]];
			}
		}

		public virtual bool TestCondition()
		{
			if (GroupCondition == null)
			{
				return true;
			}
			return GroupCondition.Evaluate(group, ConditionSettings);
		}
	}
	public static class SoundAPI
	{
		internal static Dictionary<string, AudioFormatProvider> FileFormats = new Dictionary<string, AudioFormatProvider>();

		internal static Dictionary<string, ConditionProvider> ConditionProviders = new Dictionary<string, ConditionProvider>();

		internal static ConcurrentDictionary<string, List<SoundReplacementCollection>> SoundReplacements = new ConcurrentDictionary<string, List<SoundReplacementCollection>>();

		public static void RegisterAudioFormatProvider(string extension, AudioFormatProvider provider)
		{
			FileFormats.Add(extension, provider);
		}

		public static void RegisterConditionProvider(string extension, ConditionProvider provider)
		{
			ConditionProviders.Add(extension, provider);
		}

		public static string FormatMatchString(string input)
		{
			if (input.Split(":").Length == 2)
			{
				input = "*:" + input;
			}
			return input;
		}

		public static bool MatchStrings(string a, string b)
		{
			((ManualLogSource)SoundPlugin.logger).LogDebug((object)(a + " == " + b + "?"));
			string[] array = a.Split(":");
			string[] array2 = b.Split(":");
			if (array2[0] != "*" && array2[0] != array[0])
			{
				return false;
			}
			if (array2[1] != "*" && array2[1] != array[1])
			{
				return false;
			}
			return array[2] == array2[2];
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}