Decompiled source of DangerCursor v0.1.0

plugins/com.azen.dangerCursor.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.UI;

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

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace DangerCursor
{
	[BepInPlugin("com.azen.dangerCursor", "DangerCursor", "0.1.0")]
	public class Plugin : BaseUnityPlugin
	{
		private static float _injury;

		private static float _healthAvailable;

		private static float _fallDist;

		private static bool _isActive;

		private static Color _cachedColor;

		private static string _cachedLabelText = string.Empty;

		private static GUIContent _guiContent;

		private static GUIStyle _labelStyle;

		private static Camera _cachedCam;

		private static LayerMask _physMask;

		private static Texture2D _pixel;

		private static int _warmupFrames = 10;

		public const string Id = "com.azen.dangerCursor";

		public static string Name => "DangerCursor";

		public static string Version => "0.1.0";

		private void Awake()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_0081: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
			new Harmony("com.azen.dangerCursor").PatchAll();
			_pixel = new Texture2D(1, 1);
			_pixel.SetPixel(0, 0, Color.white);
			_pixel.Apply();
			_guiContent = new GUIContent();
			_labelStyle = new GUIStyle();
			_labelStyle.fontSize = 14;
			_labelStyle.fontStyle = (FontStyle)1;
			_labelStyle.alignment = (TextAnchor)3;
			_labelStyle.richText = false;
			_labelStyle.normal.textColor = Color.white;
			_physMask = LayerMask.op_Implicit(LayerMask.GetMask(new string[4] { "Terrain", "Map", "Default", "Rope" }));
		}

		private void Start()
		{
			_cachedCam = HelperFunctions.GetMainCamera();
		}

		private void OnGUI()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: 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_00b5: 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)
			if (_warmupFrames > 0)
			{
				_warmupFrames--;
				_labelStyle.normal.textColor = Color.clear;
				GUI.Label(new Rect(-1000f, -1000f, 10f, 10f), "WARMUP_RESOURCES_INIT", _labelStyle);
			}
			else if (_isActive && !string.IsNullOrEmpty(_cachedLabelText))
			{
				Character localCharacter = Character.localCharacter;
				if (Object.op_Implicit((Object)(object)localCharacter) && !localCharacter.data.dead && !localCharacter.data.fullyPassedOut)
				{
					float x = Input.mousePosition.x;
					float num = (float)Screen.height - Input.mousePosition.y;
					_labelStyle.normal.textColor = _cachedColor;
					_guiContent.text = _cachedLabelText;
					GUI.Label(new Rect(x + 22f, num - 10f, 400f, 25f), _guiContent, _labelStyle);
				}
			}
		}

		public static void Tick()
		{
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: 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_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0394: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			Character localCharacter = Character.localCharacter;
			if (!Object.op_Implicit((Object)(object)localCharacter))
			{
				_isActive = false;
				_cachedCam = null;
				return;
			}
			if ((Object)(object)_cachedCam == (Object)null)
			{
				_cachedCam = HelperFunctions.GetMainCamera();
				if ((Object)(object)_cachedCam == (Object)null)
				{
					return;
				}
			}
			_isActive = !localCharacter.data.dead && !localCharacter.data.fullyPassedOut && Input.GetMouseButton(1);
			if (!_isActive)
			{
				_injury = 0f;
				return;
			}
			_healthAvailable = Mathf.Max(0.001f, 1f - localCharacter.refs.afflictions.statusSum);
			if (localCharacter.data.isInvincible)
			{
				_injury = 0f;
				_cachedColor = Color.cyan;
				_cachedLabelText = "INVINCIBLE (MILK/SHIELD)";
				return;
			}
			Vector3 position = ((Component)_cachedCam).transform.position;
			Vector3 forward = ((Component)_cachedCam).transform.forward;
			RaycastHit val = default(RaycastHit);
			if (Physics.Raycast(position, forward, ref val, 1000f, LayerMask.op_Implicit(_physMask), (QueryTriggerInteraction)1))
			{
				float num = ((Component)localCharacter.refs.hip).transform.position.y - 0.85f;
				float num2 = (_fallDist = num - ((RaycastHit)(ref val)).point.y);
				float balloonFloatMultiplier = localCharacter.refs.movement.balloonFloatMultiplier;
				if (balloonFloatMultiplier <= 0f)
				{
					_cachedColor = Color.white;
					_cachedLabelText = "FLOATING (BALLOONS)";
					_injury = 0f;
					return;
				}
				float num3 = 13f * balloonFloatMultiplier;
				float num4 = Mathf.Sqrt(2f * Mathf.Max(0f, num2) / num3);
				if (localCharacter.data.sinceGrounded - localCharacter.data.sinceJump > -0.05f)
				{
					num4 -= 0.5f;
				}
				int currentBalloonCount = localCharacter.refs.balloons.currentBalloonCount;
				if (currentBalloonCount > 0)
				{
					float num5 = Mathf.Clamp(2f - 0.2f * (float)currentBalloonCount, 0.5f, 2f);
					num4 = Mathf.Min(num4, num5);
				}
				if (num4 < 1.48f || num2 < 1.8f)
				{
					_injury = 0f;
					_cachedColor = Color.white;
					_cachedLabelText = string.Empty;
					return;
				}
				float num6 = Mathf.Pow(Mathf.InverseLerp(1.5f, 3f, num4), 1.5f);
				float num7 = Mathf.Sqrt(2f * (20f * balloonFloatMultiplier) * num2);
				float num8 = Mathf.Pow(Mathf.InverseLerp(10f, 20f, num7), 1.5f);
				_injury = Mathf.Min(num6, num8);
				_injury *= Ascents.fallDamageMultiplier;
				_injury /= Ascents.etcDamageMultiplier;
				if (localCharacter.data.isSkeleton)
				{
					_injury *= 8f;
				}
				if (_injury >= _healthAvailable * 0.95f)
				{
					_cachedColor = Color.red;
					_cachedLabelText = _fallDist.ToString("F1") + "m ! FATAL";
				}
				else if (_injury >= _healthAvailable * 0.45f)
				{
					_cachedColor = new Color(1f, 0.5f, 0f);
					_cachedLabelText = _fallDist.ToString("F1") + "m ! DANGER";
				}
				else
				{
					_cachedColor = Color.yellow;
					_cachedLabelText = _fallDist.ToString("F1") + "m ! INJURY";
				}
			}
			else
			{
				_cachedColor = Color.white;
				_cachedLabelText = string.Empty;
				_injury = 0f;
			}
		}

		public static Color GetCurrentColor()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			if (!_isActive)
			{
				return new Color(1f, 1f, 1f, 0.5f);
			}
			return _cachedColor;
		}
	}
	[HarmonyPatch(typeof(Character), "Update")]
	public static class CharacterUpdatePatch
	{
		[HarmonyPostfix]
		public static void Postfix(Character __instance)
		{
			if ((Object)(object)__instance == (Object)(object)Character.localCharacter)
			{
				Plugin.Tick();
			}
		}
	}
	[HarmonyPatch(typeof(GUIManager), "UpdateReticle")]
	public static class UpdateReticlePatch
	{
		[HarmonyPostfix]
		public static void Postfix(GUIManager __instance)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			Color currentColor = Plugin.GetCurrentColor();
			if ((Object)(object)__instance.reticleDefaultImage != (Object)null)
			{
				((Graphic)__instance.reticleDefaultImage).color = currentColor;
			}
			TryUpdateColor(__instance.reticleClimb, currentColor);
			TryUpdateColor(__instance.reticleReach, currentColor);
			TryUpdateColor(__instance.reticleClimbTry, currentColor);
			TryUpdateColor(__instance.reticleRope, currentColor);
			TryUpdateColor(__instance.reticleVine, currentColor);
			TryUpdateColor(__instance.reticleGrasp, currentColor);
			TryUpdateColor(__instance.reticleSpike, currentColor);
			TryUpdateColor(__instance.reticleShoot, currentColor);
			TryUpdateColor(__instance.reticleKick, currentColor);
			TryUpdateColor(__instance.reticleBoost, currentColor);
		}

		private static void TryUpdateColor(GameObject go, Color c)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)go != (Object)null && go.activeSelf)
			{
				Image val = go.GetComponent<Image>() ?? go.GetComponentInChildren<Image>();
				if (Object.op_Implicit((Object)(object)val))
				{
					((Graphic)val).color = c;
				}
			}
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}