Decompiled source of Better Weapon HUDs v1.3.0

BetterWeaponHUDs.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BetterWeaponHUDs.Properties;
using HarmonyLib;
using JadeLib;
using JadeLib.PluginConfigurator;
using Microsoft.CodeAnalysis;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
using TMPro;
using ULTRAKILL.Cheats;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("BetterWeaponHUDs")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.3.0.0")]
[assembly: AssemblyInformationalVersion("1.3.0+53803f1bbb32d284dc23ece5bba25e41657bb549")]
[assembly: AssemblyProduct("BetterWeaponHUDs")]
[assembly: AssemblyTitle("BetterWeaponHUDs")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.3.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace BetterWeaponHUDs
{
	[HarmonyPatch]
	internal static class Patches
	{
		private static readonly Vector2 speedometerPos = new Vector2(-79f, 590f);

		private static readonly Vector2 altSpeedometerPos = new Vector2(-79f, 190f);

		[HarmonyPatch(typeof(HudController), "Awake")]
		[HarmonyPostfix]
		private static void HudController_Awake(HudController __instance)
		{
			Object.Instantiate<GameObject>(Plugin.Assets.LoadAsset<GameObject>("Gun Canvas"), ((Component)__instance).transform, false);
			__instance.textElements = CollectionExtensions.AddToArray<TMP_Text>(__instance.textElements, Object.Instantiate<GameObject>(Plugin.Assets.LoadAsset<GameObject>("Hard Damage"), ((Component)__instance).transform.Find("GunCanvas/StatsPanel/Filler/Panel (2)/Filler"), false).GetComponent<TMP_Text>());
		}

		[HarmonyPatch(typeof(HudController), "CheckSituation")]
		[HarmonyPostfix]
		private static void HudController_CheckSituation(HudController __instance)
		{
			//IL_0039: 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)
			if (!__instance.altHud)
			{
				RectTransform rect = __instance.speedometer.rect;
				if (rect != null && MonoSingleton<PrefsManager>.Instance.GetBool("weaponIcons", false))
				{
					rect.anchoredPosition = (Settings.AltIndicatorPosition ? altSpeedometerPos : speedometerPos);
				}
				Transform val = ((Component)__instance).transform.Find("Gun Canvas(Clone)");
				((Component)val).gameObject.SetActive(!HideUI.Active && MonoSingleton<PrefsManager>.Instance.GetInt("hudType", 0) == 1);
				Transform obj = ((Component)__instance).transform.Find("GunCanvas/StatsPanel/Filler/Panel (2)/Filler/Hard Damage(Clone)");
				if (obj != null)
				{
					((Component)obj).gameObject.SetActive(Settings.ShowHardDamageNumber);
				}
				__instance.weaponIcon.transform.SetParent(Settings.AltIndicatorPosition ? val : ((Component)__instance).transform.Find("GunCanvas"), false);
			}
		}

		[HarmonyPatch(typeof(RailcannonMeter), "CheckStatus")]
		[HarmonyPostfix]
		private static void RailcannonMeter_CheckStatus(RailcannonMeter __instance)
		{
			if (MonoSingleton<PrefsManager>.Instance.GetBool("weaponIcons", false) && (Settings.AltIndicatorPosition || Settings.ForceAltRailcannonCharge))
			{
				((Behaviour)__instance.self).enabled = false;
				__instance.miniVersion.SetActive(__instance.RailcannonStatus());
			}
		}

		[HarmonyPatch(typeof(Crosshair), "Start")]
		[HarmonyPrefix]
		private static void Crosshair_Start(Crosshair __instance)
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			Object.Instantiate<GameObject>(Plugin.Assets.LoadAsset<GameObject>("Railcannon Slider"), ((Component)__instance).transform.Find("PowerUpBar"), false);
			Transform obj = ((Component)__instance).transform.Find("PowerUpBar/HealthSliderAfterImage (2)");
			Transform obj2 = ((obj is RectTransform) ? obj : null);
			((RectTransform)obj2).sizeDelta = new Vector2(50f, 50f);
			((Component)obj2).GetComponent<Image>().fillClockwise = true;
			((Component)obj2).GetComponent<Image>().fillOrigin = 4;
		}

		[HarmonyPatch(typeof(Crosshair), "CheckCrossHair")]
		[HarmonyPostfix]
		private static void Crosshair_CheckCrossHair(Crosshair __instance)
		{
			if (Settings.UseAlternateCrosshair)
			{
				((Behaviour)__instance.mainch).enabled = false;
				Image[] altchs = __instance.altchs;
				for (int i = 0; i < altchs.Length; i++)
				{
					((Behaviour)altchs[i]).enabled = true;
				}
			}
		}

		[HarmonyPatch(typeof(StatsManager), "Update")]
		[HarmonyPostfix]
		private static void StatsManager_Update(StatsManager __instance)
		{
			//IL_0086: 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)
			GameObject crosshair = __instance.crosshair;
			object obj;
			if (crosshair == null)
			{
				obj = null;
			}
			else
			{
				Transform obj2 = crosshair.transform.Find("PowerUpBar/Railcannon Slider(Clone)");
				obj = ((obj2 != null) ? ((Component)obj2).GetComponent<Image>() : null);
			}
			Image val = (Image)obj;
			if (val != null && (((Behaviour)val).enabled = Settings.ShowRailcannonCharge))
			{
				val.fillAmount = Mathf.Lerp(0f, 0.5f, MonoSingleton<WeaponCharges>.Instance.raicharge / 4f);
				((Graphic)val).color = ((MonoSingleton<WeaponCharges>.Instance.raicharge >= 5f) ? MonoSingleton<ColorBlindSettings>.Instance.railcannonFullColor : MonoSingleton<ColorBlindSettings>.Instance.railcannonChargingColor);
			}
		}

		[HarmonyPatch(typeof(PowerUpMeter), "UpdateMeter")]
		[HarmonyPostfix]
		private static void PowerUpMeter_UpdateMeter(PowerUpMeter __instance)
		{
			if (Settings.ShowRailcannonCharge)
			{
				Image meter = __instance.meter;
				meter.fillAmount /= 2f;
			}
		}

		[HarmonyPatch(typeof(HUDOptions), "WeaponIcon")]
		[HarmonyPostfix]
		private static void HUDOptions_WeaponIcon(bool stuff)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			RectTransform val = HudController.Instance?.speedometer.rect;
			if (val != null && stuff)
			{
				val.anchoredPosition = (Settings.AltIndicatorPosition ? altSpeedometerPos : speedometerPos);
			}
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPostfix]
		private static void StyleHUD_set_rankIndex(StyleHUD __instance)
		{
			SetRankImage(__instance);
		}

		[HarmonyPatch(typeof(StyleHUD), "DescendRank")]
		[HarmonyPostfix]
		private static void StyleHUD_DescendRank(StyleHUD __instance)
		{
			SetRankImage(__instance);
		}

		private static void SetRankImage(StyleHUD __instance)
		{
			if (Settings.CustomStyleImages.Length > __instance.rankIndex)
			{
				Sprite val = Settings.CustomStyleImages[__instance.rankIndex];
				if (val != null)
				{
					__instance.rankImage.sprite = val;
				}
			}
		}
	}
	[BepInPlugin("BetterWeaponHUDs", "BetterWeaponHUDs", "1.3.0")]
	internal class Plugin : BaseUnityPlugin
	{
		public static readonly AssetBundle Assets = AssetBundle.LoadFromMemory(Resources.Assets);

		private GameObject FUPIndicator;

		private void Awake()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			Settings.Initialize();
			SceneManager.sceneLoaded += OnSceneLoaded;
			new Harmony("BetterWeaponHUDs").PatchAll();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin BetterWeaponHUDs is loaded!");
		}

		private void Update()
		{
			GameObject fUPIndicator = FUPIndicator;
			if (fUPIndicator != null)
			{
				int active;
				if (Settings.FUPAlert)
				{
					HookArm instance = MonoSingleton<HookArm>.Instance;
					active = ((instance != null && instance.caughtGrenade != null && instance.returning) ? 1 : 0);
				}
				else
				{
					active = 0;
				}
				fUPIndicator.SetActive((byte)active != 0);
			}
		}

		private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
		{
			if (!Object.op_Implicit((Object)(object)FUPIndicator))
			{
				GameObject obj = GameObject.Find("/Canvas");
				Transform val = ((obj != null) ? obj.transform : null);
				if (val != null)
				{
					FUPIndicator = Object.Instantiate<GameObject>(Assets.LoadAsset<GameObject>("FUP Indicator"), val, false);
				}
			}
		}
	}
	public static class Settings
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static PostBoolValueChangeEvent <>9__19_0;

			public static PostBoolValueChangeEvent <>9__19_1;

			public static PostBoolValueChangeEvent <>9__19_2;

			public static PostBoolValueChangeEvent <>9__19_3;

			internal void <Initialize>b__19_0(bool _)
			{
				HUDOptions instance = MonoSingleton<HUDOptions>.Instance;
				if (instance != null)
				{
					instance.crosshair.CheckCrossHair();
				}
			}

			internal void <Initialize>b__19_1(bool _)
			{
				HudController instance = HudController.Instance;
				if (instance != null)
				{
					instance.CheckSituation();
				}
			}

			internal void <Initialize>b__19_2(bool value)
			{
				((ConfigField)forceAltRailcannonCharge).interactable = !value;
				RailcannonMeter instance = MonoSingleton<RailcannonMeter>.Instance;
				if (instance != null)
				{
					instance.CheckStatus();
				}
				HudController instance2 = HudController.Instance;
				if (instance2 != null)
				{
					instance2.CheckSituation();
				}
			}

			internal void <Initialize>b__19_3(bool _)
			{
				RailcannonMeter instance = MonoSingleton<RailcannonMeter>.Instance;
				if (instance != null)
				{
					instance.CheckStatus();
				}
			}
		}

		private static BoolField useAlternateCrosshair;

		private static BoolField showRailcannonCharge;

		private static BoolField showHardDamageNumber;

		private static BoolField altIndicatorPosition;

		private static BoolField forceAltRailcannonCharge;

		private static BoolField fupAlert;

		public static readonly Sprite[] CustomStyleImages = (Sprite[])(object)new Sprite[8];

		public static bool UseAlternateCrosshair => useAlternateCrosshair.value;

		public static bool ShowRailcannonCharge
		{
			get
			{
				if (showRailcannonCharge.value)
				{
					return MonoSingleton<RailcannonMeter>.Instance.RailcannonStatus();
				}
				return false;
			}
		}

		public static bool ShowHardDamageNumber => showHardDamageNumber.value;

		public static bool AltIndicatorPosition => altIndicatorPosition.value;

		public static bool ForceAltRailcannonCharge => forceAltRailcannonCharge.value;

		public static bool FUPAlert => fupAlert.value;

		internal static void Initialize()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//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_00c5: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Expected O, but got Unknown
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Expected O, but got Unknown
			//IL_00de: 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_00e9: Expected O, but got Unknown
			//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_0160: Expected O, but got Unknown
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Expected O, but got Unknown
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: 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_0184: Expected O, but got Unknown
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Expected O, but got Unknown
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Expected O, but got Unknown
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Expected O, but got Unknown
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Expected O, but got Unknown
			PluginConfigurator val = PluginConfigurator.Create("BetterWeaponHUDs", "BetterWeaponHUDs");
			val.icon = Plugin.Assets.LoadAsset<Sprite>("Icon");
			new ConfigHeader(val.rootPanel, "CROSSHAIR HUD", 24);
			useAlternateCrosshair = new BoolField(val.rootPanel, "ALTERNATE CROSSHAIR", "use_alt_crosshair", false);
			BoolField obj = useAlternateCrosshair;
			object obj2 = <>c.<>9__19_0;
			if (obj2 == null)
			{
				PostBoolValueChangeEvent val2 = delegate
				{
					HUDOptions instance6 = MonoSingleton<HUDOptions>.Instance;
					if (instance6 != null)
					{
						instance6.crosshair.CheckCrossHair();
					}
				};
				<>c.<>9__19_0 = val2;
				obj2 = (object)val2;
			}
			obj.postValueChangeEvent += (PostBoolValueChangeEvent)obj2;
			showRailcannonCharge = new BoolField(val.rootPanel, "RAILCANNON CHARGE", "crosshair_rc_charge", false);
			new ConfigHeader(val.rootPanel, "STATUS HUD", 24);
			showHardDamageNumber = new BoolField(val.rootPanel, "HARD DAMAGE INDICATOR", "show_hard_damage", false);
			BoolField obj3 = showHardDamageNumber;
			object obj4 = <>c.<>9__19_1;
			if (obj4 == null)
			{
				PostBoolValueChangeEvent val3 = delegate
				{
					HudController instance5 = HudController.Instance;
					if (instance5 != null)
					{
						instance5.CheckSituation();
					}
				};
				<>c.<>9__19_1 = val3;
				obj4 = (object)val3;
			}
			obj3.postValueChangeEvent += (PostBoolValueChangeEvent)obj4;
			altIndicatorPosition = new BoolField(val.rootPanel, "ALTERNATE WEAPON ICON POSITION", "alt_equipped_indicator_pos", false);
			BoolField obj5 = altIndicatorPosition;
			object obj6 = <>c.<>9__19_2;
			if (obj6 == null)
			{
				PostBoolValueChangeEvent val4 = delegate(bool value)
				{
					((ConfigField)forceAltRailcannonCharge).interactable = !value;
					RailcannonMeter instance3 = MonoSingleton<RailcannonMeter>.Instance;
					if (instance3 != null)
					{
						instance3.CheckStatus();
					}
					HudController instance4 = HudController.Instance;
					if (instance4 != null)
					{
						instance4.CheckSituation();
					}
				};
				<>c.<>9__19_2 = val4;
				obj6 = (object)val4;
			}
			obj5.postValueChangeEvent += (PostBoolValueChangeEvent)obj6;
			forceAltRailcannonCharge = new BoolField(val.rootPanel, "FORCE ALTERNATE RAILCANNON DISPLAY", "force_alt_railcannon_charge", false)
			{
				interactable = !altIndicatorPosition.value
			};
			BoolField obj7 = forceAltRailcannonCharge;
			object obj8 = <>c.<>9__19_3;
			if (obj8 == null)
			{
				PostBoolValueChangeEvent val5 = delegate
				{
					RailcannonMeter instance2 = MonoSingleton<RailcannonMeter>.Instance;
					if (instance2 != null)
					{
						instance2.CheckStatus();
					}
				};
				<>c.<>9__19_3 = val5;
				obj8 = (object)val5;
			}
			obj7.postValueChangeEvent += (PostBoolValueChangeEvent)obj8;
			new ConfigHeader(val.rootPanel, "STYLE HUD", 24);
			new ConfigHeader(val.rootPanel, "CUSTOM STYLE RANK IMAGES", 16);
			new ConfigHeader(val.rootPanel, "MUST BE THE FULL PATH TO A .PNG .JPG OR .EXF FILE\nLEAVE BLANK TO USE DEFAULT IMAGE", 12);
			for (int i = 0; i < 8; i++)
			{
				string prevValue = "";
				int index = i;
				StringField stringField = new StringField(val.rootPanel, GenericExtensions.GetRankText(i, true), "customrankimages_" + i, "", true);
				SpriteField spriteField = new SpriteField(val.rootPanel, (Sprite)null);
				stringField.postValueChangeEvent += new PostStringValueChangeEvent(SetSpriteFromPath);
				SetSpriteFromPath(stringField.value);
				void SetSpriteFromPath(string path)
				{
					//IL_0026: Unknown result type (might be due to invalid IL or missing references)
					//IL_002c: Expected O, but got Unknown
					//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)
					if (Utility.IsNullOrWhiteSpace(path))
					{
						prevValue = "";
						spriteField.Sprite = null;
					}
					else
					{
						Texture2D val6 = new Texture2D(0, 0);
						if ((path.EndsWith(".png") || path.EndsWith(".jpg") || path.EndsWith(".exf")) && File.Exists(path) && ImageConversion.LoadImage(val6, File.ReadAllBytes(path)))
						{
							prevValue = path;
							spriteField.Sprite = Sprite.Create(val6, new Rect(0f, 0f, (float)((Texture)val6).width, (float)((Texture)val6).height), new Vector2(0.5f, 0.5f));
						}
						else
						{
							stringField.value = prevValue;
						}
					}
					CustomStyleImages[index] = spriteField.Sprite;
					StyleHUD instance = MonoSingleton<StyleHUD>.Instance;
					if (instance != null && index != instance.rankIndex)
					{
						instance.rankImage.sprite = spriteField.Sprite ?? instance.ranks[index].sprite;
					}
				}
			}
			new ConfigHeader(val.rootPanel, "OTHER", 24);
			fupAlert = new BoolField(val.rootPanel, "ROCKET WHIPLASH ALERT", "fup_alert", false);
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "BetterWeaponHUDs";

		public const string PLUGIN_NAME = "BetterWeaponHUDs";

		public const string PLUGIN_VERSION = "1.3.0";
	}
}
namespace BetterWeaponHUDs.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("BetterWeaponHUDs.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal static byte[] Assets => (byte[])ResourceManager.GetObject("Assets", resourceCulture);

		internal Resources()
		{
		}
	}
}