Decompiled source of ProHUD v0.1.4

ProHUD.dll

Decompiled 7 months ago
using System;
using System.Collections;
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.Text;
using System.Xml;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalConfig;
using LethalConfig.ConfigItems;
using LethalConfig.ConfigItems.Options;
using Microsoft.CodeAnalysis;
using ProHUD.Asset;
using ProHUD.Config;
using ProHUD.Patch;
using ProHUD.Util;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("ProHUD")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ProHUD")]
[assembly: AssemblyTitle("ProHUD")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 ProHUD
{
	public static class PluginInfo
	{
		public const string GUID = "hexkivo.ProHUD";

		public const string NAME = "ProHUD";

		public const string VERSION = "0.1.5";
	}
	[BepInPlugin("hexkivo.ProHUD", "ProHUD", "0.1.5")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		private readonly Harmony harmony = new Harmony("hexkivo.ProHUD");

		public bool isInputUtils = false;

		internal static ManualLogSource Log = Logger.CreateLogSource("hexkivo.ProHUD");

		public static bool isLethalConfig = false;

		public static Plugin? Instance { get; set; }

		private void Awake()
		{
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			if (Chainloader.PluginInfos.Values.Any((PluginInfo p) => p.Metadata.GUID == "ainavt.lc.lethalconfig"))
			{
				LogInfo("Lethalconfig Founded");
				isLethalConfig = true;
			}
			try
			{
				Loader.LoadAll();
				Setting.BindAll();
				((BaseUnityPlugin)this).Config.SettingChanged += delegate(object sender, SettingChangedEventArgs e)
				{
					LogInfo($"Config [{e.ChangedSetting.Definition.Key}] set to [{e.ChangedSetting.BoxedValue}]");
				};
				harmony.PatchAll();
				Log.LogInfo((object)"Plugin Load Complete");
			}
			catch (Exception ex)
			{
				LogError(ex.Message);
			}
		}

		internal static void LogInfo(object data)
		{
			Log.LogInfo(data);
		}

		internal static void LogError(object data)
		{
			Log.LogError(data);
		}

		internal static void LogWarning(object data)
		{
			Log.LogWarning(data);
		}

		internal static void LogFatal(object data)
		{
			Log.LogFatal(data);
		}

		internal static void LogDebug(object data)
		{
			Log.LogDebug(data);
		}
	}
}
namespace ProHUD.Util
{
	public static class Loader
	{
		public static void LoadAll()
		{
			Translation.Load();
			ProHUD.Asset.JetpackMeter.Load();
		}

		public static string GetAssemblyName()
		{
			string? fullName = Assembly.GetExecutingAssembly().FullName;
			return ((fullName != null) ? fullName.Split(',')[0] : null) ?? "";
		}

		public static AssetBundle LoadAssetBundle(string name)
		{
			string name2 = GetAssemblyName() + ".Asset." + name;
			using Stream stream = Assembly.GetExecutingAssembly()?.GetManifestResourceStream(name2);
			return AssetBundle.LoadFromStream(stream);
		}

		public static XmlDocument LoadXML(string name)
		{
			string name2 = GetAssemblyName() + ".Asset." + name + ".xml";
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name2);
			string xml = ((stream != null) ? (new StreamReader(stream).ReadToEnd() ?? string.Empty) : string.Empty);
			XmlDocument xmlDocument = new XmlDocument();
			xmlDocument.LoadXml(xml);
			return xmlDocument;
		}
	}
	public static class Game
	{
		public static bool isControlling(PlayerControllerB player)
		{
			if ((Object)(object)player == (Object)null)
			{
				return false;
			}
			return (((NetworkBehaviour)player).IsOwner && player.isPlayerControlled && (!((NetworkBehaviour)player).IsServer || player.isHostPlayerObject)) || player.isTestingPlayer;
		}

		public static bool isPlayer(PlayerControllerB player)
		{
			if ((Object)(object)player == (Object)null)
			{
				return false;
			}
			return (Object)(object)GameNetworkManager.Instance?.localPlayerController == (Object)(object)player;
		}
	}
	public static class Tool
	{
		public static object GetField<InstanceType>(InstanceType obj, string field)
		{
			return AccessTools.Field(typeof(InstanceType), field).GetValue(obj);
		}

		public static FieldType GetField<InstanceType, FieldType>(InstanceType obj, string field)
		{
			return (FieldType)AccessTools.Field(typeof(InstanceType), field).GetValue(obj);
		}

		public static void SetField<InstanceType, FieldType>(InstanceType obj, string field, FieldType temp)
		{
			AccessTools.Field(typeof(InstanceType), field).SetValue(obj, temp);
		}

		public static object InvokeMethod<InstanceType>(InstanceType obj, string method, object[]? parameter = null)
		{
			return AccessTools.Method(typeof(InstanceType), method, (Type[])null, (Type[])null).Invoke(obj, parameter);
		}

		public static GameObject AddHUD(string name, Transform? parent = null, bool WorldPositionStays = false)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			GameObject val = new GameObject(name);
			if ((Object)(object)parent == (Object)null)
			{
				parent = HUDManager.Instance.HUDContainer.transform;
			}
			val.transform.SetParent(parent, WorldPositionStays);
			return val;
		}

		public static GameObject AddHUD(string name, Sprite sprite, Transform? parent = null, bool WorldPositionStays = false)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			GameObject val = new GameObject(name);
			if ((Object)(object)parent == (Object)null)
			{
				HUDManager instance = HUDManager.Instance;
				object obj;
				if (instance == null)
				{
					obj = null;
				}
				else
				{
					GameObject hUDContainer = instance.HUDContainer;
					obj = ((hUDContainer != null) ? hUDContainer.transform : null);
				}
				parent = (Transform?)obj;
			}
			val.AddComponent<Image>().sprite = sprite;
			val.transform.SetParent(parent, WorldPositionStays);
			return val;
		}
	}
	public static class Translation
	{
		public static Dictionary<string, XmlDocument> LanguageData = new Dictionary<string, XmlDocument>();

		public static string CurrentLangage()
		{
			return Setting.Language?.Value.ToString() ?? string.Empty;
		}

		public static void Load()
		{
			try
			{
				string[] names = Enum.GetNames(typeof(Setting.LanguageOption));
				foreach (string text in names)
				{
					LanguageData.Add(text, Loader.LoadXML(text));
					Plugin.LogInfo("Language pack loaded: " + text + ".xml");
				}
				Plugin.LogInfo("Language data load complete");
			}
			catch
			{
				throw;
			}
		}

		public static string Translate(string name, bool isDesc = false)
		{
			string key = Setting.Language?.Value.ToString() ?? "Korean";
			if (isDesc)
			{
				name += "_DESC";
			}
			return LanguageData[key].GetElementById(name)?.InnerText ?? string.Empty;
		}
	}
}
namespace ProHUD.Asset
{
	internal static class JetpackMeter
	{
		public static AudioClip? JetpackCriticalBeep;

		public static Sprite? MeterSprite;

		public static Sprite? FrameSprite;

		public static Sprite? WarningSprite;

		public static void Load()
		{
			AssetBundle val = Loader.LoadAssetBundle("JetpackAssets");
			if (!((Object)(object)val == (Object)null))
			{
				MeterSprite = val.LoadAsset<Sprite>("jetpackMeter");
				FrameSprite = val.LoadAsset<Sprite>("jetpackMeterFrame");
				WarningSprite = val.LoadAsset<Sprite>("jetpackMeterWarning");
				JetpackCriticalBeep = val.LoadAsset<AudioClip>("jetpackCriticalBeep");
				Plugin.LogInfo("[Jetpack HUD] sprites and audio loaded");
			}
		}
	}
}
namespace ProHUD.Patch
{
	[HarmonyPatch]
	internal static class Clock
	{
		private static int ClockTime;

		private static Vector3 NumberPosition;

		private static Vector3 IconPosition;

		private static Vector2 ClockSize;

		private static Vector2 IconSize;

		private static Vector2 TextSize;

		private static RectTransform? ClockEdge;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		private static void Awake(ref HUDManager __instance)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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_0052: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			ClockEdge = ((Component)((TMP_Text)__instance.clockNumber).transform.parent).gameObject.GetComponent<RectTransform>();
			NumberPosition = ((TMP_Text)__instance.clockNumber).transform.localPosition;
			IconPosition = ((Component)__instance.clockIcon).transform.localPosition;
			ClockSize = ClockEdge.sizeDelta;
			IconSize = ((Component)__instance.clockIcon).GetComponent<RectTransform>().sizeDelta;
			TextSize = ((TMP_Text)__instance.clockNumber).rectTransform.sizeDelta;
			ResizeClock();
		}

