Decompiled source of Cinnamon v0.11.0

BepInEx/plugins/Cinnamon/Cinnamon.dll

Decompiled 2 weeks ago
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyMetadata("AI_Assisted_Creation", "This assembly was partially created with the assistance of generative AI for packaging, refactoring, and documentation.")]
[assembly: AssemblyMetadata("AI_Model_Vendor", "Anthropic/OpenAI")]
[assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.11.0.0")]
[module: UnverifiableCode]
namespace Cinnamon
{
	[HarmonyPatch(typeof(TabletStatsScreen), "UpdateStats")]
	internal static class TabletStatsVersionPatch
	{
		private static void Postfix(TabletStatsScreen __instance)
		{
			if ((Object)(object)__instance.VersionNumber != (Object)null)
			{
				TabletTextLabel versionNumber = __instance.VersionNumber;
				versionNumber.text = versionNumber.text + "\nCinnamon v" + Plugin.VersionString;
			}
		}
	}
	[HarmonyPatch(typeof(GameState), "OnGUI")]
	internal static class GameStateVersionPatch
	{
		private static GUIStyle _style;

		private static void Postfix()
		{
			//IL_0098: 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_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			if (ControllerMonitor.Instance.IsMainControllerSet && PlayerManager.GetInstance().FirstUserLoggedIn && !StatTracker.Instance.GetSaveFileDataForMainUser().HideVersion)
			{
				if (_style == null)
				{
					_style = new GUIStyle
					{
						font = GameSettings.GetInstance().onlineBetaMessageFont,
						fontSize = 11,
						alignment = (TextAnchor)6
					};
					_style.normal.textColor = new Color(1f, 1f, 1f, 0.3f);
				}
				GUI.Label(new Rect(5f, 20f, 200f, 16f), "Cin v" + Plugin.VersionString, _style);
			}
		}
	}
	[BepInPlugin("com.osqat.cinnamon", "Cinnamon", "0.11.0")]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Log;

		internal static string VersionString => Assembly.GetExecutingAssembly().GetName().Version.ToString(3) + " (Thunderstore)";

		private void Awake()
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			Log = ((BaseUnityPlugin)this).Logger;
			Log.LogInfo((object)("[Cinnamon] loaded v" + VersionString + "."));
			new Harmony("com.osqat.cinnamon").PatchAll();
		}
	}
}
namespace Cinnamon.UI
{
	public static class CursorOverlay
	{
		public static bool DebugLogging
		{
			get
			{
				return CursorOverlayHost.EnsureExists().DebugLogging;
			}
			set
			{
				CursorOverlayHost.EnsureExists().DebugLogging = value;
			}
		}

		public static bool IsReady => CursorOverlayHost.EnsureExists().IsCursorReady();

		public static bool AcceptHeld => CursorOverlayHost.Instance?.AcceptHeld ?? false;

		public static bool AcceptReleased => CursorOverlayHost.Instance?.AcceptReleased ?? false;

		public static void EnsureHost()
		{
			CursorOverlayHost.EnsureExists();
		}

		public static void Request()
		{
			CursorOverlayHost.EnsureExists().Request();
		}

		public static bool TryGetPointerPosition(out Vector2 guiPos)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			CursorOverlayHost instance = CursorOverlayHost.Instance;
			if ((Object)(object)instance == (Object)null)
			{
				guiPos = default(Vector2);
				return false;
			}
			return instance.TryGetPointerPosition(out guiPos);
		}

