Decompiled source of RocketRideHUD v1.0.3

RocketRideHUD.dll

Decompiled 2 weeks 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 BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("RocketRideHUD")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+9e7a7cdc880ef395cc02d795ba156393b2307297")]
[assembly: AssemblyProduct("RocketRideHUD")]
[assembly: AssemblyTitle("RocketRideHUD")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace RocketRideHUD
{
	public class ConfigManager
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static PostEnumValueChangeEvent<WeaponHudAnchor> <>9__35_0;

			public static PostEnumValueChangeEvent<RocketAlignment> <>9__35_1;

			public static PostEnumValueChangeEvent<WeaponHudAnchor> <>9__35_2;

			public static PostEnumValueChangeEvent<CrosshairAlignment> <>9__35_3;

			public static PostBoolValueChangeEvent <>9__36_0;

			public static PostColorValueChangeEvent <>9__36_1;

			public static PostColorValueChangeEvent <>9__36_2;

			public static PostFloatValueChangeEvent <>9__36_3;

			public static PostColorValueChangeEvent <>9__36_4;

			public static PostColorValueChangeEvent <>9__36_5;

			public static PostFloatValueChangeEvent <>9__36_6;

			public static PostFloatValueChangeEvent <>9__36_7;

			public static PostFloatValueChangeEvent <>9__36_8;

			public static PostFloatValueChangeEvent <>9__36_9;

			public static PostColorValueChangeEvent <>9__36_10;

			public static PostColorValueChangeEvent <>9__36_11;

			internal void <addDisplayOptions>b__35_0(WeaponHudAnchor newValue)
			{
				if (!((Object)(object)RocketCrosshairController.Instance == (Object)null))
				{
					RocketRideWeaponController.Instance.UpdateAlignment(newValue);
					WallJumpWeaponController.Instance.UpdateAlignment(weaponWallJumpAlignment.value);
				}
			}

			internal void <addDisplayOptions>b__35_1(RocketAlignment e)
			{
				if (!((Object)(object)RocketCrosshairController.Instance == (Object)null))
				{
					RocketCrosshairController.Instance.UpdateRideIndicators(e);
					RocketCrosshairController.Instance.SetRocketIndicatorsActive(e != RocketAlignment.Hidden);
				}
			}

			internal void <addDisplayOptions>b__35_2(WeaponHudAnchor newValue)
			{
				if (!((Object)(object)WallJumpWeaponController.Instance == (Object)null))
				{
					WallJumpWeaponController.Instance.UpdateAlignment(newValue);
				}
			}

			internal void <addDisplayOptions>b__35_3(CrosshairAlignment e)
			{
				if ((Object)(object)WallJumpCrosshairController.Instance != (Object)null)
				{
					WallJumpCrosshairController.Instance.SetIconsRotation(e);
					if ((Object)(object)MonoSingleton<PowerUpMeter>.Instance != (Object)null && MonoSingleton<PowerUpMeter>.Instance.latestMaxJuice > 0f)
					{
						WallJumpCrosshairController.Instance.OnPowerUpStarted();
					}
					WallJumpCrosshairController.Instance.SetIconsActive(e != CrosshairAlignment.Hidden);
				}
			}

			internal void <addCustomizationOptions>b__36_0(bool e)
			{
				if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
				{
					RocketRideWeaponController.Instance.UpdateColor();
				}
				if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
				{
					WallJumpWeaponController.Instance.UpdateColor();
				}
			}

			internal void <addCustomizationOptions>b__36_1(Color e)
			{
				if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
				{
					RocketRideWeaponController.Instance.UpdateColor();
				}
				if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
				{
					WallJumpWeaponController.Instance.UpdateColor();
				}
			}

			internal void <addCustomizationOptions>b__36_2(Color e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsColor();
				}
			}

			internal void <addCustomizationOptions>b__36_3(float e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsColor();
				}
			}

			internal void <addCustomizationOptions>b__36_4(Color e)
			{
				if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
				{
					RocketRideWeaponController.Instance.UpdateColor();
				}
			}

			internal void <addCustomizationOptions>b__36_5(Color e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsColor();
				}
			}

			internal void <addCustomizationOptions>b__36_6(float e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsThickness(e);
				}
			}

			internal void <addCustomizationOptions>b__36_7(float e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketOffset(e);
				}
			}

			internal void <addCustomizationOptions>b__36_8(float e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsDash(e);
				}
			}

			internal void <addCustomizationOptions>b__36_9(float e)
			{
				if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
				{
					RocketCrosshairController.Instance.SetRocketIndicatorsGap(e);
				}
			}

			internal void <addCustomizationOptions>b__36_10(Color e)
			{
				if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
				{
					WallJumpWeaponController.Instance.UpdateColor();
				}
			}

			internal void <addCustomizationOptions>b__36_11(Color e)
			{
				if ((Object)(object)WallJumpCrosshairController.Instance != (Object)null)
				{
					WallJumpCrosshairController.Instance.UpdateColor();
				}
			}
		}

		public static PluginConfigurator config = null;

		public static BoolField distinctDangerColor;

		public static ColorField dangerColor;

		public static EnumField<WeaponHudAnchor> weaponWallJumpAlignment;

		public static ColorField weaponWallJumpColor;

		public static EnumField<CrosshairAlignment> crosshairWallJumpAlignment;

		public static ColorField crosshairWallJumpColor;

		public static EnumField<WeaponHudAnchor> weaponRocketAlignment;

		public static ColorField weaponRocketColor;

		public static ColorField crosshairRocketColor;

		public static ColorField usedColor;

		public static FloatField usedColorOpacity;

		public static BoolField crosshairRocketFuelShow;

		public static ColorField crosshairRocketFuelColor;

		public static FloatField crosshairRocketFuelOffset;

		public static FloatField crosshairRocketFuelWidth;

		public static FloatField crosshairRocketFuelOverstay;

		public static EnumField<RocketAlignment> crosshairRocketAlignment;

		public static FloatField crosshairRocketOffset;

		public static FloatField crosshairRocketThickness;

		public static FloatField crosshairRocketDash;

		public static FloatField crosshairRocketGap;

		public static EnumField<PitchShowCondition> crosshairRocketPitchVisibility;

		public static FloatField crosshairRocketPitchMin;

		public static FloatField crosshairRocketPitchMax;

		public static FloatField crosshairRocketPitchSensitivity;

		public static ColorField crosshairRocketPitchColor;

		public static FloatField crosshairRocketPitchWidth;

		public static FloatField crosshairRocketPitchThickness;

		private static int h1 = 24;

		private static int h2 = 16;

		private static int subtitle = 12;

		private static int h1Gap = 20;

		private static int h2Gap = 12;

		private static ConfigHeader addGap(ConfigPanel panel, int size = 15)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			return new ConfigHeader(panel, "", size);
		}

		private static void addDisplayOptions()
		{
			//IL_0029: 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_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Expected O, but got Unknown
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			addGap(config.rootPanel, h1Gap);
			new ConfigHeader(config.rootPanel, "-- DISPLAY --", h1);
			new ConfigHeader(config.rootPanel, "Weapon HUD indicators only available on standard style", subtitle);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Rocket rides", h2, (TextAlignmentOptions)513);
			weaponRocketAlignment = new EnumField<WeaponHudAnchor>(config.rootPanel, "Weapon HUD number", "weaponRocketAlignment", WeaponHudAnchor.ShowTopLeft);
			weaponRocketAlignment.postValueChangeEvent += delegate(WeaponHudAnchor newValue)
			{
				if (!((Object)(object)RocketCrosshairController.Instance == (Object)null))
				{
					RocketRideWeaponController.Instance.UpdateAlignment(newValue);
					WallJumpWeaponController.Instance.UpdateAlignment(weaponWallJumpAlignment.value);
				}
			};
			crosshairRocketAlignment = new EnumField<RocketAlignment>(config.rootPanel, "Crosshair indicator", "crosshairRocketAlignment", RocketAlignment.Bottom);
			crosshairRocketAlignment.postValueChangeEvent += delegate(RocketAlignment e)
			{
				if (!((Object)(object)RocketCrosshairController.Instance == (Object)null))
				{
					RocketCrosshairController.Instance.UpdateRideIndicators(e);
					RocketCrosshairController.Instance.SetRocketIndicatorsActive(e != RocketAlignment.Hidden);
				}
			};
			crosshairRocketFuelShow = new BoolField(config.rootPanel, "Show fuel bar", "crosshairRocketFuelShow", true);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Freezeframe rocket ride angle hint", h2, (TextAlignmentOptions)513);
			crosshairRocketPitchVisibility = new EnumField<PitchShowCondition>(config.rootPanel, "Show when", "rocketPitchVisibility", PitchShowCondition.HoldingFreezeframe);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Wall jumps", h2, (TextAlignmentOptions)513);
			weaponWallJumpAlignment = new EnumField<WeaponHudAnchor>(config.rootPanel, "Weapon HUD number", "weaponWallJumpAlignment", WeaponHudAnchor.Hidden);
			weaponWallJumpAlignment.postValueChangeEvent += delegate(WeaponHudAnchor newValue)
			{
				if (!((Object)(object)WallJumpWeaponController.Instance == (Object)null))
				{
					WallJumpWeaponController.Instance.UpdateAlignment(newValue);
				}
			};
			crosshairWallJumpAlignment = new EnumField<CrosshairAlignment>(config.rootPanel, "Crosshair indicator", "crosshairAlignment", CrosshairAlignment.Hidden);
			crosshairWallJumpAlignment.postValueChangeEvent += delegate(CrosshairAlignment e)
			{
				if ((Object)(object)WallJumpCrosshairController.Instance != (Object)null)
				{
					WallJumpCrosshairController.Instance.SetIconsRotation(e);
					if ((Object)(object)MonoSingleton<PowerUpMeter>.Instance != (Object)null && MonoSingleton<PowerUpMeter>.Instance.latestMaxJuice > 0f)
					{
						WallJumpCrosshairController.Instance.OnPowerUpStarted();
					}
					WallJumpCrosshairController.Instance.SetIconsActive(e != CrosshairAlignment.Hidden);
				}
			};
		}

		private static void addCustomizationOptions()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			//IL_00cb: 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_00da: Expected O, but got Unknown
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Expected O, but got Unknown
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Expected O, but got Unknown
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Expected O, but got Unknown
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Expected O, but got Unknown
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Expected O, but got Unknown
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Expected O, but got Unknown
			//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_01a5: Expected O, but got Unknown
			//IL_025c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_026b: Expected O, but got Unknown
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Expected O, but got Unknown
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Expected O, but got Unknown
			//IL_0284: Unknown result type (might be due to invalid IL or missing references)
			//IL_0289: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Expected O, but got Unknown
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Expected O, but got Unknown
			//IL_0345: Unknown result type (might be due to invalid IL or missing references)
			//IL_034f: Expected O, but got Unknown
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Expected O, but got Unknown
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Expected O, but got Unknown
			//IL_0368: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0373: Expected O, but got Unknown
			//IL_03e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Expected O, but got Unknown
			//IL_040f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Expected O, but got Unknown
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Expected O, but got Unknown
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_0498: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a2: Expected O, but got Unknown
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c5: Expected O, but got Unknown
			//IL_04de: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e8: Expected O, but got Unknown
			//IL_0516: Unknown result type (might be due to invalid IL or missing references)
			//IL_0530: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_053f: Expected O, but got Unknown
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Expected O, but got Unknown
			//IL_057c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0581: Unknown result type (might be due to invalid IL or missing references)
			//IL_058b: Expected O, but got Unknown
			//IL_0558: Unknown result type (might be due to invalid IL or missing references)
			//IL_055d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0563: Expected O, but got Unknown
			//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05af: Expected O, but got Unknown
			addGap(config.rootPanel, h1Gap);
			new ConfigHeader(config.rootPanel, "-- CUSTOMIZATION --", 24);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// General", h2, (TextAlignmentOptions)513);
			distinctDangerColor = new BoolField(config.rootPanel, "Danger color", "distinctDangerColor", true);
			BoolField obj = distinctDangerColor;
			object obj2 = <>c.<>9__36_0;
			if (obj2 == null)
			{
				PostBoolValueChangeEvent val = delegate
				{
					if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
					{
						RocketRideWeaponController.Instance.UpdateColor();
					}
					if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
					{
						WallJumpWeaponController.Instance.UpdateColor();
					}
				};
				<>c.<>9__36_0 = val;
				obj2 = (object)val;
			}
			obj.postValueChangeEvent += (PostBoolValueChangeEvent)obj2;
			dangerColor = new ColorField(config.rootPanel, "Danger color", "dangerColor", new Color(1f, 0.17254902f, 0.17254902f));
			ColorField obj3 = dangerColor;
			object obj4 = <>c.<>9__36_1;
			if (obj4 == null)
			{
				PostColorValueChangeEvent val2 = delegate
				{
					if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
					{
						RocketRideWeaponController.Instance.UpdateColor();
					}
					if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
					{
						WallJumpWeaponController.Instance.UpdateColor();
					}
				};
				<>c.<>9__36_1 = val2;
				obj4 = (object)val2;
			}
			obj3.postValueChangeEvent += (PostColorValueChangeEvent)obj4;
			usedColor = new ColorField(config.rootPanel, "Used color", "usedColor", new Color(1f, 1f, 1f));
			ColorField obj5 = usedColor;
			object obj6 = <>c.<>9__36_2;
			if (obj6 == null)
			{
				PostColorValueChangeEvent val3 = delegate
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsColor();
					}
				};
				<>c.<>9__36_2 = val3;
				obj6 = (object)val3;
			}
			obj5.postValueChangeEvent += (PostColorValueChangeEvent)obj6;
			usedColorOpacity = new FloatField(config.rootPanel, "Used color opacity", "usedOpacity", 0.4f);
			FloatField obj7 = usedColorOpacity;
			object obj8 = <>c.<>9__36_3;
			if (obj8 == null)
			{
				PostFloatValueChangeEvent val4 = delegate
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsColor();
					}
				};
				<>c.<>9__36_3 = val4;
				obj8 = (object)val4;
			}
			obj7.postValueChangeEvent += (PostFloatValueChangeEvent)obj8;
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Rocket rides", h2, (TextAlignmentOptions)513);
			weaponRocketColor = new ColorField(config.rootPanel, "Weapon HUD indicator", "weaponRocketColor", new Color(1f, 0.5019608f, 0.22745098f));
			ColorField obj9 = weaponRocketColor;
			object obj10 = <>c.<>9__36_4;
			if (obj10 == null)
			{
				PostColorValueChangeEvent val5 = delegate
				{
					if ((Object)(object)RocketRideWeaponController.Instance != (Object)null)
					{
						RocketRideWeaponController.Instance.UpdateColor();
					}
				};
				<>c.<>9__36_4 = val5;
				obj10 = (object)val5;
			}
			obj9.postValueChangeEvent += (PostColorValueChangeEvent)obj10;
			crosshairRocketColor = new ColorField(config.rootPanel, "Crosshair: rides", "crosshairRocketColor", new Color(1f, 0.5019608f, 0.22745098f));
			ColorField obj11 = crosshairRocketColor;
			object obj12 = <>c.<>9__36_5;
			if (obj12 == null)
			{
				PostColorValueChangeEvent val6 = delegate
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsColor();
					}
				};
				<>c.<>9__36_5 = val6;
				obj12 = (object)val6;
			}
			obj11.postValueChangeEvent += (PostColorValueChangeEvent)obj12;
			crosshairRocketThickness = new FloatField(config.rootPanel, "Line thickness", "crosshairRocketThickness", 4f);
			FloatField obj13 = crosshairRocketThickness;
			object obj14 = <>c.<>9__36_6;
			if (obj14 == null)
			{
				PostFloatValueChangeEvent val7 = delegate(float e)
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsThickness(e);
					}
				};
				<>c.<>9__36_6 = val7;
				obj14 = (object)val7;
			}
			obj13.postValueChangeEvent += (PostFloatValueChangeEvent)obj14;
			crosshairRocketOffset = new FloatField(config.rootPanel, "Crosshair: Rides offset", "crosshairRocketOffset", 40f);
			FloatField obj15 = crosshairRocketOffset;
			object obj16 = <>c.<>9__36_7;
			if (obj16 == null)
			{
				PostFloatValueChangeEvent val8 = delegate(float e)
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketOffset(e);
					}
				};
				<>c.<>9__36_7 = val8;
				obj16 = (object)val8;
			}
			obj15.postValueChangeEvent += (PostFloatValueChangeEvent)obj16;
			crosshairRocketDash = new FloatField(config.rootPanel, "Crosshair: Dash length", "crosshairRocketDash", 18f);
			FloatField obj17 = crosshairRocketDash;
			object obj18 = <>c.<>9__36_8;
			if (obj18 == null)
			{
				PostFloatValueChangeEvent val9 = delegate(float e)
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsDash(e);
					}
				};
				<>c.<>9__36_8 = val9;
				obj18 = (object)val9;
			}
			obj17.postValueChangeEvent += (PostFloatValueChangeEvent)obj18;
			crosshairRocketGap = new FloatField(config.rootPanel, "Crosshair: Gap length", "crosshairRocketGap", -3f);
			FloatField obj19 = crosshairRocketGap;
			object obj20 = <>c.<>9__36_9;
			if (obj20 == null)
			{
				PostFloatValueChangeEvent val10 = delegate(float e)
				{
					if ((Object)(object)RocketCrosshairController.Instance != (Object)null)
					{
						RocketCrosshairController.Instance.SetRocketIndicatorsGap(e);
					}
				};
				<>c.<>9__36_9 = val10;
				obj20 = (object)val10;
			}
			obj19.postValueChangeEvent += (PostFloatValueChangeEvent)obj20;
			crosshairRocketFuelColor = new ColorField(config.rootPanel, "Fuel bar color", "crosshairRocketFuelColor", new Color(1f, 0.5019608f, 0.22745098f));
			crosshairRocketFuelOffset = new FloatField(config.rootPanel, "Fuel bar offset", "crosshairRocketFuelOffset", 48f);
			crosshairRocketFuelWidth = new FloatField(config.rootPanel, "Fuel bar width", "crosshairRocketFuelWidth", 108f);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Freezeframe rocket ride angle hint", h2, (TextAlignmentOptions)513);
			crosshairRocketPitchColor = new ColorField(config.rootPanel, "Color", "rocketPitchColor", new Color(0.2509804f, 0.9098039f, 1f));
			crosshairRocketPitchWidth = new FloatField(config.rootPanel, "Line length", "rocketPitchWidth", 150f);
			crosshairRocketPitchThickness = new FloatField(config.rootPanel, "Line thickness", "rocketPitchThickness", 2f);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Wall jumps", h2, (TextAlignmentOptions)513);
			weaponWallJumpColor = new ColorField(config.rootPanel, "Weapon HUD", "weaponColor", Color.white);
			ColorField obj21 = weaponWallJumpColor;
			object obj22 = <>c.<>9__36_10;
			if (obj22 == null)
			{
				PostColorValueChangeEvent val11 = delegate
				{
					if ((Object)(object)WallJumpWeaponController.Instance != (Object)null)
					{
						WallJumpWeaponController.Instance.UpdateColor();
					}
				};
				<>c.<>9__36_10 = val11;
				obj22 = (object)val11;
			}
			obj21.postValueChangeEvent += (PostColorValueChangeEvent)obj22;
			crosshairWallJumpColor = new ColorField(config.rootPanel, "Crosshair indicator", "crosshairColor", Color.white);
			ColorField obj23 = crosshairWallJumpColor;
			object obj24 = <>c.<>9__36_11;
			if (obj24 == null)
			{
				PostColorValueChangeEvent val12 = delegate
				{
					if ((Object)(object)WallJumpCrosshairController.Instance != (Object)null)
					{
						WallJumpCrosshairController.Instance.UpdateColor();
					}
				};
				<>c.<>9__36_11 = val12;
				obj24 = (object)val12;
			}
			obj23.postValueChangeEvent += (PostColorValueChangeEvent)obj24;
		}

		private static void addAdvancedOptions()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Expected O, but got Unknown
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Expected O, but got Unknown
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Expected O, but got Unknown
			addGap(config.rootPanel, h1Gap);
			new ConfigHeader(config.rootPanel, "-- ADVANCED --", 24);
			new ConfigHeader(config.rootPanel, "Values are approximations based on the mod author's personal testing. Real-world effectiveness can vary depending on timing/reaction. For example, to do a Freezeframe ride, you might need to unfreeze later if you aim lower", subtitle, (TextAlignmentOptions)513);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Rocket rides", h2, (TextAlignmentOptions)513);
			crosshairRocketFuelOverstay = new FloatField(config.rootPanel, "Empty fuel downpull threshold", "crosshairRocketFuelOverstay", 0.1f);
			addGap(config.rootPanel, h2Gap);
			new ConfigHeader(config.rootPanel, "// Freezeframe rocket ride angle hint", h2, (TextAlignmentOptions)513);
			crosshairRocketPitchMin = new FloatField(config.rootPanel, "Minimum pitch (degrees)", "rocketPitchMin", 7f);
			crosshairRocketPitchMax = new FloatField(config.rootPanel, "Maximum pitch (degrees)", "rocketPitchMax", 35f);
			crosshairRocketPitchSensitivity = new FloatField(config.rootPanel, "Visual sensitivity (px/degree)", "rocketPitchSensitivity", 6f);
		}

		public static void Init()
		{
			if (config == null)
			{
				config = PluginConfigurator.Create("Rocket Ride HUD", "com.github.end-4.rocketRideHud");
				string text = Path.Combine(Core.workingDir, "icon.png");
				if (File.Exists(text))
				{
					config.SetIconWithURL(text);
				}
				addDisplayOptions();
				addCustomizationOptions();
				addAdvancedOptions();
			}
		}
	}
	[BepInPlugin("com.github.end-4.rocketRideHud", "RocketRideHUD", "1.0.3")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Core : BaseUnityPlugin
	{
		public const string PluginGUID = "com.github.end-4.rocketRideHud";

		public const string PluginName = "RocketRideHUD";

		public const string PluginVersion = "1.0.3";

		public static string workingPath;

		public static string workingDir;

		public static ManualLogSource Logger = Logger.CreateLogSource("RocketRideHUD");

		public static int MaxWalljumps => 3;

		public static int MaxRocketRides => 5;

		private void Awake()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			new Harmony("RocketRideHUD").PatchAll();
			workingPath = Assembly.GetExecutingAssembly().Location;
			workingDir = Path.GetDirectoryName(workingPath);
			ConfigManager.Init();
		}
	}
	public enum Direction
	{
		Normal,
		Reverse
	}
	public enum CrosshairAlignment
	{
		Hidden,
		Top,
		Left,
		Right,
		Bottom
	}
	public enum RocketAlignment
	{
		Hidden,
		Top,
		Bottom
	}
	public enum PitchShowCondition
	{
		Never,
		Always,
		HoldingRocketLauncher,
		HoldingFreezeframe
	}
	public enum WeaponHudAnchor
	{
		Hidden,
		ShowInside,
		ShowTopLeft,
		ShowTopRight,
		ShowBottom,
		ShowLeft,
		ShowRight
	}
	public class NewMovementListener : MonoBehaviour
	{
		public delegate void OnWallJumpsChangedDelegate(int number);

		public delegate void OnRocketRideCountChangedDelegate(int count);

		public delegate void OnRocketFuelChangedDelegate(float fuelAmount);

		public delegate void OnRidingRocketChangedDelegate(bool isRiding);

		private NewMovement nm;

		private int previousWallJumps;

		private int previousRocketRideCount = Core.MaxRocketRides;

		private bool previousRidingRocket;

		public static NewMovementListener Instance { get; private set; }

		public static event OnWallJumpsChangedDelegate OnWallJumpsChanged;

		public static event OnRocketRideCountChangedDelegate OnRocketRideCountChanged;

		public static event OnRocketFuelChangedDelegate OnRocketFuelChanged;

		public static event OnRidingRocketChangedDelegate OnRidingRocketChanged;

		private void Awake()
		{
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
				nm = MonoSingleton<NewMovement>.Instance;
				previousWallJumps = nm.currentWallJumps;
				previousRocketRideCount = nm.rocketRides;
			}
		}

		private void Update()
		{
			if ((Object)(object)nm == (Object)null)
			{
				return;
			}
			if (previousWallJumps != nm.currentWallJumps)
			{
				if (NewMovementListener.OnWallJumpsChanged != null)
				{
					NewMovementListener.OnWallJumpsChanged(Core.MaxWalljumps - nm.currentWallJumps);
				}
				previousWallJumps = nm.currentWallJumps;
			}
			int rocketRides = nm.rocketRides;
			if (rocketRides >= 0 && rocketRides != previousRocketRideCount)
			{
				if (NewMovementListener.OnRocketRideCountChanged != null)
				{
					NewMovementListener.OnRocketRideCountChanged(rocketRides);
				}
				previousRocketRideCount = rocketRides;
			}
			bool flag = (Object)(object)nm.ridingRocket != (Object)null;
			if (previousRidingRocket != flag)
			{
				NewMovementListener.OnRidingRocketChanged(flag);
				previousRidingRocket = flag;
			}
			if (flag)
			{
				float value = Traverse.Create((object)nm.ridingRocket).Field<float>("downpull").Value;
				float fuelAmount = Mathf.InverseLerp(ConfigManager.crosshairRocketFuelOverstay.value, -0.5f, value);
				if (NewMovementListener.OnRocketFuelChanged != null)
				{
					NewMovementListener.OnRocketFuelChanged(fuelAmount);
				}
			}
			else if (NewMovementListener.OnRocketFuelChanged != null)
			{
				NewMovementListener.OnRocketFuelChanged(0f);
			}
		}
	}
	public class PowerUpMeterListener : MonoBehaviour
	{
		public delegate void OnPowerUpStartedDelegate();

		public delegate void OnPowerUpEndedDelegate();

		private float previous;

		public static PowerUpMeterListener Instance { get; private set; }

		public static event OnPowerUpStartedDelegate OnPowerUpStarted;

		public static event OnPowerUpEndedDelegate OnPowerUpEnded;

		private void Awake()
		{
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
				previous = 0f;
			}
		}

		private void Update()
		{
			if (previous == 0f && previous < MonoSingleton<PowerUpMeter>.Instance.latestMaxJuice)
			{
				if (PowerUpMeterListener.OnPowerUpStarted != null)
				{
					PowerUpMeterListener.OnPowerUpStarted();
				}
			}
			else if (previous > 0f && MonoSingleton<PowerUpMeter>.Instance.latestMaxJuice == 0f && PowerUpMeterListener.OnPowerUpEnded != null)
			{
				PowerUpMeterListener.OnPowerUpEnded();
			}
			previous = MonoSingleton<PowerUpMeter>.Instance.latestMaxJuice;
		}
	}
	public class RocketCrosshairController : MonoBehaviour
	{
		private Image[] segments;

		private Sprite segmentSprite;

		private int segmentCount = Core.MaxRocketRides;

		private float dashLength;

		private float gapLength;

		private float thickness;

		private int lastRidesSoFar;

		private bool lastRiding;

		private float lastFuel = 1f;

		private Image upperPitchLine;

		private Image lowerPitchLine;

		private Image fuelBar;

		private Image fuelBarBackground;

		public float time = 2f;

		public float maxTime = 2f;

		public float minTime;

		private float opacityMultiplier;

		private NewMovement nm;

		private float offset = ConfigManager.crosshairRocketOffset.value;

		public static RocketCrosshairController Instance { get; private set; }

		private void Awake()
		{
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
			}
		}

		private void Start()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: 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_005d: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Expected O, but got Unknown
			//IL_00ee: 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_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: 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_0180: 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_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject("RocketSegments");
			val.layer = 5;
			val.transform.SetParent(((Component)this).transform);
			RectTransform obj = val.AddComponent<RectTransform>();
			obj.pivot = new Vector2(0.5f, 0.5f);
			Vector2 val2 = default(Vector2);
			((Vector2)(ref val2))..ctor(0.5f, 0.5f);
			obj.anchorMax = val2;
			obj.anchorMin = val2;
			obj.anchoredPosition = Vector2.zero;
			val.transform.localScale = Vector3.one;
			if (ConfigManager.crosshairRocketDash != null)
			{
				dashLength = ConfigManager.crosshairRocketDash.value;
			}
			if (ConfigManager.crosshairRocketGap != null)
			{
				gapLength = ConfigManager.crosshairRocketGap.value;
			}
			if (ConfigManager.crosshairRocketThickness != null)
			{
				thickness = ConfigManager.crosshairRocketThickness.value;
			}
			if (ConfigManager.crosshairRocketOffset != null)
			{
				offset = ConfigManager.crosshairRocketOffset.value;
			}
			Texture2D val3 = new Texture2D(1, 1, (TextureFormat)5, false);
			((Texture)val3).filterMode = (FilterMode)0;
			((Texture)val3).wrapMode = (TextureWrapMode)1;
			val3.SetPixel(0, 0, Color.white);
			val3.Apply(false, false);
			segmentSprite = Sprite.Create(val3, new Rect(0f, 0f, 1f, 1f), new Vector2(0.5f, 0.5f), 100f);
			((Texture)segmentSprite.texture).filterMode = (FilterMode)0;
			segments = (Image[])(object)new Image[segmentCount];
			for (int i = 0; i < segmentCount; i++)
			{
				GameObject val4 = new GameObject($"Seg{i + 1}")
				{
					layer = 5
				};
				val4.transform.SetParent(val.transform);
				Image val5 = val4.AddComponent<Image>();
				val5.sprite = segmentSprite;
				val5.type = (Type)0;
				val5.preserveAspect = false;
				((Graphic)val5).color = ConfigManager.crosshairRocketColor.value;
				RectTransform rectTransform = ((Graphic)val5).rectTransform;
				rectTransform.pivot = new Vector2(0.5f, 0.5f);
				((Vector2)(ref val2))..ctor(0.5f, 0.5f);
				rectTransform.anchorMax = val2;
				rectTransform.anchorMin = val2;
				rectTransform.sizeDelta = new Vector2(dashLength, thickness);
				rectTransform.anchoredPosition = Vector2.zero;
				segments[i] = val5;
			}
			upperPitchLine = CreatePitchLine(val.transform, "UpperPitch");
			lowerPitchLine = CreatePitchLine(val.transform, "LowerPitch");
			fuelBarBackground = CreatePitchLine(val.transform, "FuelBarBackground");
			fuelBar = CreatePitchLine(val.transform, "FuelBar");
			UpdateRideIndicators(ConfigManager.crosshairRocketAlignment.value);
			SetRocketIndicatorsColor();
			SetRocketIndicatorsActive(ConfigManager.crosshairRocketAlignment.value != RocketAlignment.Hidden);
			nm = MonoSingleton<NewMovement>.Instance;
			NewMovementListener.OnRocketRideCountChanged += UpdateRocketIndicators;
			NewMovementListener.OnRocketFuelChanged += UpdateFuelBar;
			NewMovementListener.OnRidingRocketChanged += UpdateFuelBar;
		}

		private Image CreatePitchLine(Transform parent, string name)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = new GameObject(name)
			{
				layer = 5
			};
			val.transform.SetParent(parent);
			Image obj = val.AddComponent<Image>();
			obj.sprite = segmentSprite;
			RectTransform rectTransform = ((Graphic)obj).rectTransform;
			rectTransform.pivot = new Vector2(0.5f, 0.5f);
			Vector2 val2 = default(Vector2);
			((Vector2)(ref val2))..ctor(0.5f, 0.5f);
			rectTransform.anchorMax = val2;
			rectTransform.anchorMin = val2;
			rectTransform.sizeDelta = Vector2.zero;
			return obj;
		}

		private void OnDestroy()
		{
			NewMovementListener.OnRocketRideCountChanged -= UpdateRocketIndicators;
			NewMovementListener.OnRocketFuelChanged -= UpdateFuelBar;
		}

		private void UpdateFreezeframeHint()
		{
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: 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_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_025c: 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_0264: Unknown result type (might be due to invalid IL or missing references)
			bool flag = false;
			switch (ConfigManager.crosshairRocketPitchVisibility.value)
			{
			case PitchShowCondition.Never:
				flag = false;
				break;
			case PitchShowCondition.Always:
				flag = true;
				break;
			case PitchShowCondition.HoldingRocketLauncher:
				if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null && (Object)(object)MonoSingleton<GunControl>.Instance.currentWeapon != (Object)null)
				{
					flag = (Object)(object)MonoSingleton<GunControl>.Instance.currentWeapon.GetComponent<RocketLauncher>() != (Object)null;
				}
				break;
			case PitchShowCondition.HoldingFreezeframe:
				if ((Object)(object)MonoSingleton<GunControl>.Instance != (Object)null && (Object)(object)MonoSingleton<GunControl>.Instance.currentWeapon != (Object)null)
				{
					RocketLauncher component = MonoSingleton<GunControl>.Instance.currentWeapon.GetComponent<RocketLauncher>();
					flag = (Object)(object)component != (Object)null && component.variation == 0;
				}
				break;
			}
			if ((Object)(object)nm == (Object)null || (Object)(object)upperPitchLine == (Object)null || !flag)
			{
				if ((Object)(object)upperPitchLine != (Object)null)
				{
					((Component)upperPitchLine).gameObject.SetActive(false);
				}
				if ((Object)(object)lowerPitchLine != (Object)null)
				{
					((Component)lowerPitchLine).gameObject.SetActive(false);
				}
				return;
			}
			float num = ((Component)nm.cc.cam).transform.localEulerAngles.x;
			if (num > 180f)
			{
				num -= 360f;
			}
			float value = ConfigManager.crosshairRocketPitchMin.value;
			float value2 = ConfigManager.crosshairRocketPitchMax.value;
			float num2 = ConfigManager.crosshairRocketPitchSensitivity.value * (180f / (float)Math.PI);
			float num3 = (num - value) * ((float)Math.PI / 180f);
			float num4 = (num - value2) * ((float)Math.PI / 180f);
			((Component)upperPitchLine).gameObject.SetActive(Mathf.Abs(num3) < 1.5f);
			((Component)lowerPitchLine).gameObject.SetActive(Mathf.Abs(num4) < 1.5f);
			((Graphic)upperPitchLine).rectTransform.anchoredPosition = new Vector2(0f, Mathf.Tan(num3) * num2);
			((Graphic)lowerPitchLine).rectTransform.anchoredPosition = new Vector2(0f, Mathf.Tan(num4) * num2);
			Image obj = upperPitchLine;
			Color color = (((Graphic)lowerPitchLine).color = ConfigManager.crosshairRocketPitchColor.value);
			((Graphic)obj).color = color;
			Vector2 val = default(Vector2);
			((Vector2)(ref val))..ctor(ConfigManager.crosshairRocketPitchWidth.value, ConfigManager.crosshairRocketPitchThickness.value);
			RectTransform rectTransform = ((Graphic)upperPitchLine).rectTransform;
			Vector2 sizeDelta = (((Graphic)lowerPitchLine).rectTransform.sizeDelta = val);
			rectTransform.sizeDelta = sizeDelta;
		}

		private void UpdateRidesVisibility()
		{
			if (lastRidesSoFar > 0)
			{
				SetRidesOpacity(1f);
				time = maxTime;
				return;
			}
			if (time > minTime)
			{
				time -= Time.deltaTime;
			}
			SetRidesOpacity(Mathf.Clamp01(time));
		}

		private void Update()
		{
			UpdateFreezeframeHint();
			UpdateRidesVisibility();
		}

		private void SetRidesOpacity(float a)
		{
			opacityMultiplier = a;
			UpdateRocketIndicators(lastRidesSoFar);
		}

		public void UpdateFuelBar(float fuel)
		{
			lastFuel = fuel;
			UpdateFuelBar(fuel, lastRiding);
		}

		public void UpdateFuelBar(bool riding)
		{
			lastRiding = riding;
			UpdateFuelBar(lastFuel, riding);
		}

		public void UpdateFuelBar(float fuel, bool riding)
		{
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: 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_00cf: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)fuelBar == (Object)null)
			{
				return;
			}
			bool flag = riding && ConfigManager.crosshairRocketFuelShow.value && ConfigManager.crosshairRocketAlignment.value != RocketAlignment.Hidden;
			((Component)fuelBar).gameObject.SetActive(flag);
			if ((Object)(object)fuelBarBackground != (Object)null)
			{
				((Component)fuelBarBackground).gameObject.SetActive(flag);
			}
			if (flag)
			{
				float value = ConfigManager.crosshairRocketFuelOffset.value;
				float num = ((ConfigManager.crosshairRocketAlignment.value == RocketAlignment.Bottom) ? (0f - value) : value);
				float num2 = Mathf.Round(thickness);
				float num3 = Mathf.Round(num);
				float value2 = ConfigManager.crosshairRocketFuelWidth.value;
				if ((Object)(object)fuelBarBackground != (Object)null)
				{
					Color value3 = ConfigManager.usedColor.value;
					value3.a = ConfigManager.usedColorOpacity.value;
					((Graphic)fuelBarBackground).color = value3;
					((Graphic)fuelBarBackground).rectTransform.sizeDelta = new Vector2(value2, num2);
					((Graphic)fuelBarBackground).rectTransform.anchoredPosition = new Vector2(0f, num3);
				}
				((Graphic)fuelBar).color = ConfigManager.crosshairRocketFuelColor.value;
				((Graphic)fuelBar).rectTransform.sizeDelta = new Vector2(value2 * fuel, num2);
				((Graphic)fuelBar).rectTransform.anchoredPosition = new Vector2(0f, num3);
			}
		}

		public void UpdateRocketIndicators(int ridesSoFar)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			if (segments == null)
			{
				return;
			}
			lastRidesSoFar = ridesSoFar;
			int num = Mathf.Max(0, Core.MaxRocketRides - ridesSoFar);
			Color value = ConfigManager.crosshairRocketColor.value;
			Color value2 = ConfigManager.usedColor.value;
			value.a *= opacityMultiplier;
			value2.a = ConfigManager.usedColorOpacity.value * opacityMultiplier;
			for (int i = 0; i < segments.Length; i++)
			{
				if (!((Object)(object)segments[i] == (Object)null))
				{
					bool flag = ConfigManager.crosshairRocketAlignment.value != RocketAlignment.Hidden;
					((Component)segments[i]).gameObject.SetActive(flag);
					if (flag)
					{
						((Graphic)segments[i]).color = ((i < num) ? value : value2);
					}
				}
			}
		}

		public void SetRocketIndicatorsActive(bool active)
		{
			if (segments == null)
			{
				return;
			}
			if (!active)
			{
				for (int i = 0; i < segments.Length; i++)
				{
					if ((Object)(object)segments[i] != (Object)null)
					{
						((Component)segments[i]).gameObject.SetActive(false);
					}
				}
			}
			else
			{
				UpdateRocketIndicators(lastRidesSoFar);
			}
		}

		public void SetRocketIndicatorsColor()
		{
			//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_0030: Unknown result type (might be due to invalid IL or missing references)
			if (segments == null)
			{
				return;
			}
			Color value = ConfigManager.crosshairRocketColor.value;
			for (int i = 0; i < segments.Length; i++)
			{
				if ((Object)(object)segments[i] != (Object)null)
				{
					((Graphic)segments[i]).color = value;
				}
			}
			UpdateRocketIndicators(lastRidesSoFar);
		}

		public void SetRocketOffset(float value)
		{
			offset = value;
			UpdateRideIndicators(ConfigManager.crosshairRocketAlignment.value);
		}

		public void SetRocketIndicatorsThickness(float t)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			thickness = t;
			if (segments == null)
			{
				return;
			}
			for (int i = 0; i < segments.Length; i++)
			{
				if ((Object)(object)segments[i] != (Object)null)
				{
					((Graphic)segments[i]).rectTransform.sizeDelta = new Vector2(dashLength, thickness);
				}
			}
			UpdateRideIndicators(ConfigManager.crosshairRocketAlignment.value);
		}

		public void SetRocketIndicatorsDash(float d)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			dashLength = d;
			if (segments == null)
			{
				return;
			}
			for (int i = 0; i < segments.Length; i++)
			{
				if ((Object)(object)segments[i] != (Object)null)
				{
					((Graphic)segments[i]).rectTransform.sizeDelta = new Vector2(dashLength, thickness);
				}
			}
			UpdateRideIndicators(ConfigManager.crosshairRocketAlignment.value);
		}

		public void SetRocketIndicatorsGap(float g)
		{
			gapLength = g;
			UpdateRideIndicators(ConfigManager.crosshairRocketAlignment.value);
		}

		public void UpdateRideIndicators(RocketAlignment alignment)
		{
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			if (segments == null)
			{
				return;
			}
			float num = dashLength;
			float num2 = gapLength;
			float num3 = thickness;
			float num4 = (0f - ((float)segments.Length * num + (float)(segments.Length - 1) * num2)) / 2f;
			float num5 = 0f;
			num5 = alignment switch
			{
				RocketAlignment.Top => offset, 
				RocketAlignment.Bottom => 0f - offset, 
				_ => offset, 
			};
			for (int i = 0; i < segments.Length; i++)
			{
				if (!((Object)(object)segments[i] == (Object)null))
				{
					RectTransform rectTransform = ((Graphic)segments[i]).rectTransform;
					((Transform)rectTransform).localRotation = Quaternion.identity;
					float num6 = num4 + (float)i * (num + num2);
					float num7 = num6 + num;
					float num8 = Mathf.Round(num6);
					float num9 = Mathf.Round(num7);
					float num10 = Mathf.Max(1f, num9 - num8);
					float num11 = (num8 + num9) / 2f;
					rectTransform.anchoredPosition = new Vector2(num11, Mathf.Round(num5));
					rectTransform.sizeDelta = new Vector2(num10, Mathf.Round(num3));
				}
			}
		}
	}
	public class RocketRideWeaponController : MonoBehaviour
	{
		public GameObject panel;

		private Image bgImage;

		public Image icon;

		public TextMeshProUGUI text;

		private int rides = Core.MaxRocketRides;

		private bool speedometerShown;

		public static RocketRideWeaponController Instance { get; private set; }

		private void Start()
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Expected O, but got Unknown
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: 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_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: 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)
			//IL_0239: Expected O, but got Unknown
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fb: 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_0128: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
				TMP_FontAsset font = ((TMP_Text)((Component)((Component)this).transform.parent.parent.parent).GetComponentInChildren<TextMeshProUGUI>()).font;
				panel = new GameObject("RocketRidePanel");
				panel.layer = 5;
				RectTransform obj = panel.AddComponent<RectTransform>();
				panel.transform.SetParent(((Component)this).transform, false);
				UpdateAlignment(ConfigManager.weaponRocketAlignment.value);
				obj.sizeDelta = new Vector2(46f, 25f);
				bgImage = panel.AddComponent<Image>();
				((Behaviour)bgImage).enabled = ConfigManager.weaponRocketAlignment.value != WeaponHudAnchor.ShowInside;
				Image component = ((Component)((Component)this).transform.parent.parent).GetComponent<Image>();
				if ((Object)(object)component != (Object)null)
				{
					bgImage.sprite = component.sprite;
					bgImage.type = component.type;
					bgImage.pixelsPerUnitMultiplier = component.pixelsPerUnitMultiplier;
					((Graphic)bgImage).color = ((Graphic)component).color;
					((Graphic)bgImage).material = ((Graphic)component).material;
				}
				panel.AddComponent<HudOpenEffect>();
				GameObject val = new GameObject
				{
					name = "RocketRidesIcon",
					layer = 5
				};
				val.transform.SetParent(panel.transform);
				val.transform.localPosition = new Vector3(-9f, 0f, 0f);
				val.transform.localRotation = default(Quaternion);
				val.transform.localScale = new Vector3(0.16f, 0.16f, 0.16f);
				icon = val.AddComponent<Image>();
				icon.sprite = SpriteLoader.LoadSpriteFromFile(Path.Combine(Core.workingDir, "assets/rocket_ride_weapon_hud.png"), 100f, null, (TextureFormat)5);
				((Graphic)icon).color = ConfigManager.weaponRocketColor.value;
				GameObject val2 = new GameObject
				{
					name = "RocketRidesText",
					layer = 5
				};
				val2.transform.SetParent(panel.transform);
				val2.transform.localPosition = new Vector3(9f, 0f, 0f);
				val2.transform.localRotation = default(Quaternion);
				val2.transform.localScale = new Vector3(1f, 1f, 1f);
				text = val2.AddComponent<TextMeshProUGUI>();
				((TMP_Text)text).font = font;
				((TMP_Text)text).fontSize = 18f;
				((TMP_Text)text).alignment = (TextAlignmentOptions)514;
				((TMP_Text)text).text = rides.ToString();
				((Graphic)text).color = ConfigManager.weaponRocketColor.value;
				SetStuffActive(ConfigManager.weaponRocketAlignment.value != WeaponHudAnchor.Hidden);
				NewMovementListener.OnRocketRideCountChanged += SetRides;
				SpeedometerListener.OnSpeedometerEnabled += OnSpeedometerEnabled;
				SpeedometerListener.OnSpeedometerDisabled += OnSpeedometerDisabled;
			}
		}

		private void OnDestroy()
		{
			NewMovementListener.OnRocketRideCountChanged -= SetRides;
			SpeedometerListener.OnSpeedometerEnabled -= OnSpeedometerEnabled;
			SpeedometerListener.OnSpeedometerDisabled -= OnSpeedometerDisabled;
		}

		public void SetRides(int ridesSoFar)
		{
			if (!((Object)(object)text == (Object)null))
			{
				rides = Mathf.Max(0, Core.MaxRocketRides - ridesSoFar);
				if (rides < 0)
				{
					rides = 0;
				}
				((TMP_Text)text).text = rides.ToString();
				UpdateColor();
			}
		}

		public void UpdateColor()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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_0053: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)icon == (Object)null) && !((Object)(object)text == (Object)null))
			{
				Color value = ConfigManager.weaponRocketColor.value;
				bool flag = rides == 0 && ConfigManager.distinctDangerColor.value;
				((Graphic)icon).color = value;
				((Graphic)text).color = (flag ? ConfigManager.dangerColor.value : value);
			}
		}

		public void SetStuffActive(bool active)
		{
			if (!((Object)(object)panel == (Object)null))
			{
				panel.SetActive(active);
			}
		}

		private void OnSpeedometerDisabled()
		{
			UpdateSpeedometerAdjustment(speedometerShown: false);
		}

		private void OnSpeedometerEnabled()
		{
			UpdateSpeedometerAdjustment(speedometerShown: true);
		}

		public void UpdateSpeedometerAdjustment(bool speedometerShown)
		{
			this.speedometerShown = speedometerShown;
			UpdateAlignment();
		}

		public void UpdateAlignment()
		{
			UpdateAlignment(ConfigManager.weaponRocketAlignment.value);
		}

		public void UpdateAlignment(WeaponHudAnchor newValue)
		{
			//IL_00c4: 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_00ad: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			if (newValue == WeaponHudAnchor.Hidden)
			{
				SetStuffActive(active: false);
				return;
			}
			RectTransform component = panel.GetComponent<RectTransform>();
			switch (newValue)
			{
			case WeaponHudAnchor.ShowTopLeft:
				component.anchoredPosition = new Vector2(-77f, (float)(speedometerShown ? 89 : 63));
				break;
			case WeaponHudAnchor.ShowTopRight:
				component.anchoredPosition = new Vector2(124f, 63f);
				break;
			case WeaponHudAnchor.ShowLeft:
				component.anchoredPosition = new Vector2(-124f, 37f);
				break;
			case WeaponHudAnchor.ShowRight:
				component.anchoredPosition = new Vector2(171f, 38f);
				break;
			case WeaponHudAnchor.ShowBottom:
				component.anchoredPosition = new Vector2(-77f, -110f);
				break;
			case WeaponHudAnchor.ShowInside:
				component.anchoredPosition = new Vector2(-77f, 37f);
				break;
			}
			if (!((Object)(object)bgImage == (Object)null))
			{
				((Behaviour)bgImage).enabled = newValue != WeaponHudAnchor.ShowInside;
				SetStuffActive(active: true);
			}
		}
	}
	public class SpeedometerListener : MonoBehaviour
	{
		public delegate void OnSpeedometerEnabledDelegate();

		public delegate void OnSpeedometerDisabledDelegate();

		private bool? previous;

		public static SpeedometerListener Instance { get; private set; }

		public static event OnSpeedometerEnabledDelegate OnSpeedometerEnabled;

		public static event OnSpeedometerDisabledDelegate OnSpeedometerDisabled;

		private void Awake()
		{
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
			}
		}

		public void UpdateState(bool show)
		{
			if (previous != show)
			{
				previous = show;
				if (show)
				{
					SpeedometerListener.OnSpeedometerEnabled();
				}
				else
				{
					SpeedometerListener.OnSpeedometerDisabled();
				}
			}
		}
	}
	public static class SpriteLoader
	{
		public static Sprite LoadSpriteFromFile(string path, float pixelsPerUnit = 100f, Vector2? pivot = null, TextureFormat textureFormat = 5, bool mipmap = false)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (string.IsNullOrEmpty(path) || !File.Exists(path))
				{
					return null;
				}
				byte[] array = File.ReadAllBytes(path);
				Texture2D val = new Texture2D(2, 2, textureFormat, mipmap);
				if (!ImageConversion.LoadImage(val, array))
				{
					return null;
				}
				val.Apply();
				Vector2 val2 = (Vector2)(((??)pivot) ?? new Vector2(0.5f, 0.5f));
				return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), val2, pixelsPerUnit);
			}
			catch (Exception)
			{
				return null;
			}
		}
	}
	public class WallJumpCrosshairController : MonoBehaviour
	{
		public Image crosshair1;

		public Image crosshair2;

		public Image crosshair3;

		public float time = 2f;

		public float maxTime = 2f;

		public float minTime;

		public NewMovement nm;

		public Traverse nmT;

		public static WallJumpCrosshairController Instance { get; private set; }

		public Direction Direction
		{
			get
			{
				if (ConfigManager.crosshairWallJumpAlignment.value == CrosshairAlignment.Left || ConfigManager.crosshairWallJumpAlignment.value == CrosshairAlignment.Top)
				{
					return Direction.Reverse;
				}
				return Direction.Normal;
			}
		}

		private void Start()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Expected O, but got Unknown
			//IL_006c: 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_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Expected O, but got Unknown
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Expected O, but got Unknown
			//IL_016e: 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)
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
				nm = MonoSingleton<NewMovement>.Instance;
				nmT = Traverse.Create((object)nm);
				GameObject val = new GameObject();
				((Object)val).name = "WallJumps";
				val.layer = 5;
				val.transform.SetParent(((Component)this).transform);
				val.transform.localPosition = Vector3.zero;
				val.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
				GameObject val2 = new GameObject();
				((Object)val2).name = "1";
				val2.layer = 5;
				val2.transform.SetParent(val.transform);
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localScale = Vector3.one;
				crosshair1 = val2.AddComponent<Image>();
				GameObject val3 = new GameObject();
				((Object)val3).name = "2";
				val3.layer = 5;
				val3.transform.SetParent(val.transform);
				val3.transform.localPosition = Vector3.zero;
				val3.transform.localScale = Vector3.one;
				crosshair2 = val3.AddComponent<Image>();
				GameObject val4 = new GameObject();
				((Object)val4).name = "3";
				val4.layer = 5;
				val4.transform.SetParent(val.transform);
				val4.transform.localPosition = Vector3.zero;
				val4.transform.localScale = Vector3.one;
				crosshair3 = val4.AddComponent<Image>();
				crosshair1.sprite = SpriteLoader.LoadSpriteFromFile(Path.Combine(Core.workingDir, "assets/wall_jump_crosshair_1.png"), 100f, null, (TextureFormat)5);
				crosshair2.sprite = SpriteLoader.LoadSpriteFromFile(Path.Combine(Core.workingDir, "assets/wall_jump_crosshair_2.png"), 100f, null, (TextureFormat)5);
				crosshair3.sprite = SpriteLoader.LoadSpriteFromFile(Path.Combine(Core.workingDir, "assets/wall_jump_crosshair_3.png"), 100f, null, (TextureFormat)5);
				SetIconsRotation(ConfigManager.crosshairWallJumpAlignment.value);
				SetIconsActive(ConfigManager.crosshairWallJumpAlignment.value != CrosshairAlignment.Hidden);
				UpdateColor();
				SetWallJumps(Core.MaxWalljumps);
				NewMovementListener.OnWallJumpsChanged += SetWallJumps;
				PowerUpMeterListener.OnPowerUpStarted += OnPowerUpStarted;
				PowerUpMeterListener.OnPowerUpEnded += OnPowerUpEnded;
			}
		}

		private void OnDestroy()
		{
			NewMovementListener.OnWallJumpsChanged -= SetWallJumps;
			PowerUpMeterListener.OnPowerUpStarted -= OnPowerUpStarted;
			PowerUpMeterListener.OnPowerUpEnded -= OnPowerUpEnded;
		}

		private void Update()
		{
			if (ConfigManager.crosshairWallJumpAlignment.value != 0)
			{
				if ((double)nmT.Field<float>("fallTime").Value > 0.25)
				{
					time = maxTime;
				}
				else if (time > minTime)
				{
					time -= Time.deltaTime;
				}
				SetIconsOpacity(Mathf.Clamp01(time));
			}
		}

		public void SetIconsActive(bool active)
		{
			if (!((Object)(object)crosshair1 == (Object)null) && !((Object)(object)crosshair2 == (Object)null) && !((Object)(object)crosshair3 == (Object)null))
			{
				((Component)crosshair1).gameObject.SetActive(active);
				((Component)crosshair2).gameObject.SetActive(active);
				((Component)crosshair3).gameObject.SetActive(active);
			}
		}

		public void UpdateColor()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: 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_0053: Unknown result type (might be due to invalid IL or missing references)
			Color value = ConfigManager.crosshairWallJumpColor.value;
			if ((Object)(object)crosshair1 != (Object)null)
			{
				((Graphic)crosshair1).color = value;
			}
			if ((Object)(object)crosshair2 != (Object)null)
			{
				((Graphic)crosshair2).color = value;
			}
			if ((Object)(object)crosshair3 != (Object)null)
			{
				((Graphic)crosshair3).color = value;
			}
		}

		public void SetIconsRotation(CrosshairAlignment alignment)
		{
			//IL_0038: 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_0051: 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_006a: 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)
			if (!((Object)(object)crosshair1 == (Object)null) && !((Object)(object)crosshair2 == (Object)null) && !((Object)(object)crosshair3 == (Object)null))
			{
				((Component)crosshair1).GetComponent<Transform>().localRotation = default(Quaternion);
				((Component)crosshair2).GetComponent<Transform>().localRotation = default(Quaternion);
				((Component)crosshair3).GetComponent<Transform>().localRotation = default(Quaternion);
				switch (alignment)
				{
				case CrosshairAlignment.Left:
					((Component)crosshair1).GetComponent<Transform>().Rotate(0f, 0f, 270f, (Space)1);
					((Component)crosshair2).GetComponent<Transform>().Rotate(0f, 0f, 270f, (Space)1);
					((Component)crosshair3).GetComponent<Transform>().Rotate(0f, 0f, 270f, (Space)1);
					break;
				case CrosshairAlignment.Top:
					((Component)crosshair1).GetComponent<Transform>().Rotate(0f, 0f, 180f, (Space)1);
					((Component)crosshair2).GetComponent<Transform>().Rotate(0f, 0f, 180f, (Space)1);
					((Component)crosshair3).GetComponent<Transform>().Rotate(0f, 0f, 180f, (Space)1);
					break;
				case CrosshairAlignment.Right:
					((Component)crosshair1).GetComponent<Transform>().Rotate(0f, 0f, 90f, (Space)1);
					((Component)crosshair2).GetComponent<Transform>().Rotate(0f, 0f, 90f, (Space)1);
					((Component)crosshair3).GetComponent<Transform>().Rotate(0f, 0f, 90f, (Space)1);
					break;
				}
			}
		}

		public void OnPowerUpStarted()
		{
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: 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_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: 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_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: 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_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			SetWallJumps(nm.gc.onGround ? Core.MaxWalljumps : nm.currentWallJumps);
			if (!((Object)(object)crosshair1 == (Object)null) && !((Object)(object)crosshair2 == (Object)null) && !((Object)(object)crosshair3 == (Object)null) && MonoSingleton<PrefsManager>.Instance.GetBool("powerUpMeter", true))
			{
				float num = 12f;
				float num2 = 6f;
				switch (ConfigManager.crosshairWallJumpAlignment.value)
				{
				case CrosshairAlignment.Top:
					((Component)crosshair1).GetComponent<Transform>().localPosition = new Vector3(num2, num, 0f);
					((Component)crosshair2).GetComponent<Transform>().localPosition = new Vector3(0f, num, 0f);
					((Component)crosshair3).GetComponent<Transform>().localPosition = new Vector3(0f - num2, num, 0f);
					break;
				case CrosshairAlignment.Left:
					((Component)crosshair1).GetComponent<Transform>().localPosition = new Vector3(0f - num, num2, 0f);
					((Component)crosshair2).GetComponent<Transform>().localPosition = new Vector3(0f - num, 0f, 0f);
					((Component)crosshair3).GetComponent<Transform>().localPosition = new Vector3(0f - num, 0f - num2, 0f);
					break;
				case CrosshairAlignment.Right:
					((Component)crosshair1).GetComponent<Transform>().localPosition = new Vector3(num, 0f - num2, 0f);
					((Component)crosshair2).GetComponent<Transform>().localPosition = new Vector3(num, 0f, 0f);
					((Component)crosshair3).GetComponent<Transform>().localPosition = new Vector3(num, num2, 0f);
					break;
				case CrosshairAlignment.Bottom:
					((Component)crosshair1).GetComponent<Transform>().localPosition = new Vector3(0f - num2, 0f - num, 0f);
					((Component)crosshair2).GetComponent<Transform>().localPosition = new Vector3(0f, 0f - num, 0f);
					((Component)crosshair3).GetComponent<Transform>().localPosition = new Vector3(num2, 0f - num, 0f);
					break;
				}
			}
		}

		public void OnPowerUpEnded()
		{
			//IL_0060: 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_008a: Unknown result type (might be due to invalid IL or missing references)
			SetWallJumps(nm.gc.onGround ? Core.MaxWalljumps : nm.currentWallJumps);
			if (!((Object)(object)crosshair1 == (Object)null) && !((Object)(object)crosshair2 == (Object)null) && !((Object)(object)crosshair3 == (Object)null))
			{
				((Component)crosshair1).GetComponent<Transform>().localPosition = Vector3.zero;
				((Component)crosshair2).GetComponent<Transform>().localPosition = Vector3.zero;
				((Component)crosshair3).GetComponent<Transform>().localPosition = Vector3.zero;
			}
		}

		public void SetIconsOpacity(float time)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)crosshair1 == (Object)null) && !((Object)(object)crosshair2 == (Object)null) && !((Object)(object)crosshair3 == (Object)null))
			{
				Color value = ConfigManager.crosshairWallJumpColor.value;
				value.a = time;
				((Graphic)crosshair1).color = value;
				((Graphic)crosshair2).color = value;
				((Graphic)crosshair3).color = value;
			}
		}

		public void SetWallJumps(int jumps)
		{
			if (jumps > Core.MaxWalljumps)
			{
				jumps = Core.MaxWalljumps;
			}
			if (jumps < 0)
			{
				jumps = 0;
			}
			bool active = ConfigManager.crosshairWallJumpAlignment.value != CrosshairAlignment.Hidden;
			switch (jumps)
			{
			case 3:
				((Component)crosshair1).gameObject.SetActive(active);
				((Component)crosshair2).gameObject.SetActive(active);
				((Component)crosshair3).gameObject.SetActive(active);
				break;
			case 2:
				if (Direction == Direction.Reverse)
				{
					((Component)crosshair1).gameObject.SetActive(false);
					((Component)crosshair2).gameObject.SetActive(active);
					((Component)crosshair3).gameObject.SetActive(active);
				}
				else
				{
					((Component)crosshair1).gameObject.SetActive(active);
					((Component)crosshair2).gameObject.SetActive(active);
					((Component)crosshair3).gameObject.SetActive(false);
				}
				break;
			case 1:
				if (Direction == Direction.Reverse)
				{
					((Component)crosshair1).gameObject.SetActive(false);
					((Component)crosshair2).gameObject.SetActive(false);
					((Component)crosshair3).gameObject.SetActive(active);
				}
				else
				{
					((Component)crosshair1).gameObject.SetActive(active);
					((Component)crosshair2).gameObject.SetActive(false);
					((Component)crosshair3).gameObject.SetActive(false);
				}
				break;
			case 0:
				((Component)crosshair1).gameObject.SetActive(false);
				((Component)crosshair2).gameObject.SetActive(false);
				((Component)crosshair3).gameObject.SetActive(false);
				break;
			}
		}
	}
	public class WallJumpWeaponController : MonoBehaviour
	{
		public GameObject panel;

		private Image bgImage;

		public Image icon;

		public TextMeshProUGUI text;

		private bool speedometerShown;

		public static WallJumpWeaponController Instance { get; private set; }

		private void Start()
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Expected O, but got Unknown
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: 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_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: 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)
			//IL_0239: Expected O, but got Unknown
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: 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_0128: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)Instance != (Object)null) || !((Object)(object)Instance != (Object)(object)this))
			{
				Instance = this;
				TMP_FontAsset font = ((TMP_Text)((Component)((Component)this).transform.parent.parent.parent).GetComponentInChildren<TextMeshProUGUI>()).font;
				panel = new GameObject("WallJumpPanel");
				panel.layer = 5;
				RectTransform obj = panel.AddComponent<RectTransform>();
				panel.transform.SetParent(((Component)this).transform, false);
				UpdateAlignment(ConfigManager.weaponWallJumpAlignment.value);
				obj.sizeDelta = new Vector2(46f, 25f);
				bgImage = panel.AddComponent<Image>();
				((Behaviour)bgImage).enabled = ConfigManager.weaponWallJumpAlignment.value != WeaponHudAnchor.ShowInside;
				Image component = ((Component)((Component)this).transform.parent.parent).GetComponent<Image>();
				if ((Object)(object)component != (Object)null)
				{
					bgImage.sprite = component.sprite;
					bgImage.type = component.type;
					bgImage.pixelsPerUnitMultiplier = component.pixelsPerUnitMultiplier;
					((Graphic)bgImage).color = ((Graphic)component).color;
					((Graphic)bgImage).material = ((Graphic)component).material;
				}
				panel.AddComponent<HudOpenEffect>();
				GameObject val = new GameObject
				{
					name = "WallJumpsIcon",
					layer = 5
				};
				val.transform.SetParent(panel.transform);
				val.transform.localPosition = new Vector3(-8f, -0.5f, 0f);
				val.transform.localRotation = default(Quaternion);
				val.transform.localScale = new Vector3(0.16f, 0.16f, 0.16f);
				icon = val.AddComponent<Image>();
				icon.sprite = SpriteLoader.LoadSpriteFromFile(Path.Combine(Core.workingDir, "assets/wall_jump_weapon_hud.png"), 100f, null, (TextureFormat)5);
				((Graphic)icon).color = ConfigManager.weaponWallJumpColor.value;
				GameObject val2 = new GameObject
				{
					name = "WallJumpsText",
					layer = 5
				};
				val2.transform.SetParent(panel.transform);
				val2.transform.localPosition = new Vector3(9f, 0f, 0f);
				val2.transform.localRotation = default(Quaternion);
				val2.transform.localScale = new Vector3(1f, 1f, 1f);
				text = val2.AddComponent<TextMeshProUGUI>();
				((TMP_Text)text).font = font;
				((TMP_Text)text).fontSize = 18f;
				((TMP_Text)text).alignment = (TextAlignmentOptions)514;
				((TMP_Text)text).text = Core.MaxWalljumps.ToString();
				((Graphic)text).color = ConfigManager.weaponWallJumpColor.value;
				SetStuffActive(ConfigManager.weaponWallJumpAlignment.value != WeaponHudAnchor.Hidden);
				NewMovementListener.OnWallJumpsChanged += SetWallJumps;
				PowerUpMeterListener.OnPowerUpStarted += OnPowerUpChange;
				PowerUpMeterListener.OnPowerUpEnded += OnPowerUpChange;
				SpeedometerListener.OnSpeedometerEnabled += OnSpeedometerEnabled;
				SpeedometerListener.OnSpeedometerDisabled += OnSpeedometerDisabled;
			}
		}

		private void OnDestroy()
		{
			NewMovementListener.OnWallJumpsChanged -= SetWallJumps;
			PowerUpMeterListener.OnPowerUpStarted -= OnPowerUpChange;
			PowerUpMeterListener.OnPowerUpEnded -= OnPowerUpChange;
			SpeedometerListener.OnSpeedometerEnabled -= OnSpeedometerEnabled;
			SpeedometerListener.OnSpeedometerDisabled -= OnSpeedometerDisabled;
		}

		public void SetWallJumps(int number)
		{
			if (!((Object)(object)text == (Object)null))
			{
				if (number > Core.MaxWalljumps)
				{
					number = Core.MaxWalljumps;
				}
				((TMP_Text)text).text = number.ToString();
				UpdateColor();
			}
		}

		public void OnPowerUpChange()
		{
			SetWallJumps(MonoSingleton<NewMovement>.Instance.gc.onGround ? Core.MaxWalljumps : MonoSingleton<NewMovement>.Instance.currentWallJumps);
		}

		private void OnSpeedometerEnabled()
		{
			UpdateSpeedometerAdjustment(speedometerShown: true);
		}

		private void OnSpeedometerDisabled()
		{
			UpdateSpeedometerAdjustment(speedometerShown: false);
		}

		public void UpdateColor()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)icon == (Object)null) && !((Object)(object)text == (Object)null))
			{
				Color value = ConfigManager.weaponWallJumpColor.value;
				bool flag = ((TMP_Text)text).text == "0" && ConfigManager.distinctDangerColor.value;
				((Graphic)icon).color = value;
				((Graphic)text).color = (flag ? ConfigManager.dangerColor.value : value);
			}
		}

		public void SetStuffActive(bool active)
		{
			if (!((Object)(object)panel == (Object)null))
			{
				panel.SetActive(active);
			}
		}

		public void UpdateSpeedometerAdjustment(bool speedometerShown)
		{
			this.speedometerShown = speedometerShown;
			UpdateAlignment();
		}

		public void UpdateAlignment()
		{
			UpdateAlignment(ConfigManager.weaponWallJumpAlignment.value);
		}

		public void UpdateAlignment(WeaponHudAnchor newValue)
		{
			//IL_00ee: 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_00d7: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			if (newValue == WeaponHudAnchor.Hidden)
			{
				SetStuffActive(active: false);
				return;
			}
			bool flag = newValue == ConfigManager.weaponRocketAlignment.value;
			RectTransform component = panel.GetComponent<RectTransform>();
			switch (newValue)
			{
			case WeaponHudAnchor.ShowTopLeft:
				component.anchoredPosition = new Vector2((float)(flag ? (-30) : (-77)), (float)(speedometerShown ? 89 : 63));
				break;
			case WeaponHudAnchor.ShowTopRight:
				component.anchoredPosition = new Vector2(124f, (float)(flag ? 89 : 63));
				break;
			case WeaponHudAnchor.ShowLeft:
				component.anchoredPosition = new Vector2(-124f, (float)(flag ? 11 : 37));
				break;
			case WeaponHudAnchor.ShowRight:
				component.anchoredPosition = new Vector2(171f, (float)(flag ? 11 : 38));
				break;
			case WeaponHudAnchor.ShowBottom:
				component.anchoredPosition = new Vector2((float)(flag ? (-30) : (-77)), -110f);
				break;
			case WeaponHudAnchor.ShowInside:
				component.anchoredPosition = new Vector2(77f, -38f);
				break;
			}
			if (!((Object)(object)bgImage == (Object)null))
			{
				((Behaviour)bgImage).enabled = newValue != WeaponHudAnchor.ShowInside;
				SetStuffActive(active: true);
			}
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "RocketRideHUD";

		public const string PLUGIN_NAME = "RocketRideHUD";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace RocketRideHUD.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("RocketRideHUD.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

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

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

		internal Resources()
		{
		}
	}
}
namespace RocketRideHUD.Patches
{
	[HarmonyPatch(typeof(NewMovement), "Start")]
	public class NewMovement_Start_Patch
	{
		public static void Postfix(NewMovement __instance)
		{
			((Component)__instance).gameObject.AddComponent<NewMovementListener>();
		}
	}
	[HarmonyPatch(typeof(PlayerActivatorRelay), "Activate")]
	public class PlayerActivatorRelay_Activate_Patch
	{
		public static void Postfix()
		{
			GameObject crosshair = MonoSingleton<StatsManager>.Instance.crosshair;
			if (crosshair != null)
			{
				GameObjectExtensions.GetOrAddComponent<WallJumpCrosshairController>(crosshair);
			}
			GameObject crosshair2 = MonoSingleton<StatsManager>.Instance.crosshair;
			if (crosshair2 != null)
			{
				GameObjectExtensions.GetOrAddComponent<RocketCrosshairController>(crosshair2);
			}
		}
	}
	[HarmonyPatch(typeof(PowerUpMeter), "Start")]
	public class PowerUpMeter_Start_Patch
	{
		public static void Postfix(PowerUpMeter __instance)
		{
			((Component)__instance).gameObject.AddComponent<PowerUpMeterListener>();
		}
	}
	[HarmonyPatch(typeof(Speedometer), "OnEnable")]
	public class Speedometer_Awake_Patch
	{
		public static void Postfix(Speedometer __instance)
		{
			if (!((Object)(object)SpeedometerListener.Instance == (Object)null))
			{
				SpeedometerListener.Instance.UpdateState(((Component)__instance).gameObject.activeSelf);
			}
		}
	}
	[HarmonyPatch(typeof(Speedometer), "OnPrefChanged")]
	public class Speedometer_OnPrefChanged_Patch
	{
		public static void Postfix(Speedometer __instance, string id)
		{
			if (!((Object)(object)SpeedometerListener.Instance == (Object)null) && id == "speedometer")
			{
				SpeedometerListener.Instance.UpdateState(((Component)__instance).gameObject.activeSelf);
			}
		}
	}
	[HarmonyPatch(typeof(WeaponHUD), "Awake")]
	public class WeaponHUD_Awake_Patch
	{
		public static void Postfix(WeaponHUD __instance)
		{
			((Component)__instance).gameObject.AddComponent<SpeedometerListener>();
			((Component)__instance).gameObject.AddComponent<WallJumpWeaponController>();
			((Component)__instance).gameObject.AddComponent<RocketRideWeaponController>();
		}
	}
}