		[HarmonyPatch(typeof(HUDManager), "SetClock")]
		[HarmonyPrefix]
		private static void SetClock(ref HUDManager __instance, float timeNormalized, float numberOfHours, ref bool __runOriginal)
		{
			__runOriginal = false;
			int num = (int)(timeNormalized * (60f * numberOfHours)) + 360;
			int num2 = num / 60 % 24;
			int num3 = num % 60;
			string text = ((ProHUD.Config.Clock.CLOCK_STD.Value || ProHUD.Config.Clock.CLOCK_COMPACT.Value) ? "" : "\n");
			string text2 = (ProHUD.Config.Clock.CLOCK_STD.Value ? "" : " AM");
			if (!ProHUD.Config.Clock.CLOCK_STD.Value)
			{
				if (num2 < 12)
				{
					text2 = " AM";
				}
				else
				{
					text2 = " PM";
					num2 %= 12;
					if (num2 == 0)
					{
						num2 = 12;
					}
				}
			}
			((TMP_Text)__instance.clockNumber).text = $"{num2:0}:{num3:00}";
			if (ProHUD.Config.Clock.CLOCK_FULL_DIGIT.Value && num2 < 10)
			{
				((TMP_Text)__instance.clockNumber).text = "<color=#633100>0</color>" + ((TMP_Text)__instance.clockNumber).text;
			}
			TextMeshProUGUI clockNumber = __instance.clockNumber;
			((TMP_Text)clockNumber).text = ((TMP_Text)clockNumber).text + text + text2;
		}

		[HarmonyPatch(typeof(TimeOfDay), "SetInsideLightingDimness")]
		[HarmonyPostfix]
		private static void SetInsideLightingDimness()
		{
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (localPlayerController.inTerminalMenu)
			{
				HUDManager.Instance.SetClockVisible(false);
			}
			else if ((ProHUD.Config.Clock.CLOCK_IN_SHIP.Value && localPlayerController.isInHangarShipRoom) || (ProHUD.Config.Clock.CLOCK_IN_FACTORY.Value && localPlayerController.isInsideFactory))
			{
				HUDManager.Instance.SetClockVisible(true);
			}
		}

		[HarmonyPatch(typeof(TimeOfDay), "MoveTimeOfDay")]
		[HarmonyPostfix]
		private static void MoveTimeOfDay(TimeOfDay __instance, ref float ___changeHUDTimeInterval)
		{
			if (ProHUD.Config.Clock.CLOCK_FAST_UPDATE.Value)
			{
				int num = (int)(__instance.normalizedTimeOfDay * (60f * (float)__instance.numberOfHours));
				if (num != ClockTime)
				{
					ClockTime = num;
					HUDManager.Instance.SetClock(__instance.normalizedTimeOfDay, (float)__instance.numberOfHours, true);
					___changeHUDTimeInterval = 0f;
				}
			}
		}