		public static bool ConsumeAcceptPressed()
		{
			return CursorOverlayHost.Instance?.ConsumeAcceptPressed() ?? false;
		}
	}
	internal class CursorOverlayHost : MonoBehaviour, InputReceiver
	{
		private class MirrorRenderer
		{
			public GameObject GameObject;

			public SpriteRenderer Renderer;
		}

		private const int MirrorLayer = 31;

		private static readonly Vector3 MirrorOrigin = new Vector3(50000f, 50000f, 0f);

		private static CursorOverlayHost _instance;

		private Cursor _cursor;

		private Transform _cursorRoot;

		private Camera _cursorCam;

		private int _refsFrame = -1;

		private int _requestedFrame = -999;

		private bool _registeredGlobalReceiver;

		private bool _active;

		private readonly Dictionary<SpriteRenderer, Color> _hiddenColors = new Dictionary<SpriteRenderer, Color>();

		private readonly List<SpriteRenderer> _sourceRenderers = new List<SpriteRenderer>();

		private readonly List<MirrorRenderer> _mirrorRenderers = new List<MirrorRenderer>();

		private GameObject _mirrorRoot;

		private Camera _mirrorCam;

		private RenderTexture _mirrorRt;

		private Rect _drawRect;

		private bool _hasDrawRect;

		private bool _acceptHeld;

		private int _acceptPressedFrame = -999;

		private int _acceptConsumedFrame = -999;

		private int _acceptReleasedFrame = -999;

		public bool DebugLogging { get; set; }

		internal static CursorOverlayHost Instance => _instance;

		public bool AcceptHeld => _acceptHeld;

		public bool AcceptReleased => _acceptReleasedFrame >= Time.frameCount - 1;

		public static CursorOverlayHost EnsureExists()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			if ((Object)(object)_instance != (Object)null)
			{
				return _instance;
			}
			GameObject val = new GameObject("Cinnamon.CursorOverlay");
			Object.DontDestroyOnLoad((Object)val);
			_instance = val.AddComponent<CursorOverlayHost>();
			return _instance;
		}

		private void Awake()
		{
			RegisterGlobalReceiver();
		}

		public bool IsCursorReady()
		{
			EnsureCursorRefs(forLogPass: false);
			return (Object)(object)_cursorRoot != (Object)null;
		}

		public void Request()
		{
			_requestedFrame = Time.frameCount;
			RegisterGlobalReceiver();
		}

		private void LateUpdate()
		{
			if (_requestedFrame >= Time.frameCount - 1)
			{
				EnterOrUpdateActive();
			}
			else if (_active)
			{
				ExitActive();
			}
		}

		private void EnterOrUpdateActive()
		{
			//IL_0056: 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_006e: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			RestoreHiddenRenderers();
			EnsureCursorRefs(forLogPass: false);
			if ((Object)(object)_cursorRoot == (Object)null)
			{
				ExitActive();
				return;
			}
			_active = true;
			Cursor.visible = false;
			CollectSourceRenderers();
			if (_sourceRenderers.Count == 0)
			{
				_hasDrawRect = false;
				return;
			}
			Bounds bounds = ((Renderer)_sourceRenderers[0]).bounds;
			for (int i = 1; i < _sourceRenderers.Count; i++)
			{
				((Bounds)(ref bounds)).Encapsulate(((Renderer)_sourceRenderers[i]).bounds);
			}
			if (!PrepareDrawRect(bounds))
			{
				_hasDrawRect = false;
				return;
			}
			EnsureMirrorObjects(_sourceRenderers.Count);
			SyncMirror(bounds);
			if (RenderMirror(bounds))
			{
				HideSourceRenderers();
			}
			else
			{
				_hasDrawRect = false;
			}
		}

		private void ExitActive()
		{
			RestoreHiddenRenderers();
			ClearMirrorRenderers();
			ReleaseRenderTexture();
			_hasDrawRect = false;
			_active = false;
			_acceptHeld = false;
			Cursor.visible = true;
		}

		private void CollectSourceRenderers()
		{
			_sourceRenderers.Clear();
			SpriteRenderer[] componentsInChildren = ((Component)_cursorRoot).GetComponentsInChildren<SpriteRenderer>(false);
			SpriteRenderer val = null;
			foreach (SpriteRenderer val2 in componentsInChildren)
			{
				if (!((Object)(object)val2 == (Object)null) && ((Renderer)val2).enabled && !((Object)(object)val2.sprite == (Object)null))
				{
					val = val2;
					break;
				}
			}
			if ((Object)(object)val == (Object)null)
			{
				return;
			}
			_sourceRenderers.Add(val);
			foreach (SpriteRenderer val3 in componentsInChildren)
			{
				if (!((Object)(object)val3 == (Object)null) && !((Object)(object)val3 == (Object)(object)val) && ((Renderer)val3).enabled && !((Object)(object)val3.sprite == (Object)null) && ((Component)val3).transform.IsChildOf(((Component)val).transform))
				{
					_sourceRenderers.Add(val3);
				}
			}
		}

		private void HideSourceRenderers()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_0046: Unknown result type (might be due to invalid IL or missing references)
			_hiddenColors.Clear();
			for (int i = 0; i < _sourceRenderers.Count; i++)
			{
				SpriteRenderer val = _sourceRenderers[i];
				if (!((Object)(object)val == (Object)null))
				{
					Color color = val.color;
					_hiddenColors[val] = color;
					color.a = 0f;
					val.color = color;
				}
			}
		}

		private void RestoreHiddenRenderers()
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			foreach (KeyValuePair<SpriteRenderer, Color> hiddenColor in _hiddenColors)
			{
				if ((Object)(object)hiddenColor.Key != (Object)null)
				{
					hiddenColor.Key.color = hiddenColor.Value;
				}
			}
			_hiddenColors.Clear();
		}

		private bool PrepareDrawRect(Bounds worldBounds)
		{
			//IL_002a: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_0056: 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_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: 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_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//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_00d2: 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_00e3: 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_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: 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)
			Camera val = (((Object)(object)_cursorCam != (Object)null) ? _cursorCam : Camera.main);
			if ((Object)(object)val == (Object)null)
			{
				return false;
			}
			Vector3 val2 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref worldBounds)).min.x, ((Bounds)(ref worldBounds)).min.y, ((Bounds)(ref worldBounds)).center.z));
			Vector3 val3 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref worldBounds)).max.x, ((Bounds)(ref worldBounds)).max.y, ((Bounds)(ref worldBounds)).center.z));
			if (val2.z < 0f || val3.z < 0f)
			{
				return false;
			}
			Vector2 val4 = GUIUtility.ScreenToGUIPoint(new Vector2(val2.x, val2.y));
			Vector2 val5 = GUIUtility.ScreenToGUIPoint(new Vector2(val3.x, val3.y));
			float x = val4.x;
			float y = val5.y;
			float num = val5.x - val4.x;
			float num2 = val4.y - val5.y;
			if (num <= 0f || num2 <= 0f)
			{
				return false;
			}
			_drawRect = new Rect(x, y, num, num2);
			_hasDrawRect = true;
			return true;
		}

		private void EnsureMirrorObjects(int count)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Expected O, but got Unknown
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_mirrorRoot == (Object)null)
			{
				_mirrorRoot = new GameObject("Cinnamon.CursorMirror.Root");
				((Object)_mirrorRoot).hideFlags = (HideFlags)61;
				_mirrorRoot.layer = 31;
			}
			while (_mirrorRenderers.Count < count)
			{
				GameObject val = new GameObject("Cinnamon.CursorMirror.Sprite");
				((Object)val).hideFlags = (HideFlags)61;
				val.layer = 31;
				val.transform.parent = _mirrorRoot.transform;
				SpriteRenderer renderer = val.AddComponent<SpriteRenderer>();
				_mirrorRenderers.Add(new MirrorRenderer
				{
					GameObject = val,
					Renderer = renderer
				});
			}
			for (int i = 0; i < _mirrorRenderers.Count; i++)
			{
				_mirrorRenderers[i].GameObject.SetActive(i < count);
			}
			if ((Object)(object)_mirrorCam == (Object)null)
			{
				GameObject val2 = new GameObject("Cinnamon.CursorMirror.Camera");
				((Object)val2).hideFlags = (HideFlags)61;
				_mirrorCam = val2.AddComponent<Camera>();
				((Behaviour)_mirrorCam).enabled = false;
				_mirrorCam.orthographic = true;
				_mirrorCam.cullingMask = int.MinValue;
				_mirrorCam.clearFlags = (CameraClearFlags)2;
				_mirrorCam.backgroundColor = new Color(0f, 0f, 0f, 0f);
				_mirrorCam.nearClipPlane = 0.01f;
				_mirrorCam.farClipPlane = 100f;
				_mirrorCam.allowHDR = false;
				_mirrorCam.allowMSAA = false;
			}
		}

		private void SyncMirror(Bounds worldBounds)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: 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_004b: 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)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = MirrorOrigin - ((Bounds)(ref worldBounds)).center;
			for (int i = 0; i < _sourceRenderers.Count; i++)
			{
				SpriteRenderer val2 = _sourceRenderers[i];
				SpriteRenderer renderer = _mirrorRenderers[i].Renderer;
				Transform transform = ((Component)renderer).transform;
				transform.position = ((Component)val2).transform.position + val;
				transform.rotation = ((Component)val2).transform.rotation;
				transform.localScale = ((Component)val2).transform.lossyScale;
				renderer.sprite = val2.sprite;
				renderer.color = val2.color;
				renderer.flipX = val2.flipX;
				renderer.flipY = val2.flipY;
				((Renderer)renderer).sortingLayerID = ((Renderer)val2).sortingLayerID;
				((Renderer)renderer).sortingOrder = ((Renderer)val2).sortingOrder;
				if ((Object)(object)((Renderer)val2).sharedMaterial != (Object)null)
				{
					((Renderer)renderer).sharedMaterial = ((Renderer)val2).sharedMaterial;
				}
			}
		}

		private bool RenderMirror(Bounds worldBounds)
		{
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_mirrorCam == (Object)null || !_hasDrawRect)
			{
				return false;
			}
			int width = Mathf.Clamp(Mathf.CeilToInt(((Rect)(ref _drawRect)).width), 1, 1024);
			int height = Mathf.Clamp(Mathf.CeilToInt(((Rect)(ref _drawRect)).height), 1, 1024);
			EnsureRenderTexture(width, height);
			if ((Object)(object)_mirrorRt == (Object)null)
			{
				return false;
			}
			Vector3 mirrorOrigin = MirrorOrigin;
			float num = Mathf.Max(0.001f, ((Bounds)(ref worldBounds)).size.x);
			float num2 = Mathf.Max(0.001f, ((Bounds)(ref worldBounds)).size.y);
			((Component)_mirrorCam).transform.position = new Vector3(mirrorOrigin.x, mirrorOrigin.y, mirrorOrigin.z - 10f);
			((Component)_mirrorCam).transform.rotation = Quaternion.identity;
			_mirrorCam.orthographicSize = num2 * 0.5f;
			_mirrorCam.aspect = num / num2;
			_mirrorCam.targetTexture = _mirrorRt;
			_mirrorCam.Render();
			return true;
		}

		private void EnsureRenderTexture(int width, int height)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			if (!((Object)(object)_mirrorRt != (Object)null) || ((Texture)_mirrorRt).width != width || ((Texture)_mirrorRt).height != height)
			{
				ReleaseRenderTexture();
				_mirrorRt = new RenderTexture(width, height, 0, (RenderTextureFormat)0);
				((Object)_mirrorRt).hideFlags = (HideFlags)61;
				_mirrorRt.Create();
			}
		}

		private void ReleaseRenderTexture()
		{
			if ((Object)(object)_mirrorCam != (Object)null)
			{
				_mirrorCam.targetTexture = null;
			}
			if ((Object)(object)_mirrorRt != (Object)null)
			{
				_mirrorRt.Release();
				Object.Destroy((Object)(object)_mirrorRt);
				_mirrorRt = null;
			}
		}

		private void ClearMirrorRenderers()
		{
			for (int i = 0; i < _mirrorRenderers.Count; i++)
			{
				if ((Object)(object)_mirrorRenderers[i].GameObject != (Object)null)
				{
					Object.Destroy((Object)(object)_mirrorRenderers[i].GameObject);
				}
			}
			_mirrorRenderers.Clear();
			if ((Object)(object)_mirrorRoot != (Object)null)
			{
				Object.Destroy((Object)(object)_mirrorRoot);
				_mirrorRoot = null;
			}
			if ((Object)(object)_mirrorCam != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)_mirrorCam).gameObject);
				_mirrorCam = null;
			}
		}

		private void EnsureCursorRefs(bool forLogPass)
		{
			if (_refsFrame == Time.frameCount)
			{
				return;
			}
			_refsFrame = Time.frameCount;
			Cursor cursor = null;
			Transform val = null;
			Camera cursorCam = null;
			int num = int.MinValue;
			Cursor[] array = Object.FindObjectsOfType<Cursor>();
			if (forLogPass)
			{
				ManualLogSource log = Plugin.Log;
				if (log != null)
				{
					log.LogInfo((object)("[Cinnamon] candidates: " + array.Length + " Cursor object(s)"));
				}
			}
			foreach (Cursor val2 in array)
			{
				if ((Object)(object)val2 == (Object)null)
				{
					continue;
				}
				Transform transform = ((Component)val2).transform;
				if (!((Component)transform).gameObject.activeInHierarchy)
				{
					continue;
				}
				SpriteRenderer componentInChildren = ((Component)transform).GetComponentInChildren<SpriteRenderer>(false);
				bool flag = (Object)(object)componentInChildren != (Object)null && ((Renderer)componentInChildren).enabled && (Object)(object)componentInChildren.sprite != (Object)null;
				bool flag2 = (Object)(object)_cursorRoot == (Object)(object)transform;
				Camera val3 = (((Object)(object)val2.UseCamera != (Object)null && ((Behaviour)val2.UseCamera).enabled) ? val2.UseCamera : Camera.main);
				if ((Object)(object)val3 == (Object)null && flag)
				{
					int num2 = 1 << ((Component)componentInChildren).gameObject.layer;
					Camera[] allCameras = Camera.allCameras;
					foreach (Camera val4 in allCameras)
					{
						if ((Object)(object)val4 != (Object)null && ((Behaviour)val4).enabled && (val4.cullingMask & num2) != 0)
						{
							val3 = val4;
							break;
						}
					}
				}
				if (!((Object)(object)val3 == (Object)null))
				{
					int num3 = (flag ? ((Renderer)componentInChildren).sortingOrder : (-2147483647));
					bool flag3 = (Object)(object)val == (Object)(object)_cursorRoot;
					bool flag4 = flag2 && !flag3;
					bool flag5 = num3 > num && !flag3;
					if ((Object)(object)val == (Object)null || flag4 || flag5)
					{
						cursor = val2;
						val = transform;
						cursorCam = val3;
						num = num3;
					}
				}
			}
			if ((Object)(object)val != (Object)null)
			{
				_cursor = cursor;
				_cursorRoot = val;
				_cursorCam = cursorCam;
			}
			else if ((Object)(object)_cursorRoot != (Object)null && !((Component)_cursorRoot).gameObject.activeInHierarchy)
			{
				_cursor = null;
				_cursorRoot = null;
				_cursorCam = null;
			}
		}

		private void OnGUI()
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			if (_active && _hasDrawRect && !((Object)(object)_mirrorRt == (Object)null))
			{
				GUI.depth = -32000;
				GUI.DrawTexture(_drawRect, (Texture)(object)_mirrorRt);
			}
		}

		public bool ConsumeAcceptPressed()
		{
			if (_acceptPressedFrame < Time.frameCount - 1)
			{
				return false;
			}
			if (_acceptConsumedFrame == _acceptPressedFrame)
			{
				return false;
			}
			_acceptConsumedFrame = _acceptPressedFrame;
			return true;
		}

		public bool TryGetPointerPosition(out Vector2 guiPos)
		{
			//IL_0001: 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_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: 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_00c0: Unknown result type (might be due to invalid IL or missing references)
			guiPos = default(Vector2);
			if (_requestedFrame < Time.frameCount - 1)
			{
				return false;
			}
			EnsureCursorRefs(forLogPass: false);
			if ((Object)(object)_cursorRoot == (Object)null)
			{
				return false;
			}
			Camera val = (((Object)(object)_cursorCam != (Object)null) ? _cursorCam : Camera.main);
			if ((Object)(object)val == (Object)null)
			{
				return false;
			}
			PickCursor component = ((Component)_cursorRoot).GetComponent<PickCursor>();
			Vector3 val2 = (((Object)(object)component != (Object)null && (Object)(object)component.cursorPoint != (Object)null) ? component.cursorPoint.position : _cursorRoot.position);
			Vector3 val3 = val.WorldToScreenPoint(val2);
			if (val3.z < 0f)
			{
				return false;
			}
			guiPos = GUIUtility.ScreenToGUIPoint(new Vector2(val3.x, val3.y));
			return true;
		}

		public void ReceiveEvent(InputEvent e)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			if (e == null || (int)e.Key != 21 || _requestedFrame < Time.frameCount - 1 || (Object)(object)e.Sender == (Object)null || e.Sender.IsKeyboard)
			{
				return;
			}
			Controller val = (((Object)(object)_cursor != (Object)null && _cursor.LocalPlayer != null) ? _cursor.LocalPlayer.UseController : null);
			if ((Object)(object)val != (Object)null && (Object)(object)e.Sender != (Object)(object)val)
			{
				return;
			}
			_acceptHeld = e.Valueb;
			if (e.Changed)
			{
				if (e.Valueb)
				{
					_acceptPressedFrame = Time.frameCount;
				}
				else
				{
					_acceptReleasedFrame = Time.frameCount;
				}
			}
		}

		private void RegisterGlobalReceiver()
		{
			if (!_registeredGlobalReceiver)
			{
				Controller.AddGlobalReceiver((InputReceiver)(object)this);
				_registeredGlobalReceiver = true;
			}
		}

		private void OnDestroy()
		{
			ExitActive();
			if (_registeredGlobalReceiver)
			{
				Controller.RemoveGlobalReceiver((InputReceiver)(object)this);
				_registeredGlobalReceiver = false;
			}
			if ((Object)(object)_instance == (Object)(object)this)
			{
				_instance = null;
			}
		}
	}
}