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 _hiddenColors = new Dictionary(); private readonly List _sourceRenderers = new List(); private readonly List _mirrorRenderers = new List(); 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(); 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(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 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(); _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(); ((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(); 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(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(); 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; } } } }