		public static void ResizeClock(object? sender = null, EventArgs? e = null)
		{
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: 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_009c: 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_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: 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_0117: 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)
			if ((Object)(object)ClockEdge == (Object)null)
			{
				return;
			}
			if (ProHUD.Config.Clock.CLOCK_COMPACT.Value)
			{
				ClockEdge.sizeDelta = new Vector2(ClockSize.x - 40f, 50f);
				((Component)HUDManager.Instance.clockIcon).GetComponent<RectTransform>().sizeDelta = IconSize / 2f;
				if (ProHUD.Config.Clock.CLOCK_STD.Value)
				{
					ClockEdge.sizeDelta = new Vector2(ClockSize.x - 40f, 50f);
					((TMP_Text)HUDManager.Instance.clockNumber).rectTransform.sizeDelta = TextSize;
					((TMP_Text)HUDManager.Instance.clockNumber).transform.localPosition = NumberPosition + new Vector3(-15f, -1f, 0f);
					((Component)HUDManager.Instance.clockIcon).transform.localPosition = IconPosition + new Vector3(-5f, -2f, 0f);
				}
				else
				{
					ClockEdge.sizeDelta = new Vector2(ClockSize.x + 10f, 50f);
					((TMP_Text)HUDManager.Instance.clockNumber).rectTransform.sizeDelta = new Vector2(TextSize.x + 50f, TextSize.y);
					((TMP_Text)HUDManager.Instance.clockNumber).transform.localPosition = NumberPosition + new Vector3(-20f, -1f, 0f);
					((Component)HUDManager.Instance.clockIcon).transform.localPosition = IconPosition + new Vector3(-30f, -2f, 0f);
				}
			}
			else
			{
				ClockEdge.sizeDelta = ClockSize;
				((TMP_Text)HUDManager.Instance.clockNumber).rectTransform.sizeDelta = TextSize;
				((Component)HUDManager.Instance.clockIcon).GetComponent<RectTransform>().sizeDelta = IconSize;
				((TMP_Text)HUDManager.Instance.clockNumber).transform.localPosition = NumberPosition;
				((Component)HUDManager.Instance.clockIcon).transform.localPosition = IconPosition;
			}
		}
	}
	[HarmonyPatch]
	internal static class Compass
	{
		private static GameObject? CompassUI;

		private static GameObject? CompassIndex;

		private static TextMeshProUGUI? CompassText;

		private static TextMeshProUGUI? CenterIndex;

		private static Gradient CompassGradient = new Gradient();

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		private static void Awake(HUDManager __instance)
		{
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			CompassUI = Tool.AddHUD("CompassUI", __instance.HUDContainer.transform);
			CenterIndex = CompassUI.AddComponent<TextMeshProUGUI>();
			((TMP_Text)CenterIndex).text = "▼";
			((TMP_Text)CenterIndex).alignment = (TextAlignmentOptions)514;
			((TMP_Text)CenterIndex).fontSize = 14f;
			((Graphic)CenterIndex).color = Color32.op_Implicit(new Color32(byte.MaxValue, (byte)80, (byte)0, byte.MaxValue));
			((Transform)((TMP_Text)CenterIndex).rectTransform).localPosition = new Vector3(0f, 250f, 0f);
			CompassIndex = Tool.AddHUD("Compass", CompassUI.transform);
			CompassText = CompassIndex.AddComponent<TextMeshProUGUI>();
			((TMP_Text)CompassText).text = "B N   015  030  045  060  075   E   105  120  135  150  165   S   195  210  225  240  255   W   285  300  315  330  345   N   015  030  045  060  075   E   105  120  135  150  165   S   195  210  225  240  255   W   285  300  315  330  345   N E";
			((TMP_Text)CompassText).font = ((TMP_Text)__instance.weightCounter).font;
			((TMP_Text)CompassText).enableWordWrapping = false;
			((TMP_Text)CompassText).fontSize = 14f;
			((TMP_Text)CompassText).fontStyle = (FontStyles)1;
			((TMP_Text)CompassText).alignment = (TextAlignmentOptions)514;
			((Transform)((TMP_Text)CompassText).rectTransform).localPosition = new Vector3(0f, 0f, 0f);
			((Behaviour)CompassText).enabled = true;
			((TMP_Text)CompassText).characterSpacing = -5f;
			CompassUI.SetActive(ProHUD.Config.Compass.COMPASS.Value);
			CompassGradient.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
			{
				new GradientColorKey(Color32.op_Implicit(new Color32(byte.MaxValue, (byte)80, (byte)0, byte.MaxValue)), 0f),
				new GradientColorKey(Color32.op_Implicit(new Color32(byte.MaxValue, (byte)80, (byte)0, byte.MaxValue)), 1f)
			}, (GradientAlphaKey[])(object)new GradientAlphaKey[4]
			{
				new GradientAlphaKey(0f, 0f),
				new GradientAlphaKey(1f, 0.3f),
				new GradientAlphaKey(1f, 0.7f),
				new GradientAlphaKey(0f, 1f)
			});
		}

		[HarmonyPatch(typeof(HUDManager), "Update")]
		[HarmonyPostfix]
		[HarmonyPriority(401)]
		private static void Update()
		{
			//IL_00ae: 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_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: 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_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: 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_01aa: Unknown result type (might be due to invalid IL or missing references)
			if (!ProHUD.Config.Compass.COMPASS.Value)
			{
				return;
			}
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			Quaternion val;
			float num;
			if (ProHUD.Config.Compass.COMPASS_NORTH_SHIP.Value && !localPlayerController.isInsideFactory)
			{
				val = ((Component)localPlayerController.gameplayCamera).transform.rotation;
				float y = ((Quaternion)(ref val)).eulerAngles.y;
				Vector3 val2 = StartOfRound.Instance.elevatorTransform.position - ((Component)localPlayerController).transform.position;
				val = Quaternion.LookRotation(((Vector3)(ref val2)).normalized);
				num = Calibrate(y, ((Quaternion)(ref val)).eulerAngles.y);
			}
			else
			{
				val = ((Component)localPlayerController.gameplayCamera).transform.rotation;
				num = Calibrate(((Quaternion)(ref val)).eulerAngles.y);
			}
			float num2 = (0f - num) / 15f * ((TMP_Text)CompassText).preferredWidth / (float)(((TMP_Text)CompassText).text.Length / 5);
			((Transform)((TMP_Text)CompassText).rectTransform).localPosition = new Vector3(num2, -12f, 0f);
			TMP_TextInfo textInfo = ((TMP_Text)CompassText).textInfo;
			for (int i = 0; i < textInfo.characterCount; i++)
			{
				TMP_CharacterInfo val3 = textInfo.characterInfo[i];
				int vertexIndex = val3.vertexIndex;
				int materialReferenceIndex = val3.materialReferenceIndex;
				Color32[] colors = textInfo.meshInfo[materialReferenceIndex].colors32;
				Vector3[] vertices = textInfo.meshInfo[materialReferenceIndex].vertices;
				for (int j = 0; j < 4; j++)
				{
					colors[vertexIndex + j] = Color32.op_Implicit(CompassGradient.Evaluate(Mathf.InverseLerp(-200f - num2, 200f - num2, vertices[vertexIndex + j].x)));
				}
			}
			((TMP_Text)CompassText).UpdateVertexData();
		}

		[HarmonyPatch(typeof(Terminal), "BeginUsingTerminal")]
		[HarmonyPrefix]
		private static void BeginUsingTerminal()
		{
			GameObject? compassUI = CompassUI;
			if (compassUI != null)
			{
				compassUI.SetActive(false);
			}
		}

		[HarmonyPatch(typeof(Terminal), "QuitTerminal")]
		[HarmonyPrefix]
		private static void QuitTerminal()
		{
			GameObject? compassUI = CompassUI;
			if (compassUI != null)
			{
				compassUI.SetActive(ProHUD.Config.Compass.COMPASS.Value);
			}
		}

		private static float Calibrate(float direction)
		{
			return (direction - (float)ProHUD.Config.Compass.COMPASS_NORTH.Value * 45f + 540f) % 360f - 180f;
		}

		private static float Calibrate(float direction, float correction)
		{
			return (direction - correction + 540f) % 360f - 180f;
		}

		public static void ConfigChanged(object? sender, EventArgs? e)
		{
			GameObject? compassUI = CompassUI;
			if (compassUI != null)
			{
				compassUI.SetActive(ProHUD.Config.Compass.COMPASS.Value);
			}
		}
	}
	[HarmonyPatch]
	internal static class Crosshair
	{
		private static GameObject? CrosshairUI;

		private static TextMeshProUGUI? CrosshairText;

		private static float TargetAlpha;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		private static void Awake(HUDManager __instance)
		{
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			CrosshairUI = Tool.AddHUD("CrosshairUI", ((Component)__instance.PlayerInfo.canvasGroup).transform);
			CrosshairText = CrosshairUI.AddComponent<TextMeshProUGUI>();
			((TMP_Text)CrosshairText).alignment = (TextAlignmentOptions)514;
			((TMP_Text)CrosshairText).font = ((TMP_Text)__instance.weightCounter).font;
			((TMP_Text)CrosshairText).enableWordWrapping = false;
			((TMP_Text)CrosshairText).text = ProHUD.Config.Crosshair.CROSSHAIR_TYPE.Value;
			((TMP_Text)CrosshairText).fontSize = ProHUD.Config.Crosshair.CROSSHAIR_SIZE.Value;
			((Graphic)CrosshairText).color = Color32.op_Implicit(new Color32((byte)ProHUD.Config.Crosshair.CROSSHAIR_RED.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_GREEN.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_BLUE.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value));
			CrosshairUI.SetActive(ProHUD.Config.Crosshair.CROSSHAIR.Value);
			TargetAlpha = (float)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value / 255f;
			((Transform)((TMP_Text)CrosshairText).rectTransform).localPosition = Vector3.zero;
		}

		[HarmonyPatch(typeof(HUDManager), "Update")]
		[HarmonyPostfix]
		private static void Update()
		{
			if (!((Object)(object)CrosshairText == (Object)null))
			{
				((TMP_Text)CrosshairText).alpha = Mathf.Lerp(((TMP_Text)CrosshairText).alpha, TargetAlpha, 10f * Time.deltaTime);
			}
		}

		[HarmonyPatch(typeof(Terminal), "BeginUsingTerminal")]
		[HarmonyPrefix]
		private static void BeginUsingTerminal()
		{
			TargetAlpha = 0f;
		}

		[HarmonyPatch(typeof(Terminal), "QuitTerminal")]
		[HarmonyPrefix]
		private static void QuitTerminal()
		{
			TargetAlpha = (float)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value / 255f;
		}

		public static void SettingChanged(object sender, EventArgs e)
		{
			GameObject? crosshairUI = CrosshairUI;
			if (crosshairUI != null)
			{
				crosshairUI.SetActive(ProHUD.Config.Crosshair.CROSSHAIR.Value);
			}
		}

		public static void TypeChanged(object sender, EventArgs e)
		{
			if (!((Object)(object)CrosshairText == (Object)null))
			{
				((TMP_Text)CrosshairText).text = ProHUD.Config.Crosshair.CROSSHAIR_TYPE.Value;
			}
		}

		public static void SizeChanged(object sender, EventArgs e)
		{
			if (!((Object)(object)CrosshairText == (Object)null))
			{
				((TMP_Text)CrosshairText).fontSize = ProHUD.Config.Crosshair.CROSSHAIR_SIZE.Value;
			}
		}

		public static void ColorChanged(object sender, EventArgs e)
		{
			//IL_0043: 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)
			if (!((Object)(object)CrosshairText == (Object)null))
			{
				((Graphic)CrosshairText).color = Color32.op_Implicit(new Color32((byte)ProHUD.Config.Crosshair.CROSSHAIR_RED.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_GREEN.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_BLUE.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value));
			}
		}

		public static void AlphaChanged(object sender, EventArgs e)
		{
			//IL_0043: 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)
			if (!((Object)(object)CrosshairText == (Object)null))
			{
				((Graphic)CrosshairText).color = Color32.op_Implicit(new Color32((byte)ProHUD.Config.Crosshair.CROSSHAIR_RED.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_GREEN.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_BLUE.Value, (byte)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value));
				TargetAlpha = (float)ProHUD.Config.Crosshair.CROSSHAIR_ALPHA.Value / 255f;
			}
		}
	}
	[HarmonyPatch]
	internal static class DiscountAlert
	{
		private static bool PlayerAlerted;

		private static int counter;

		[HarmonyPatch(typeof(StartMatchLever), "PlayLeverPullEffectsClientRpc")]
		[HarmonyPostfix]
		private static void PlayLeverPullEffectsClientRpc()
		{
			PlayerAlerted = false;
			counter++;
			if (StartOfRound.Instance.inShipPhase && !PlayerAlerted && counter == 1)
			{
				PlayerAlerted = true;
				((MonoBehaviour)HUDManager.Instance).StartCoroutine(DisplayAlert());
			}
			else if (counter > 1)
			{
				counter = 0;
			}
		}

		private static IEnumerator DisplayAlert()
		{
			yield return (object)new WaitForSeconds(5f);
			StringBuilder discount_list = new StringBuilder();
			Terminal terminal = HUDManager.Instance?.terminalScript;
			if ((Object)(object)terminal == (Object)null)
			{
				yield break;
			}
			for (int i = 0; i < terminal.buyableItemsList.Length; i++)
			{
				if (terminal.itemSalesPercentages[i] != 100)
				{
					discount_list.Append("\n<color=#000000>* " + terminal.buyableItemsList[i].itemName + " " + $"${(float)(terminal.buyableItemsList[i].creditsWorth * terminal.itemSalesPercentages[i]) / 100f} " + $"({100 - terminal.itemSalesPercentages[i]}% OFF!)</color>");
				}
			}
			if (ProHUD.Config.DiscountAlert.ALERT_NO_DISCOUNT.Value && discount_list.ToString() == "")
			{
				HUDManager instance = HUDManager.Instance;
				if (instance != null)
				{
					instance.DisplayTip("<color=#000000>No Discount!</color>", "<color=#000000>None :(\nCheck back Later!</color>", false, false, "LC_Tip1");
				}
			}
			else if (ProHUD.Config.DiscountAlert.ALERT_DISCOUNT.Value && discount_list.ToString() != "")
			{
				HUDManager instance2 = HUDManager.Instance;
				if (instance2 != null)
				{
					instance2.DisplayTip("<color=#000000>Today's Discounts!</color>", discount_list.ToString(), false, false, "LC_Tip1");
				}
			}
		}
	}
	[HarmonyPatch]
	internal static class InsanityMeter
	{
		private static GameObject? InsanityFrame;

		private static Image? Meter;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		private static void Awake(HUDManager __instance)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: 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_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: 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)
			Sprite sprite = Sprite.Create(Texture2D.whiteTexture, new Rect(0f, 0f, 4f, 4f), new Vector2(0.5f, 0.5f));
			Vector2 sizeDelta = default(Vector2);
			((Vector2)(ref sizeDelta))..ctor(10f, 50f);
			InsanityFrame = Tool.AddHUD("InsanityFrame", sprite, ((Component)__instance.PlayerInfo.canvasGroup).transform);
			Image component = InsanityFrame.GetComponent<Image>();
			((Graphic)component).color = Color32.op_Implicit(new Color32((byte)0, (byte)0, (byte)0, byte.MaxValue));
			((Graphic)component).rectTransform.sizeDelta = sizeDelta;
			((Transform)((Graphic)component).rectTransform).localPosition = new Vector3(-290f, 150f, 0f);
			((Component)component).transform.localRotation = Quaternion.Euler(new Vector3(0f, -30f, 0f));
			GameObject val = Tool.AddHUD("InsanityMeter", sprite, InsanityFrame.transform);
			Meter = val.GetComponent<Image>();
			((Graphic)Meter).color = Color32.op_Implicit(new Color32((byte)127, (byte)0, byte.MaxValue, byte.MaxValue));
			Meter.fillMethod = (FillMethod)1;
			Meter.type = (Type)3;
			((Graphic)Meter).rectTransform.sizeDelta = sizeDelta;
		}

		[HarmonyPatch(typeof(PlayerControllerB), "Update")]
		[HarmonyPostfix]
		public static void Update(PlayerControllerB __instance)
		{
			if (!((Object)(object)Meter == (Object)null))
			{
				Meter.fillAmount = __instance.insanityLevel / __instance.maxInsanityLevel;
			}
		}

		public static void ConfigChanged(object? sender, EventArgs? e)
		{
			if (!((Object)(object)InsanityFrame == (Object)null))
			{
				InsanityFrame.SetActive(ProHUD.Config.InsanityMeter.INSANITY_METER.Value);
			}
		}
	}
	[HarmonyPatch]
	internal static class JetpackMeter
	{
		private static GameObject? JetpackUI;

		private static Image? JetpackFrame;

		private static Image? JetpackBar;

		private static Image? JetpackWarning;

		private static bool isJetpackCritical = false;

		private static bool PlayingJetpackCritical = false;

		private static float CriticalLevel = 0.75f;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		private static void Awake()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: 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_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)ProHUD.Asset.JetpackMeter.FrameSprite == (Object)null) && !((Object)(object)ProHUD.Asset.JetpackMeter.MeterSprite == (Object)null) && !((Object)(object)ProHUD.Asset.JetpackMeter.WarningSprite == (Object)null))
			{
				JetpackUI = Tool.AddHUD("JetpackUI", GameObject.Find("IngamePlayerHUD").transform);
				RectTransform val = JetpackUI.AddComponent<RectTransform>();
				JetpackUI.transform.localScale = new Vector3(2f, 2f, 2f);
				JetpackUI.transform.localPosition = Vector2.op_Implicit(new Vector2(200f, 0f));
				JetpackUI.transform.localRotation = Quaternion.Euler(new Vector3(0f, 30f, 0f));
				JetpackFrame = Tool.AddHUD("JetpackFrame", ProHUD.Asset.JetpackMeter.FrameSprite, JetpackUI.transform).GetComponent<Image>();
				JetpackBar = Tool.AddHUD("JetpackMeter", ProHUD.Asset.JetpackMeter.MeterSprite, JetpackUI.transform).GetComponent<Image>();
				JetpackWarning = Tool.AddHUD("JetpackWarning", ProHUD.Asset.JetpackMeter.WarningSprite, JetpackUI.transform).GetComponent<Image>();
				((Transform)((Graphic)JetpackBar).rectTransform).localPosition = Vector2.op_Implicit(Vector2.zero);
				((Transform)((Graphic)JetpackFrame).rectTransform).localPosition = Vector2.op_Implicit(Vector2.zero);
				((Transform)((Graphic)JetpackWarning).rectTransform).localPosition = Vector2.op_Implicit(new Vector2(30f, 0f));
				((Component)((Graphic)JetpackWarning).rectTransform).transform.localRotation = Quaternion.Euler(new Vector3(0f, 15f, 0f));
				((Component)((Graphic)JetpackWarning).rectTransform).transform.localScale = new Vector3(1.2f, 1.2f, 1.2f);
				JetpackBar.type = (Type)3;
				JetpackBar.fillMethod = (FillMethod)1;
			}
		}

		[HarmonyPatch(typeof(PlayerControllerB), "Update")]
		[HarmonyPostfix]
		private static void Update(ref PlayerControllerB __instance, ref bool ___isHoldingObject, ref GrabbableObject ___currentlyHeldObjectServer)
		{
			//IL_0084: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: 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_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			if (Game.isControlling(__instance) && !((Object)(object)JetpackUI == (Object)null) && !((Object)(object)JetpackFrame == (Object)null) && !((Object)(object)JetpackBar == (Object)null) && !((Object)(object)JetpackWarning == (Object)null))
			{
				if ((ProHUD.Config.JetpackMeter.JETPACK_METER.Value & ___isHoldingObject) && ___currentlyHeldObjectServer is JetpackItem)
				{
					JetpackUI.SetActive(true);
					float num = ((Vector3)(ref ((JetpackItem)___currentlyHeldObjectServer).forces)).magnitude / 50f;
					JetpackBar.fillAmount = num;
					((Behaviour)JetpackWarning).enabled = num > CriticalLevel;
					Color color = Color.Lerp(Color32.op_Implicit(new Color32(byte.MaxValue, (byte)200, (byte)100, (byte)200)), Color32.op_Implicit(new Color32((byte)200, (byte)60, (byte)60, (byte)200)), num);
					((Graphic)JetpackBar).color = color;
					((Graphic)JetpackFrame).color = color;
					((Graphic)JetpackWarning).color = color;
				}
				else
				{
					JetpackUI.SetActive(false);
				}
			}
		}

		[HarmonyPatch(typeof(JetpackItem), "SetJetpackAudios")]
		[HarmonyPostfix]
		private static void SetJetpackAudios(JetpackItem __instance, ref bool __runOriginal, ref Vector3 ___forces, bool ___jetpackActivated, ref float ___noiseInterval)
		{
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)ProHUD.Asset.JetpackMeter.JetpackCriticalBeep == (Object)null)
			{
				return;
			}
			if (((Vector3)(ref ___forces)).magnitude > 50f * CriticalLevel)
			{
				if (!PlayingJetpackCritical)
				{
					PlayingJetpackCritical = true;
					__instance.jetpackBeepsAudio.clip = ProHUD.Asset.JetpackMeter.JetpackCriticalBeep;
					__instance.jetpackBeepsAudio.Play();
				}
			}
			else
			{
				PlayingJetpackCritical = false;
			}
			if (!(__runOriginal = !PlayingJetpackCritical) && ___jetpackActivated)
			{
				if (___noiseInterval >= 0.5f)
				{
					___noiseInterval = 0f;
					RoundManager.Instance.PlayAudibleNoise(((Component)__instance).transform.position, 25f, 0.85f, 0, ((GrabbableObject)__instance).playerHeldBy.isInHangarShipRoom && StartOfRound.Instance.hangarDoorsClosed, 41);
				}
				else
				{
					___noiseInterval += Time.deltaTime;
				}
			}
		}

		[HarmonyPatch(typeof(JetpackItem), "JetpackEffect")]
		[HarmonyPostfix]
		private static void JetpackEffect(JetpackItem __instance, bool enable)
		{
			if (!((Object)(object)ProHUD.Asset.JetpackMeter.JetpackCriticalBeep == (Object)null) && enable && isJetpackCritical)
			{
				PlayingJetpackCritical = true;
				__instance.jetpackBeepsAudio.clip = ProHUD.Asset.JetpackMeter.JetpackCriticalBeep;
				__instance.jetpackBeepsAudio.Play();
			}
		}
	}
	[HarmonyPatch]
	internal static class ResidualQuantity
	{
		[HarmonyPatch(typeof(PlayerControllerB), "LateUpdate")]
		[HarmonyPostfix]
		private static void LateUpdate(bool ___isHoldingObject, GrabbableObject ___currentlyHeldObjectServer)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: 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_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_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: 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_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			if (ProHUD.Config.ResidualQuantity.RESIDUAL_QUNTITY.Value && ___isHoldingObject && (Object)(object)___currentlyHeldObjectServer != (Object)null)
			{
				if (___currentlyHeldObjectServer is SprayPaintItem)
				{
					HUDManager.Instance.batteryMeter.fillAmount = ((SprayPaintItem)___currentlyHeldObjectServer).sprayCanTank / 1.3f;
					((Graphic)HUDManager.Instance.batteryMeter).color = Color32.op_Implicit(new Color32((byte)0, byte.MaxValue, byte.MaxValue, byte.MaxValue));
					((Component)HUDManager.Instance.batteryMeter).gameObject.SetActive(true);
					((Graphic)((Component)GameObject.Find("BatteryMeterFrame").transform).GetComponent<Image>()).color = Color32.op_Implicit(new Color32((byte)0, byte.MaxValue, byte.MaxValue, (byte)111));
				}
				else if (___currentlyHeldObjectServer is TetraChemicalItem)
				{
					HUDManager.Instance.batteryMeter.fillAmount = ((TetraChemicalItem)___currentlyHeldObjectServer).fuel / 1.3f;
					((Graphic)HUDManager.Instance.batteryMeter).color = Color32.op_Implicit(new Color32((byte)0, byte.MaxValue, byte.MaxValue, byte.MaxValue));
					((Component)HUDManager.Instance.batteryMeter).gameObject.SetActive(true);
					((Graphic)((Component)GameObject.Find("BatteryMeterFrame").transform).GetComponent<Image>()).color = Color32.op_Implicit(new Color32((byte)0, byte.MaxValue, byte.MaxValue, (byte)111));
				}
				else if (___currentlyHeldObjectServer.itemProperties.requiresBattery)
				{
					((Graphic)HUDManager.Instance.batteryMeter).color = Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, (byte)0, byte.MaxValue));
					((Graphic)((Component)GameObject.Find("BatteryMeterFrame").transform).GetComponent<Image>()).color = Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, (byte)0, (byte)111));
				}
			}
		}
	}
	[HarmonyPatch]
	internal static class Scan
	{
		private static CallbackContext PingContext;

		private static bool ToggleScan;

		private static Image? ScanImage;

		private static TextMeshProUGUI? TotalText;

		private static TextMeshProUGUI? TotalNum;

		private static int ShipTotalDisplayNum;

		private static int ShipTotal;

		private static float AddingInterval;

		private static bool Adding;

		private static bool AddingOne;

		private static float totalScrapScannedDisplayNum;

		private static bool isUpdating;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPrefix]
		private static void Awake()
		{
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			GameObject obj = GameObject.Find("/Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image");
			ScanImage = ((obj != null) ? obj.GetComponent<Image>() : null);
			GameObject obj2 = GameObject.Find("/Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image/TotalText");
			TotalText = ((obj2 != null) ? obj2.GetComponent<TextMeshProUGUI>() : null);
			GameObject obj3 = GameObject.Find("/Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image/TotalNum");
			TotalNum = ((obj3 != null) ? obj3.GetComponent<TextMeshProUGUI>() : null);
			if (!((Object)(object)ScanImage == (Object)null) && !((Object)(object)TotalText == (Object)null) && !((Object)(object)TotalNum == (Object)null))
			{
				((Transform)((TMP_Text)TotalText).rectTransform).localPosition = new Vector3(-24f, -11f, 0f);
				((Transform)((TMP_Text)TotalNum).rectTransform).localPosition = new Vector3(-1f, -11f, 0f);
				((TMP_Text)TotalNum).lineSpacing = 40f;
				((TMP_Text)TotalText).text = "TOTAL:\n\nLOOTED:";
				((TMP_Text)TotalText).alignment = (TextAlignmentOptions)1025;
				((MaskableGraphic)TotalText).maskable = false;
				((TMP_Text)TotalText).enableWordWrapping = false;
			}
		}

		[HarmonyPatch(typeof(HUDManager), "OnEnable")]
		[HarmonyPostfix]
		private static void OnEnable()
		{
			ToggleScan = false;
			IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan", false).performed += PingScan_Toggle;
		}

		[HarmonyPatch(typeof(HUDManager), "OnDisable")]
		[HarmonyPostfix]
		private static void OnDisable()
		{
			IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan", false).performed -= PingScan_Toggle;
			ToggleScan = false;
		}

		[HarmonyPatch(typeof(HUDManager), "UpdateScanNodes")]
		[HarmonyPostfix]
		private static void UpdateScanNodes(HUDManager __instance, Animator ___scanInfoAnimator, int ___scannedScrapNum, Dictionary<RectTransform, ScanNodeProperties> ___scanNodes, ref int ___totalScrapScanned, ref int ___totalScrapScannedDisplayNum, ref float ___addToDisplayTotalInterval)
		{
			bool flag = false;
			for (int i = 0; i < __instance.scanElements.Length; i++)
			{
				if (___scanNodes.Count > 0 && ___scanNodes.TryGetValue(__instance.scanElements[i], out ScanNodeProperties value) && (Object)(object)value != (Object)null && value.nodeType == 2)
				{
					flag = true;
				}
			}
			if (!flag)
			{
				ShipTotalDisplayNum = 0;
				AddingInterval = 0f;
			}
			if (ProHUD.Config.Scan.SCAN_SUM_OF_ONE.Value)
			{
				___scanInfoAnimator.SetBool("display", ___scannedScrapNum >= 1 && flag);
			}
		}

		[HarmonyPatch(typeof(HUDManager), "Update")]
		[HarmonyPostfix]
		private static void Update(HUDManager __instance, ref float ___playerPingingScan, TextMeshProUGUI ___totalValueText, Animator ___scanInfoAnimator, ref float ___addToDisplayTotalInterval, ref int ___totalScrapScannedDisplayNum, int ___scannedScrapNum, int ___totalScrapScanned, ref bool ___addingToDisplayTotal)
		{
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			if (ProHUD.Config.Scan.SCAN_SUM_OF_ONE.Value)
			{
				if (___scannedScrapNum == 1 && ___totalScrapScannedDisplayNum < ___totalScrapScanned)
				{
					AddingOne = true;
					if (___addToDisplayTotalInterval <= 0.03f)
					{
						___addToDisplayTotalInterval += Time.deltaTime;
					}
					else
					{
						___addToDisplayTotalInterval = 0f;
						___totalScrapScannedDisplayNum = (int)Mathf.Clamp(Mathf.MoveTowards((float)___totalScrapScannedDisplayNum, (float)___totalScrapScanned, 1500f * Time.deltaTime), 20f, 10000f);
						((TMP_Text)___totalValueText).text = $"${___totalScrapScannedDisplayNum}";
						__instance.UIAudio.PlayOneShot(__instance.addToScrapTotalSFX);
					}
				}
				else if (AddingOne)
				{
					AddingOne = false;
					__instance.UIAudio.PlayOneShot(__instance.finishAddingToTotalSFX);
				}
			}
			if (___addToDisplayTotalInterval == 0f)
			{
				isUpdating = totalScrapScannedDisplayNum < (float)___totalScrapScannedDisplayNum;
				totalScrapScannedDisplayNum = ___totalScrapScannedDisplayNum;
			}
			if ((bool)Tool.InvokeMethod<HUDManager>(__instance, "CanPlayerScan"))
			{
				PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
				if (ProHUD.Config.Scan.SCAN_SHIP_TOTAL.Value && localPlayerController.isInHangarShipRoom && ___scanInfoAnimator.GetBool("display") && (ShipTotalDisplayNum < ShipTotal || isUpdating))
				{
					Adding = true;
					if ((___addToDisplayTotalInterval == 0f && isUpdating) || AddingInterval > 0.03f)
					{
						ShipTotalDisplayNum = (int)Mathf.MoveTowards((float)ShipTotalDisplayNum, (float)ShipTotal, 1500f * Time.deltaTime);
						((TMP_Text)___totalValueText).text = $"${___totalScrapScannedDisplayNum}\n${ShipTotalDisplayNum}";
						if (AddingInterval > 0.03f)
						{
							AddingInterval = 0f;
						}
					}
					else if (!isUpdating)
					{
						AddingInterval += Time.deltaTime;
					}
				}
				else if (Adding)
				{
					Adding = false;
					__instance.UIAudio.PlayOneShot(__instance.finishAddingToTotalSFX);
				}
			}
			if (___playerPingingScan < -1f && ___playerPingingScan >= -5f)
			{
				___playerPingingScan -= Time.deltaTime;
			}
			if (!(___playerPingingScan > 0f - ProHUD.Config.Scan.SCAN_INTERVAL.Value + 0.3f) && ((ProHUD.Config.Scan.SCAN_HOLD.Value && IngamePlayerSettings.Instance.playerInput.actions.FindAction("PingScan", false).IsPressed()) || (ProHUD.Config.Scan.SCAN_TOGGLE.Value && ToggleScan)))
			{
				Tool.InvokeMethod<HUDManager>(__instance, "PingScan_performed", new object[1] { PingContext });
			}
		}

		[HarmonyPatch(typeof(HUDManager), "PingScan_performed")]
		[HarmonyPrefix]
		private static void PingScan_performed(HUDManager __instance, ref CallbackContext context, ref bool __runOriginal, ref float ___playerPingingScan, List<ScanNodeProperties> ___nodesOnScreen, int ___scannedScrapNum)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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_0431: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_049d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_035b: Unknown result type (might be due to invalid IL or missing references)
			//IL_037f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
			if (((CallbackContext)(ref context)).performed)
			{
				PingContext = context;
			}
			if ((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null || !(bool)Tool.InvokeMethod<HUDManager>(__instance, "CanPlayerScan") || ___playerPingingScan > -1f || ((!ProHUD.Config.Scan.SCAN_TOGGLE.Value || !ToggleScan) && !((CallbackContext)(ref context)).performed))
			{
				return;
			}
			__runOriginal = false;
			___playerPingingScan = 0.3f;
			if (!ProHUD.Config.Scan.SCAN_TOGGLE_ANIMATION.Value)
			{
				((Component)__instance.scanEffectAnimator).transform.position = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position;
				__instance.scanEffectAnimator.SetTrigger("scan");
			}
			if (!ProHUD.Config.Scan.SCAN_TOGGLE_SFX.Value)
			{
				__instance.UIAudio.PlayOneShot(__instance.scanSFX);
			}
			if ((Object)(object)ScanImage == (Object)null || (Object)(object)TotalText == (Object)null || (Object)(object)TotalNum == (Object)null)
			{
				return;
			}
			GameObject obj2 = GameObject.Find("/Environment/HangarShip");
			ShipTotal = ((obj2 == null) ? null : obj2.GetComponentsInChildren<GrabbableObject>()?.Where(delegate(GrabbableObject obj)
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				if (((object)obj).GetType() == typeof(GiftBoxItem))
				{
					return !((GiftBoxItem)obj).hasUsedGift;
				}
				return (obj != null && ((Component)obj).GetComponentInChildren<ScanNodeProperties>()?.nodeType == 2) ? true : false;
			}))?.Sum((GrabbableObject scrap) => scrap.scrapValue) ?? 0;
			((TMP_Text)TotalText).text = "";
			Dictionary<string, (int, int)> dictionary = new Dictionary<string, (int, int)>();
			foreach (ScanNodeProperties item3 in ___nodesOnScreen.Where((ScanNodeProperties node) => node.nodeType == 2))
			{
				if (item3.nodeType == 2)
				{
					if (dictionary.TryGetValue(item3.headerText, out var _))
					{
						int item = dictionary[item3.headerText].Item1 + 1;
						int item2 = dictionary[item3.headerText].Item2 + item3.scrapValue;
						dictionary[item3.headerText] = (item, item2);
					}
					else
					{
						dictionary.Add(item3.headerText, (1, item3.scrapValue));
					}
				}
			}
			foreach (KeyValuePair<string, (int, int)> item4 in dictionary)
			{
				TextMeshProUGUI? totalText = TotalText;
				((TMP_Text)totalText).text = ((TMP_Text)totalText).text + $"<color=#ff3333>{item4.Value.Item1} {item4.Key}: {item4.Value.Item2}\n</color>";
			}
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (ProHUD.Config.Scan.SCAN_SHIP_TOTAL.Value && localPlayerController.isInHangarShipRoom)
			{
				((Transform)((Graphic)ScanImage).rectTransform).localScale = new Vector3(1f, 1.6f, 1f);
				((Transform)((TMP_Text)TotalText).rectTransform).localScale = new Vector3(1f, 0.625f, 1f);
				((Transform)((TMP_Text)TotalNum).rectTransform).localScale = new Vector3(1f, 0.625f, 1f);
				((Transform)((TMP_Text)TotalText).rectTransform).localPosition = new Vector3(-24f, 2f, 0f);
				((Transform)((TMP_Text)TotalNum).rectTransform).localPosition = new Vector3(-1f, 0f, 0f);
				TextMeshProUGUI? totalText2 = TotalText;
				((TMP_Text)totalText2).text = ((TMP_Text)totalText2).text + "\nTOTAL:\n\nLOOTED:";
			}
			else
			{
				((Transform)((Graphic)ScanImage).rectTransform).localScale = new Vector3(1f, 1f, 1f);
				((Transform)((TMP_Text)TotalText).rectTransform).localScale = new Vector3(1f, 1f, 1f);
				((Transform)((TMP_Text)TotalNum).rectTransform).localScale = new Vector3(1f, 1f, 1f);
				((Transform)((TMP_Text)TotalText).rectTransform).localPosition = new Vector3(-24f, -11f, 0f);
				((Transform)((TMP_Text)TotalNum).rectTransform).localPosition = new Vector3(-1f, -15f, 0f);
				TextMeshProUGUI? totalText3 = TotalText;
				((TMP_Text)totalText3).text = ((TMP_Text)totalText3).text + "\nTOTAL:\n\n\n";
			}
		}

		private static void PingScan_Toggle(CallbackContext context)
		{
			if (ToggleScan)
			{
				ToggleScan = false;
			}
			else if (ProHUD.Config.Scan.SCAN_TOGGLE.Value && !((Object)(object)GameNetworkManager.Instance?.localPlayerController == (Object)null) && ((CallbackContext)(ref context)).performed)
			{
				ToggleScan = true;
			}
		}
	}
	[HarmonyPatch]
	internal static class StaminaMeter
	{
		private const float METER_EMPTY = 0.298f;

		private const float METER_FULL = 0.91f;

		private static float minStamina = 0.1f;

		private static readonly Color32 NormalColor = new Color32(byte.MaxValue, (byte)127, (byte)0, byte.MaxValue);

		private static readonly Color32 ExhaustedColor = new Color32((byte)127, (byte)63, (byte)0, byte.MaxValue);

		private static Gradient StaminaGradient = new Gradient();

		private static GameObject ExhaustedIndicator;

		private static TextMeshProUGUI arrow;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPostfix]
		public static void Awake(HUDManager __instance)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: 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_004d: 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_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: 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_00a4: 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_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: 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_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			StaminaGradient.SetKeys((GradientColorKey[])(object)new GradientColorKey[4]
			{
				new GradientColorKey(Color32.op_Implicit(NormalColor), 0f),
				new GradientColorKey(Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, (byte)0, byte.MaxValue)), 0.33f),
				new GradientColorKey(Color32.op_Implicit(new Color32((byte)127, byte.MaxValue, (byte)0, byte.MaxValue)), 0.66f),
				new GradientColorKey(Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue)), 1f)
			}, (GradientAlphaKey[])(object)new GradientAlphaKey[2]
			{
				new GradientAlphaKey(1f, 0f),
				new GradientAlphaKey(1f, 1f)
			});
			ExhaustedIndicator = Tool.AddHUD("ExhaustedIndicator", ((Component)__instance.PlayerInfo.canvasGroup).transform);
			arrow = ExhaustedIndicator.AddComponent<TextMeshProUGUI>();
			((TMP_Text)arrow).text = "▼\n▲";
			((TMP_Text)arrow).lineSpacing = 30f;
			((TMP_Text)arrow).enableWordWrapping = false;
			((TMP_Text)arrow).fontSize = 10f;
			((TMP_Text)arrow).alignment = (TextAlignmentOptions)514;
			((Graphic)arrow).color = Color32.op_Implicit(NormalColor);
			((Transform)((TMP_Text)arrow).rectTransform).rotation = Quaternion.Euler(new Vector3(0f, 0f, -20f));
			((Transform)((TMP_Text)arrow).rectTransform).localPosition = new Vector3(-364f, 83f, 0f);
			minStamina = (ProHUD.Config.StaminaMeter.STAMINA_ACCURATE.Value ? 0.1f : 0.3f);
			ExhaustedIndicator.SetActive(ProHUD.Config.StaminaMeter.STAMINA_ACCURATE.Value && ProHUD.Config.StaminaMeter.STAMINA_EXHAUSTED.Value);
		}

		[HarmonyPatch(typeof(PlayerControllerB), "LateUpdate")]
		[HarmonyPostfix]
		public static void LateUpdate(PlayerControllerB __instance, Image ___sprintMeterUI, float ___sprintMeter, float ___drunkness)
		{
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			if (!Game.isPlayer(__instance))
			{
				return;
			}
			___sprintMeterUI.fillAmount = Mathf.Lerp(0.298f, 0.91f, (___sprintMeter - minStamina) / (1f - minStamina));
			if (___sprintMeter > 0.3f || __instance.isSprinting)
			{
				if (ProHUD.Config.StaminaMeter.STAMINA_TZP_GRADIENT.Value && ___drunkness > 0f)
				{
					((Graphic)___sprintMeterUI).color = StaminaGradient.Evaluate(___drunkness);
				}
				else
				{
					((Graphic)___sprintMeterUI).color = Color32.op_Implicit(NormalColor);
				}
			}
			else
			{
				((Graphic)___sprintMeterUI).color = Color32.op_Implicit(ExhaustedColor);
			}
		}

		public static void ConfigChanged(object? sender, EventArgs? e)
		{
			minStamina = (ProHUD.Config.StaminaMeter.STAMINA_ACCURATE.Value ? 0.1f : 0.3f);
			GameObject exhaustedIndicator = ExhaustedIndicator;
			if (exhaustedIndicator != null)
			{
				exhaustedIndicator.SetActive(ProHUD.Config.StaminaMeter.STAMINA_ACCURATE.Value && ProHUD.Config.StaminaMeter.STAMINA_EXHAUSTED.Value);
			}
		}
	}
	[HarmonyPatch]
	internal static class StatusText
	{
		private static GameObject? HPMetricUI;

		private static TextMeshProUGUI? HPMetricText;

		[HarmonyPatch(typeof(HUDManager), "Awake")]
		[HarmonyPrefix]
		private static void Awake(HUDManager __instance)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			HPMetricUI = Tool.AddHUD("HPMetric", ((TMP_Text)__instance.weightCounter).transform);
			HPMetricText = HPMetricUI.AddComponent<TextMeshProUGUI>();
			((TMP_Text)HPMetricText).rectTransform.anchoredPosition = new Vector2(30f, 15f);
			((TMP_Text)HPMetricText).font = ((TMP_Text)__instance.weightCounter).font;
			((TMP_Text)HPMetricText).fontSize = 16f;
			((TMP_Text)HPMetricText).text = "HP:100";
			((TMP_Text)HPMetricText).alignment = ((TMP_Text)__instance.weightCounter).alignment;
			((Graphic)HPMetricText).color = Color32.op_Implicit(new Color32((byte)0, (byte)195, (byte)0, byte.MaxValue));
			((TMP_Text)HPMetricText).overflowMode = (TextOverflowModes)0;
			HPMetricUI.SetActive(ProHUD.Config.StatusText.HEALTH_METRIC.Value);
		}

		[HarmonyPatch(typeof(HUDManager), "UpdateHealthUI")]
		[HarmonyPostfix]
		private static void UpdateHealthUI(int health)
		{
			if ((Object)(object)HPMetricText != (Object)null && (Object)(object)GameNetworkManager.Instance?.localPlayerController != (Object)null && !GameNetworkManager.Instance.localPlayerController.isPlayerDead)
			{
				((TMP_Text)HPMetricText).text = $"HP:{health}";
			}
		}

		[HarmonyPatch(typeof(HUDManager), "Update")]
		[HarmonyPostfix]
		private static void Update(ref TextMeshProUGUI ___weightCounter, ref Animator ___weightCounterAnimator)
		{
			if (ProHUD.Config.StatusText.LB2KG.Value && Object.op_Implicit((Object)(object)___weightCounter) && Object.op_Implicit((Object)(object)___weightCounterAnimator))
			{
				float num = Mathf.RoundToInt(Mathf.Clamp(GameNetworkManager.Instance.localPlayerController.carryWeight - 1f, 0f, 100f) * 105f);
				float num2 = num * 0.4536f;
				((TMP_Text)___weightCounter).text = $"{num2:0.#} Kg";
			}
		}

		public static void ConfigChanged(object? sender, EventArgs? e)
		{
			GameObject? hPMetricUI = HPMetricUI;
			if (hPMetricUI != null)
			{
				hPMetricUI.SetActive(ProHUD.Config.StatusText.HEALTH_METRIC.Value);
			}
		}
	}
}
namespace ProHUD.Config
{
	internal static class Clock
	{
		public static ConfigEntry<bool>? CLOCK_STD;

