Decompiled source of OutOfBoundsSafe v1.1.0

OutOfBoundsSafe.dll

Decompiled 2 weeks ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
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.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.UI;
using RoR2;
using RoR2.Navigation;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("OutOfBoundsSafe")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+7d47a9052ef02949971daab163c20ecb273821bc")]
[assembly: AssemblyProduct("OutOfBoundsSafe")]
[assembly: AssemblyTitle("OutOfBoundsSafe")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 OutOfBoundsSafe
{
	internal static class Assets
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Awake <0>__MakeTooltip;

			public static hook_Awake <1>__MakeSnakeIcon;
		}

		private static string Snake = "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";

		private static Sprite SnakeSprite;

		public static GameObject Tooltip;

		public static GameObject SnakeIcon;

		public static Image SnakeImage;

		public static void Init()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Expected O, but got Unknown
			MakeSnakeSprite();
			object obj = <>O.<0>__MakeTooltip;
			if (obj == null)
			{
				hook_Awake val = MakeTooltip;
				<>O.<0>__MakeTooltip = val;
				obj = (object)val;
			}
			HUDTutorialController.Awake += (hook_Awake)obj;
			object obj2 = <>O.<1>__MakeSnakeIcon;
			if (obj2 == null)
			{
				hook_Awake val2 = MakeSnakeIcon;
				<>O.<1>__MakeSnakeIcon = val2;
				obj2 = (object)val2;
			}
			HUD.Awake += (hook_Awake)obj2;
		}

		private static void MakeSnakeSprite()
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//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)
			byte[] array = Convert.FromBase64String(Snake);
			Texture2D val = new Texture2D(2, 2);
			ImageConversion.LoadImage(val, array);
			SnakeSprite = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
		}

		private static void MakeTooltip(orig_Awake orig, HUDTutorialController self)
		{
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (OutOfBoundsSafe.tooltipShown)
			{
				return;
			}
			GameObject remoteOpTutorialObject = self.remoteOpTutorialObject;
			if ((Object)(object)remoteOpTutorialObject != (Object)null)
			{
				Tooltip = Object.Instantiate<GameObject>(remoteOpTutorialObject, remoteOpTutorialObject.transform.parent);
				Image[] componentsInChildren = Tooltip.GetComponentsInChildren<Image>();
				foreach (Image val in componentsInChildren)
				{
					((Graphic)val).color = new Color(1f, 0.8f, 1f, 1f);
				}
			}
		}

		private static void MakeSnakeIcon(orig_Awake orig, HUD self)
		{
			orig.Invoke(self);
			if (!OutOfBoundsSafe.tooltipShown)
			{
				GameObject sprintIconObject = self.sprintIcon.sprintIconObject;
				if ((Object)(object)sprintIconObject != (Object)null)
				{
					SnakeIcon = Object.Instantiate<GameObject>(sprintIconObject, sprintIconObject.transform.parent);
					SnakeImage = SnakeIcon.GetComponent<Image>();
					SnakeImage.sprite = SnakeSprite;
					SnakeImage.preserveAspect = true;
					SnakeIcon.SetActive(false);
				}
			}
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

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

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

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

		internal static void Message(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	[BepInPlugin("bouncyshield.OutOfBoundsSafe", "OutOfBoundsSafe", "1.1.0")]
	public class OutOfBoundsSafe : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_Awake <>9__5_2;

			internal void <Hooks>b__5_2(orig_Awake orig, Run self)
			{
				tooltipShown = disableTooltip.Value;
				orig.Invoke(self);
			}
		}

		public const string PluginGUID = "bouncyshield.OutOfBoundsSafe";

		public const string PluginAuthor = "bouncyshield";

		public const string PluginName = "OutOfBoundsSafe";

		public const string PluginVersion = "1.1.0";

		private bool inPod = false;

		private List<Coroutine> Basket = new List<Coroutine>();

		private List<Collider> tethered = new List<Collider>();

		private float yBound = float.MaxValue;

		private bool imscared = false;

		public static bool tooltipShown;

		private int tooltipTimer = 0;

		private float alpha;

		public static ConfigEntry<KeyCode> breakKey;

		public static ConfigEntry<float> buffer;

		public static ConfigEntry<bool> disableTooltip;

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			Configs();
			Hooks();
			Assets.Init();
		}

		private void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_005d: 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_0068: Expected O, but got Unknown
			MapZone.TryZoneStart += new hook_TryZoneStart(HitBound);
			Stage.onStageStartGlobal += OnStageStartGlobal;
			SurvivorPodController.OnPassengerEnter += (hook_OnPassengerEnter)delegate(orig_OnPassengerEnter orig, SurvivorPodController a, GameObject b)
			{
				inPod = true;
				orig.Invoke(a, b);
			};
			SurvivorPodController.OnPassengerExit += (hook_OnPassengerExit)delegate(orig_OnPassengerExit orig, SurvivorPodController a, GameObject b)
			{
				inPod = false;
				orig.Invoke(a, b);
			};
			object obj = <>c.<>9__5_2;
			if (obj == null)
			{
				hook_Awake val = delegate(orig_Awake orig, Run self)
				{
					tooltipShown = disableTooltip.Value;
					orig.Invoke(self);
				};
				<>c.<>9__5_2 = val;
				obj = (object)val;
			}
			Run.Awake += (hook_Awake)obj;
		}

		private void OnStageStartGlobal(Stage stage)
		{
			ClearBasket(stage);
			GetBound(stage);
		}

		private void HitBound(orig_TryZoneStart orig, MapZone self, Collider other)
		{
			//IL_003f: 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)
			if (inPod)
			{
				Log.Debug("SurvivorPod passed through " + ((Object)((Component)self).gameObject).name);
				return;
			}
			string text = ((Object)((Component)self).gameObject).name.ToLower();
			Scene activeScene = SceneManager.GetActiveScene();
			string name = ((Scene)(ref activeScene)).name;
			bool flag = name == "limbo" || name == "mysteryworld" || name.Contains("artifactworld") || !(text.Contains("orb") | text.Contains("altar") | (text.Contains("map") && !text.Contains("holder")) | text.Contains("kickout") | text.Contains("fightstart"));
			CharacterBody component = ((Component)other).GetComponent<CharacterBody>();
			bool flag2 = component != null && component.isPlayerControlled;
			if (flag && flag2)
			{
				Basket.Add(((MonoBehaviour)this).StartCoroutine(Tether(orig, self, other)));
			}
			else if (!flag && flag2)
			{
				Log.Debug("Allowed " + ((Object)((Component)self).gameObject).name + " to warp " + ((Object)other).name);
				orig.Invoke(self, other);
			}
			else
			{
				orig.Invoke(self, other);
			}
		}

		private void ClearBasket(Stage x)
		{
			Basket.Clear();
		}

		private IEnumerator Tether(orig_TryZoneStart orig, MapZone self, Collider other)
		{
			if (tethered.Contains(other))
			{
				yield break;
			}
			tethered.Add(other);
			CheckTooltip();
			string tetherName = ((Object)other).name + " to " + ((Object)self).name;
			Log.Info("Tether " + tetherName + " created");
			string breakReason;
			while (true)
			{
				if ((Object)(object)self == (Object)null)
				{
					breakReason = "MapZone null";
					break;
				}
				if ((Object)(object)other == (Object)null)
				{
					breakReason = "Collider null";
					break;
				}
				if (((Component)other).transform.localPosition.y < yBound)
				{
					breakReason = "fell OOB";
					orig.Invoke(self, other);
					break;
				}
				if (imscared)
				{
					breakReason = "EEK!";
					orig.Invoke(self, other);
					imscared = false;
					break;
				}
				if (Object.op_Implicit((Object)(object)Assets.Tooltip))
				{
					tooltipTimer++;
					if (tooltipTimer >= 30)
					{
						Assets.Tooltip.SetActive(false);
					}
				}
				yield return (object)new WaitForSeconds(0.5f);
			}
			if (Object.op_Implicit((Object)(object)Assets.Tooltip) && Assets.Tooltip.activeInHierarchy)
			{
				Assets.Tooltip.SetActive(false);
				Snake();
			}
			tethered.Remove(other);
			Log.Info("Tether " + tetherName + " broke (" + breakReason + ")");
		}

		private void GetBound(Stage stage)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: 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_0055: Unknown result type (might be due to invalid IL or missing references)
			float num = float.MaxValue;
			SceneInfo instance = SceneInfo.instance;
			NodeGraph val = ((instance != null) ? instance.groundNodes : null);
			if ((Object)(object)val != (Object)null)
			{
				Node[] nodes = val.nodes;
				foreach (Node val2 in nodes)
				{
					if (val2.position.y < num)
					{
						num = val2.position.y;
					}
				}
			}
			if (num == float.MaxValue)
			{
				Log.Warning("Could not find a lower bound for the scene, OOB mechanics will not work");
			}
			else
			{
				Log.Debug($"Lower bound at y = {num} (- {buffer.Value})");
			}
			yBound = num - buffer.Value;
		}

		public void Update()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			if (Input.GetKeyDown(breakKey.Value) && tethered.Count > 0)
			{
				imscared = true;
			}
		}

		private void CheckTooltip()
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			if (!tooltipShown && (Object)(object)Assets.Tooltip != (Object)null)
			{
				Assets.Tooltip.SetActive(true);
				((TMP_Text)Assets.Tooltip.GetComponentInChildren<HGTextMeshProUGUI>()).text = $"Press {breakKey.Value} to return in bounds!";
				tooltipShown = true;
			}
		}

		private void Snake()
		{
			if ((Object)(object)Assets.SnakeIcon != (Object)null)
			{
				Assets.SnakeIcon.SetActive(true);
				((MonoBehaviour)this).StartCoroutine(Fade());
			}
		}

		private IEnumerator Fade()
		{
			alpha = 1f;
			((Graphic)Assets.SnakeImage).color = new Color(1f, 1f, 1f, alpha);
			while (alpha >= 0f)
			{
				yield return (object)new WaitForSeconds(0.04f);
				alpha -= 0.01f * (2f - alpha);
				try
				{
					((Graphic)Assets.SnakeImage).color = new Color(1f, 1f, 1f, alpha);
				}
				catch
				{
				}
			}
		}

		private void Configs()
		{
			breakKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("OOBSafe", "Panic Button", (KeyCode)98, "Key to manually return in bounds");
			buffer = ((BaseUnityPlugin)this).Config.Bind<float>("OOBSafe", "Fall Buffer", 600f, "How far you can fall out of the map (in y coords) before you are automatically returned in bounds.");
			disableTooltip = ((BaseUnityPlugin)this).Config.Bind<bool>("OOBSafe", "Disable Tooltip", false, "Disables the 15 second tooltip shown on first boundary break per run");
		}
	}
}
namespace OutOfBoundsSafe.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)
				{
					ResourceManager resourceManager = new ResourceManager("OutOfBoundsSafe.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

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

		internal Resources()
		{
		}
	}
}