		public static ConfigEntry<bool>? CLOCK_FULL_DIGIT;

		public static ConfigEntry<bool>? CLOCK_FAST_UPDATE;

		public static ConfigEntry<bool>? CLOCK_COMPACT;

		public static ConfigEntry<bool>? CLOCK_IN_SHIP;

		public static ConfigEntry<bool>? CLOCK_IN_FACTORY;

		public static void bind()
		{
			CLOCK_STD = Setting.Bind("SECTION_CLOCK", "CLOCK_STD", defaultValue: false);
			CLOCK_FULL_DIGIT = Setting.Bind("SECTION_CLOCK", "CLOCK_FULL_DIGIT", defaultValue: false);
			CLOCK_FAST_UPDATE = Setting.Bind("SECTION_CLOCK", "CLOCK_FAST_UPDATE", defaultValue: false);
			CLOCK_COMPACT = Setting.Bind("SECTION_CLOCK", "CLOCK_COMPACT", defaultValue: false);
			CLOCK_IN_SHIP = Setting.Bind("SECTION_CLOCK", "CLOCK_IN_SHIP", defaultValue: false);
			CLOCK_IN_FACTORY = Setting.Bind("SECTION_CLOCK", "CLOCK_IN_FACTORY", defaultValue: false);
			CLOCK_STD.SettingChanged += ProHUD.Patch.Clock.ResizeClock;
			CLOCK_COMPACT.SettingChanged += ProHUD.Patch.Clock.ResizeClock;
		}
	}
	internal static class Compass
	{
		public enum CompassNorth
		{
			TopRight,
			Right,
			BottomRight,
			Bottom,
			BottomLeft,
			Left,
			TopLeft,
			Top
		}

		public static ConfigEntry<bool>? COMPASS;

		public static ConfigEntry<CompassNorth>? COMPASS_NORTH;

		public static ConfigEntry<bool>? COMPASS_NORTH_SHIP;

		public static void bind()
		{
			COMPASS = Setting.Bind("SECTION_COMPASS", "COMPASS", defaultValue: false);
			COMPASS_NORTH = Setting.Bind("SECTION_COMPASS", "COMPASS_NORTH", CompassNorth.TopLeft);
			COMPASS_NORTH_SHIP = Setting.Bind("SECTION_COMPASS", "COMPASS_NORTH_SHIP", defaultValue: false);
			COMPASS.SettingChanged += ProHUD.Patch.Compass.ConfigChanged;
		}
	}
	internal static class Crosshair
	{
		public static ConfigEntry<bool>? CROSSHAIR;

		public static ConfigEntry<string>? CROSSHAIR_TYPE;

		public static ConfigEntry<int>? CROSSHAIR_SIZE;

		public static ConfigEntry<int>? CROSSHAIR_RED;

		public static ConfigEntry<int>? CROSSHAIR_GREEN;

		public static ConfigEntry<int>? CROSSHAIR_BLUE;

		public static ConfigEntry<int>? CROSSHAIR_ALPHA;

		public static void bind()
		{
			CROSSHAIR = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR", defaultValue: false);
			CROSSHAIR_TYPE = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_TYPE", "- + -");
			CROSSHAIR_SIZE = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_SIZE", 20, 1, 100);
			CROSSHAIR_RED = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_RED", 255, 0, 255);
			CROSSHAIR_GREEN = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_GREEN", 255, 0, 255);
			CROSSHAIR_BLUE = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_BLUE", 255, 0, 255);
			CROSSHAIR_ALPHA = Setting.Bind("SECTION_CROSSHAIR", "CROSSHAIR_ALPHA", 127, 0, 255);
			CROSSHAIR.SettingChanged += ProHUD.Patch.Crosshair.SettingChanged;
			CROSSHAIR_TYPE.SettingChanged += ProHUD.Patch.Crosshair.TypeChanged;
			CROSSHAIR_SIZE.SettingChanged += ProHUD.Patch.Crosshair.SizeChanged;
			CROSSHAIR_RED.SettingChanged += ProHUD.Patch.Crosshair.ColorChanged;
			CROSSHAIR_GREEN.SettingChanged += ProHUD.Patch.Crosshair.ColorChanged;
			CROSSHAIR_BLUE.SettingChanged += ProHUD.Patch.Crosshair.ColorChanged;
			CROSSHAIR_ALPHA.SettingChanged += ProHUD.Patch.Crosshair.AlphaChanged;
		}
	}
	internal static class DiscountAlert
	{
		public static ConfigEntry<bool>? ALERT_DISCOUNT;

		public static ConfigEntry<bool>? ALERT_NO_DISCOUNT;

		public static void bind()
		{
			ALERT_DISCOUNT = Setting.Bind("SECTION_ALERT", "ALERT_DISCOUNT", defaultValue: false);
			ALERT_NO_DISCOUNT = Setting.Bind("SECTION_ALERT", "ALERT_NO_DISCOUNT", defaultValue: false);
		}
	}
	internal static class InsanityMeter
	{
		public static ConfigEntry<bool>? INSANITY_METER;

		public static void bind()
		{
			INSANITY_METER = Setting.Bind("SECTION_STATUS", "INSANITY_METER", defaultValue: false);
			INSANITY_METER.SettingChanged += ProHUD.Patch.InsanityMeter.ConfigChanged;
		}
	}
	internal static class JetpackMeter
	{
		public static ConfigEntry<bool>? JETPACK_METER;

		public static void bind()
		{
			JETPACK_METER = Setting.Bind("SECTION_ITEM", "JETPACK_METER", defaultValue: false);
		}
	}
	internal static class ResidualQuantity
	{
		public static ConfigEntry<bool>? RESIDUAL_QUNTITY;

		public static void bind()
		{
			RESIDUAL_QUNTITY = Setting.Bind("SECTION_ITEM", "RESIDUAL_QUNTITY", defaultValue: false);
		}
	}
	internal static class Scan
	{
		public static ConfigEntry<bool>? SCAN_HOLD;

		public static ConfigEntry<bool>? SCAN_TOGGLE;

		public static ConfigEntry<float>? SCAN_INTERVAL;

		public static ConfigEntry<bool>? SCAN_TOGGLE_ANIMATION;

		public static ConfigEntry<bool>? SCAN_TOGGLE_SFX;

		public static ConfigEntry<bool>? SCAN_SHIP_TOTAL;

		public static ConfigEntry<bool>? SCAN_SHOW_ALL_ITEM;

		public static ConfigEntry<bool>? SCAN_SUM_OF_ONE;

		public static void bind()
		{
			SCAN_HOLD = Setting.Bind("SECTION_SCAN", "SCAN_HOLD", defaultValue: false);
			SCAN_TOGGLE = Setting.Bind("SECTION_SCAN", "SCAN_TOGGLE", defaultValue: false);
			SCAN_INTERVAL = Setting.Bind("SECTION_SCAN", "SCAN_INTERVAL", 1.3f, 1.3f, 5f, RequireRestart: false, 0.1f);
			SCAN_TOGGLE_ANIMATION = Setting.Bind("SECTION_SCAN", "SCAN_TOGGLE_ANIMATION", defaultValue: false);
			SCAN_TOGGLE_SFX = Setting.Bind("SECTION_SCAN", "SCAN_TOGGLE_SFX", defaultValue: false);
			SCAN_SHIP_TOTAL = Setting.Bind("SECTION_SCAN", "SCAN_SHIP_TOTAL", defaultValue: false);
			SCAN_SHOW_ALL_ITEM = Setting.Bind("SECTION_SCAN", "SCAN_SHOW_ALL_ITEM", defaultValue: false);
			SCAN_SUM_OF_ONE = Setting.Bind("SECTION_SCAN", "SCAN_SUM_OF_ONE", defaultValue: false);
		}
	}
	internal static class StaminaMeter
	{
		public static ConfigEntry<bool>? STAMINA_ACCURATE;

		public static ConfigEntry<bool>? STAMINA_EXHAUSTED;

		public static ConfigEntry<bool>? STAMINA_TZP_GRADIENT;

		public static void bind()
		{
			STAMINA_ACCURATE = Setting.Bind("SECTION_STATUS", "STAMINA_ACCURATE", defaultValue: false);
			STAMINA_EXHAUSTED = Setting.Bind("SECTION_STATUS", "STAMINA_EXHAUSTED", defaultValue: false);
			STAMINA_TZP_GRADIENT = Setting.Bind("SECTION_STATUS", "STAMINA_TZP_GRADIENT", defaultValue: false);
			STAMINA_ACCURATE.SettingChanged += ProHUD.Patch.StaminaMeter.ConfigChanged;
			STAMINA_EXHAUSTED.SettingChanged += ProHUD.Patch.StaminaMeter.ConfigChanged;
		}
	}
	internal static class StatusText
	{
		public static ConfigEntry<bool>? HEALTH_METRIC;

		public static ConfigEntry<bool>? LB2KG;

		public static void bind()
		{
			HEALTH_METRIC = Setting.Bind("SECTION_STATUS", "HEALTH_METRIC", defaultValue: false);
			LB2KG = Setting.Bind("SECTION_STATUS", "LB2KG", defaultValue: false);
			HEALTH_METRIC.SettingChanged += ProHUD.Patch.StatusText.ConfigChanged;
		}
	}
	public static class Setting
	{
		public enum LanguageOption
		{
			English,
			Korean
		}

		public static ConfigEntry<LanguageOption>? Language;

		public static void BindAll()
		{
			Language = Bind("SECTION_GENERAL", "LANGUAGE", LanguageOption.Korean, null, null, RequireRestart: true);
			Clock.bind();
			Compass.bind();
			Crosshair.bind();
			DiscountAlert.bind();
			InsanityMeter.bind();
			JetpackMeter.bind();
			ResidualQuantity.bind();
			StaminaMeter.bind();
			StatusText.bind();
			Scan.bind();
		}

		public static ConfigEntry<T> Bind<T>(string Section, string Key, T defaultValue, object? min = null, object? max = null, bool RequireRestart = false, float step = 0f)
		{
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Expected O, but got Unknown
			//IL_00af: Expected O, but got Unknown
			//IL_00f2: 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_0120: Expected O, but got Unknown
			//IL_0120: Expected O, but got Unknown
			//IL_015a: 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_0188: Expected O, but got Unknown
			//IL_0188: Expected O, but got Unknown
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: Expected O, but got Unknown
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Expected O, but got Unknown
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Expected O, but got Unknown
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Expected O, but got Unknown
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Expected O, but got Unknown
			//IL_0314: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Expected O, but got Unknown
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Expected O, but got Unknown
			//IL_034b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0355: Expected O, but got Unknown
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Expected O, but got Unknown
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Expected O, but got Unknown
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Expected O, but got Unknown
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Expected O, but got Unknown
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Expected O, but got Unknown
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Expected O, but got Unknown
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Expected O, but got Unknown
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Expected O, but got Unknown
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: Expected O, but got Unknown
			try
			{
				if ((Object)(object)Plugin.Instance == (Object)null)
				{
					throw new Exception("Plugin is not Constructed");
				}
				if ((min != null && typeof(T) != min.GetType()) || (max != null && typeof(T) != max.GetType()))
				{
					throw new ArgumentException("INVALID MIN OR MAX VALUE TYPE");
				}
				bool flag = false;
				if (min != null && max != null)
				{
					flag = true;
				}
				ConfigEntry<T> val = ((BaseUnityPlugin)Plugin.Instance).Config.Bind<T>(new ConfigDefinition(Translation.Translate(Section), Translation.Translate(Key)), defaultValue, new ConfigDescription(Translation.Translate(Key, isDesc: true), (AcceptableValueBase)null, Array.Empty<object>()));
				if (flag)
				{
					if (typeof(T).IsEquivalentTo(typeof(int)))
					{
						val = ((BaseUnityPlugin)Plugin.Instance).Config.Bind<T>(new ConfigDefinition(Translation.Translate(Section), Translation.Translate(Key)), defaultValue, new ConfigDescription(Translation.Translate(Key, isDesc: true), (AcceptableValueBase)(object)new AcceptableValueRange<int>((int)min, (int)max), Array.Empty<object>()));
					}
					else if (typeof(T).IsEquivalentTo(typeof(float)))
					{
						val = ((BaseUnityPlugin)Plugin.Instance).Config.Bind<T>(new ConfigDefinition(Translation.Translate(Section), Translation.Translate(Key)), defaultValue, new ConfigDescription(Translation.Translate(Key, isDesc: true), (AcceptableValueBase)(object)new AcceptableValueRange<float>((float)min, (float)max), Array.Empty<object>()));
					}
				}
				if (Plugin.isLethalConfig)
				{
					if (typeof(T).IsEquivalentTo(typeof(int)))
					{
						if (flag)
						{
							ConfigEntry<int> obj = val as ConfigEntry<int>;
							IntSliderOptions val2 = new IntSliderOptions();
							((BaseRangeOptions<int>)val2).Min = (int)min;
							((BaseRangeOptions<int>)val2).Max = (int)max;
							((BaseOptions)val2).RequiresRestart = RequireRestart;
							LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj, val2));
						}
						else
						{
							LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(val as ConfigEntry<int>, RequireRestart));
						}
					}
					else if (typeof(T).IsEquivalentTo(typeof(float)))
					{
						if (flag)
						{
							if (step > 0f)
							{
								ConfigEntry<float> obj2 = val as ConfigEntry<float>;
								FloatStepSliderOptions val3 = new FloatStepSliderOptions();
								((BaseRangeOptions<float>)val3).Min = (float)min;
								((BaseRangeOptions<float>)val3).Max = (float)max;
								val3.Step = step;
								((BaseOptions)val3).RequiresRestart = RequireRestart;
								LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatStepSliderConfigItem(obj2, val3));
							}
							else
							{
								ConfigEntry<float> obj3 = val as ConfigEntry<float>;
								FloatSliderOptions val4 = new FloatSliderOptions();
								((BaseRangeOptions<float>)val4).Min = (float)min;
								((BaseRangeOptions<float>)val4).Max = (float)max;
								((BaseOptions)val4).RequiresRestart = RequireRestart;
								LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(obj3, val4));
							}
						}
						else
						{
							LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(val as ConfigEntry<float>, RequireRestart));
						}
					}
					else if (typeof(T).IsEquivalentTo(typeof(bool)))
					{
						LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(val as ConfigEntry<bool>, RequireRestart));
					}
					else if (typeof(T).IsEquivalentTo(typeof(string)))
					{
						LethalConfigManager.AddConfigItem((BaseConfigItem)new TextInputFieldConfigItem(val as ConfigEntry<string>, RequireRestart));
					}
					else if (typeof(T).IsEnum)
					{
						Type settingType = ((ConfigEntryBase)val).SettingType;
						Type type = typeof(EnumDropDownConfigItem<>).MakeGenericType(settingType);
						object obj4 = Activator.CreateInstance(type, val, RequireRestart);
						LethalConfigManager.AddConfigItem((BaseConfigItem)obj4);
					}
				}
				return val;
			}
			catch (Exception ex)
			{
				Plugin.LogError(ex.StackTrace);
				throw ex;
			}
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}