using System;
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.10.14.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.10.14")]
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 void EnsureHost()
{
CursorOverlayHost.EnsureExists();
}
public static void Request()
{
CursorOverlayHost.EnsureExists().Request();
}
}
internal class CursorOverlayHost : MonoBehaviour
{
private static CursorOverlayHost _instance;
private Transform _cursorRoot;
private Camera _cursorCam;
private int _refsFrame = -1;
private int _requestedFrame = -999;
private bool _loggedOnce;
private bool _active;
private SpriteRenderer _hiddenSr;
private Color _hiddenSrOriginalColor;
private Sprite _activeSprite;
private Texture2D _activeTex;
private readonly Dictionary<Sprite, Texture2D> _extractedCache = new Dictionary<Sprite, Texture2D>();
public bool DebugLogging { get; set; }
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;
}
public bool IsCursorReady()
{
EnsureCursorRefs(forLogPass: false);
if ((Object)(object)_cursorRoot != (Object)null)
{
return (Object)(object)((Component)_cursorRoot).GetComponentInChildren<SpriteRenderer>(false) != (Object)null;
}
return false;
}
public void Request()
{
_requestedFrame = Time.frameCount;
}
private void LateUpdate()
{
bool flag = _requestedFrame >= Time.frameCount - 1;
if (_active && (Object)(object)_hiddenSr == (Object)null)
{
ExitActive();
}
else if (flag)
{
EnterOrUpdateActive();
}
else if (_active)
{
ExitActive();
}
}
private void EnterOrUpdateActive()
{
//IL_00ea: 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_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: 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_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
//IL_033c: Unknown result type (might be due to invalid IL or missing references)
//IL_0375: Unknown result type (might be due to invalid IL or missing references)
EnsureCursorRefs(DebugLogging && !_loggedOnce);
SpriteRenderer val = null;
if ((Object)(object)_cursorRoot != (Object)null)
{
SpriteRenderer[] componentsInChildren = ((Component)_cursorRoot).GetComponentsInChildren<SpriteRenderer>(false);
int num = int.MinValue;
SpriteRenderer[] array = componentsInChildren;
foreach (SpriteRenderer val2 in array)
{
if (!((Object)(object)val2 == (Object)null) && !((Object)(object)val2.sprite == (Object)null) && ((Renderer)val2).enabled && ((Renderer)val2).sortingOrder >= num)
{
num = ((Renderer)val2).sortingOrder;
val = val2;
}
}
}
if ((Object)(object)val == (Object)null)
{
if (DebugLogging && !_loggedOnce)
{
_loggedOnce = true;
ManualLogSource log = Plugin.Log;
if (log != null)
{
log.LogInfo((object)"[Cinnamon] activate bail: no usable SpriteRenderer on selected cursor root");
}
}
if (_active)
{
ExitActive();
}
return;
}
if (!_active)
{
_hiddenSr = val;
_hiddenSrOriginalColor = val.color;
_active = true;
if (DebugLogging)
{
ManualLogSource log2 = Plugin.Log;
if (log2 != null)
{
object[] obj = new object[4]
{
((Object)val.sprite).name,
null,
null,
null
};
Texture2D texture = val.sprite.texture;
obj[1] = ((texture != null) ? ((Object)texture).name : null);
obj[2] = val.sprite.pivot;
obj[3] = val.sprite.textureRect;
log2.LogInfo((object)string.Format("[Cinnamon] enter Active: sprite='{0}' tex='{1}' pivot={2} rect={3}", obj));
}
}
}
else if ((Object)(object)_hiddenSr != (Object)(object)val)
{
if ((Object)(object)_hiddenSr != (Object)null)
{
_hiddenSr.color = _hiddenSrOriginalColor;
}
_hiddenSr = val;
_hiddenSrOriginalColor = val.color;
}
Color hiddenSrOriginalColor = _hiddenSrOriginalColor;
hiddenSrOriginalColor.a = 0f;
val.color = hiddenSrOriginalColor;
Cursor.visible = false;
Sprite sprite = val.sprite;
if ((Object)(object)sprite == (Object)null)
{
return;
}
ComputeOnScreenSize(val, out var w, out var h);
Texture2D orExtract = GetOrExtract(val, w, h);
if ((Object)(object)orExtract == (Object)null)
{
if (DebugLogging && !_loggedOnce)
{
_loggedOnce = true;
ManualLogSource log3 = Plugin.Log;
if (log3 != null)
{
string[] obj2 = new string[5]
{
"[Cinnamon] extract failed: sprite='",
((Object)sprite).name,
"' tex='",
null,
null
};
Texture2D texture2 = sprite.texture;
obj2[3] = ((texture2 != null) ? ((Object)texture2).name : null);
obj2[4] = "'";
log3.LogInfo((object)string.Concat(obj2));
}
}
}
else
{
if (sprite == _activeSprite && orExtract == _activeTex)
{
return;
}
_activeSprite = sprite;
_activeTex = orExtract;
if (DebugLogging && !_loggedOnce)
{
_loggedOnce = true;
Rect textureRect = sprite.textureRect;
ManualLogSource log4 = Plugin.Log;
if (log4 != null)
{
object[] obj3 = new object[10]
{
((Object)sprite).name,
((Rect)(ref textureRect)).width,
((Rect)(ref textureRect)).height,
((Texture)orExtract).width,
((Texture)orExtract).height,
val.flipX,
val.flipY,
_cursorRoot.lossyScale,
null,
null
};
Texture2D texture3 = sprite.texture;
obj3[8] = ((texture3 != null) ? ((Object)texture3).name : null);
Texture2D texture4 = sprite.texture;
obj3[9] = ((texture4 != null) ? new TextureFormat?(texture4.format) : null);
log4.LogInfo((object)string.Format("[Cinnamon] DrawCursor: sprite='{0}' src={1:F0}x{2:F0} target={3}x{4} flipX={5} flipY={6} lossy={7} src_tex='{8}' fmt={9}", obj3));
}
}
}
}
private Vector2 FindTipHotspot(Texture2D tex)
{
//IL_0021: 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_0149: 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_0143: Unknown result type (might be due to invalid IL or missing references)
int width = ((Texture)tex).width;
int height = ((Texture)tex).height;
Color32[] pixels;
try
{
pixels = tex.GetPixels32();
}
catch
{
return new Vector2((float)(width - 1), 0f);
}
long num = 0L;
long num2 = 0L;
int num3 = 0;
for (int i = 0; i < height; i++)
{
int num4 = i * width;
for (int j = 0; j < width; j++)
{
if (pixels[num4 + j].a > 128)
{
num += j;
num2 += i;
num3++;
}
}
}
if (num3 == 0)
{
return new Vector2((float)(width - 1), 0f);
}
float num5 = (float)num / (float)num3;
float num6 = (float)num2 / (float)num3;
float num7 = float.MinValue;
int num8 = width - 1;
int num9 = height - 1;
float num10 = 1f / (float)width;
float num11 = 1f / (float)height;
for (int k = 0; k < height; k++)
{
int num12 = k * width;
for (int l = 0; l < width; l++)
{
if (pixels[num12 + l].a > 128)
{
float num13 = ((float)l - num5) * num10 + ((float)k - num6) * num11;
if (num13 > num7)
{
num7 = num13;
num8 = l;
num9 = k;
}
}
}
}
int num14 = height - 1 - num9;
return new Vector2((float)num8, (float)num14);
}
private void ComputeOnScreenSize(SpriteRenderer sr, out int w, out int h)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: 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_0060: 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)
//IL_0070: 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_0086: 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_0090: 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_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: 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)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
Rect textureRect = sr.sprite.textureRect;
w = Mathf.Max(1, Mathf.RoundToInt(((Rect)(ref textureRect)).width));
h = Mathf.Max(1, Mathf.RoundToInt(((Rect)(ref textureRect)).height));
Camera val = (((Object)(object)_cursorCam != (Object)null) ? _cursorCam : Camera.main);
if (!((Object)(object)val == (Object)null))
{
Bounds bounds = ((Renderer)sr).bounds;
Vector3 val2 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref bounds)).min.x, ((Bounds)(ref bounds)).min.y, ((Bounds)(ref bounds)).center.z));
Vector3 val3 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref bounds)).max.x, ((Bounds)(ref bounds)).max.y, ((Bounds)(ref bounds)).center.z));
int num = Mathf.RoundToInt(Mathf.Abs(val3.x - val2.x));
int num2 = Mathf.RoundToInt(Mathf.Abs(val3.y - val2.y));
if (num >= 8 && num2 >= 8)
{
w = num;
h = num2;
}
}
}
private void ExitActive()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_hiddenSr != (Object)null)
{
_hiddenSr.color = _hiddenSrOriginalColor;
_hiddenSr = null;
}
Cursor.visible = false;
_activeSprite = null;
_activeTex = null;
_active = false;
if (DebugLogging)
{
ManualLogSource log = Plugin.Log;
if (log != null)
{
log.LogInfo((object)"[Cinnamon] exit Active");
}
}
}
private Texture2D GetOrExtract(SpriteRenderer source, int targetW, int targetH)
{
Sprite sprite = source.sprite;
if ((Object)(object)sprite == (Object)null)
{
return null;
}
int num = Mathf.Max(1, targetW);
int num2 = Mathf.Max(1, targetH);
if (_extractedCache.TryGetValue(sprite, out var value) && (Object)(object)value != (Object)null)
{
if (((Texture)value).width == num && ((Texture)value).height == num2)
{
return value;
}
Object.Destroy((Object)(object)value);
_extractedCache.Remove(sprite);
}
Texture2D val = RenderSpriteViaCamera(source, num, num2);
if ((Object)(object)val != (Object)null)
{
_extractedCache[sprite] = val;
}
return val;
}
private Texture2D RenderSpriteViaCamera(SpriteRenderer source, int w, int h)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
//IL_003f: 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_005f: 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_00ca: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: 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_012f: Expected O, but got Unknown
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: 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_0221: Expected O, but got Unknown
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
GameObject val = null;
GameObject val2 = null;
RenderTexture val3 = null;
RenderTexture active = RenderTexture.active;
Texture2D val4 = null;
try
{
val = new GameObject("Cinnamon.CursorExtract.Sprite");
((Object)val).hideFlags = (HideFlags)61;
val.layer = 31;
val.transform.position = new Vector3(50000f, 50000f, 0f);
val.transform.rotation = Quaternion.identity;
val.transform.localScale = Vector3.one;
SpriteRenderer val5 = val.AddComponent<SpriteRenderer>();
val5.sprite = source.sprite;
val5.color = _hiddenSrOriginalColor;
val5.flipX = source.flipX;
val5.flipY = source.flipY;
((Renderer)val5).sortingOrder = 0;
if ((Object)(object)((Renderer)source).sharedMaterial != (Object)null)
{
((Renderer)val5).sharedMaterial = ((Renderer)source).sharedMaterial;
}
Bounds bounds = ((Renderer)val5).bounds;
float orthographicSize = Mathf.Max(0.001f, ((Bounds)(ref bounds)).size.y * 0.5f);
float aspect = ((((Bounds)(ref bounds)).size.x > 0f) ? (((Bounds)(ref bounds)).size.x / ((Bounds)(ref bounds)).size.y) : 1f);
val2 = new GameObject("Cinnamon.CursorExtract.Cam");
((Object)val2).hideFlags = (HideFlags)61;
val2.transform.position = new Vector3(((Bounds)(ref bounds)).center.x, ((Bounds)(ref bounds)).center.y, ((Bounds)(ref bounds)).center.z - 1f);
val2.transform.rotation = Quaternion.identity;
Camera obj = val2.AddComponent<Camera>();
obj.orthographic = true;
obj.orthographicSize = orthographicSize;
obj.aspect = aspect;
obj.cullingMask = int.MinValue;
obj.clearFlags = (CameraClearFlags)2;
obj.backgroundColor = new Color(0f, 0f, 0f, 0f);
obj.nearClipPlane = 0.01f;
obj.farClipPlane = 100f;
((Behaviour)obj).enabled = false;
obj.allowHDR = false;
obj.allowMSAA = false;
val3 = (obj.targetTexture = RenderTexture.GetTemporary(w, h, 0, (RenderTextureFormat)0));
obj.Render();
RenderTexture.active = val3;
val4 = new Texture2D(w, h, (TextureFormat)4, false);
val4.ReadPixels(new Rect(0f, 0f, (float)w, (float)h), 0, 0);
val4.Apply();
((Object)val4).hideFlags = (HideFlags)61;
Color32[] pixels = val4.GetPixels32();
for (int i = 0; i < pixels.Length; i++)
{
byte a = pixels[i].a;
if (a != 0 && a != byte.MaxValue)
{
float num = 255f / (float)(int)a;
pixels[i].r = (byte)Mathf.Min(255, Mathf.RoundToInt((float)(int)pixels[i].r * num));
pixels[i].g = (byte)Mathf.Min(255, Mathf.RoundToInt((float)(int)pixels[i].g * num));
pixels[i].b = (byte)Mathf.Min(255, Mathf.RoundToInt((float)(int)pixels[i].b * num));
}
}
val4.SetPixels32(pixels);
val4.Apply();
}
catch (Exception ex)
{
if (DebugLogging)
{
ManualLogSource log = Plugin.Log;
if (log != null)
{
log.LogInfo((object)("[Cinnamon] camera extract exception: " + ex.Message));
}
}
if ((Object)(object)val4 != (Object)null)
{
Object.Destroy((Object)(object)val4);
val4 = null;
}
}
finally
{
RenderTexture.active = active;
if ((Object)(object)val3 != (Object)null)
{
RenderTexture.ReleaseTemporary(val3);
}
if ((Object)(object)val != (Object)null)
{
Object.Destroy((Object)(object)val);
}
if ((Object)(object)val2 != (Object)null)
{
Object.Destroy((Object)(object)val2);
}
}
return val4;
}
private void EnsureCursorRefs(bool forLogPass)
{
//IL_0029: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_0250: Unknown result type (might be due to invalid IL or missing references)
//IL_0255: Unknown result type (might be due to invalid IL or missing references)
//IL_025b: Unknown result type (might be due to invalid IL or missing references)
//IL_0262: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
//IL_02fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0303: Unknown result type (might be due to invalid IL or missing references)
//IL_0308: Unknown result type (might be due to invalid IL or missing references)
//IL_030f: Unknown result type (might be due to invalid IL or missing references)
//IL_0316: Unknown result type (might be due to invalid IL or missing references)
//IL_031b: Unknown result type (might be due to invalid IL or missing references)
//IL_0320: Unknown result type (might be due to invalid IL or missing references)
if (_refsFrame == Time.frameCount)
{
return;
}
_refsFrame = Time.frameCount;
Transform val = null;
Camera cursorCam = null;
int num = int.MinValue;
float num2 = float.MaxValue;
Vector3 mousePosition = Input.mousePosition;
Cursor[] array = Object.FindObjectsOfType<Cursor>();
if (forLogPass)
{
ManualLogSource log = Plugin.Log;
if (log != null)
{
log.LogInfo((object)$"[Cinnamon] candidates: {array.Length} Cursor object(s)");
}
}
Cursor[] array2 = array;
foreach (Cursor val2 in array2)
{
if ((Object)(object)val2 == (Object)null)
{
continue;
}
Transform transform = ((Component)val2).transform;
bool activeInHierarchy = ((Component)transform).gameObject.activeInHierarchy;
SpriteRenderer componentInChildren = ((Component)transform).GetComponentInChildren<SpriteRenderer>(false);
bool flag = (Object)(object)componentInChildren != (Object)null && ((Renderer)componentInChildren).enabled && (Object)(object)componentInChildren.sprite != (Object)null;
float num3 = (((Object)(object)componentInChildren != (Object)null) ? componentInChildren.color.a : 0f);
Camera useCamera = val2.UseCamera;
if (forLogPass)
{
ManualLogSource log2 = Plugin.Log;
if (log2 != null)
{
log2.LogInfo((object)string.Format("[Cinnamon] '{0}' active={1} useCam={2} srOk={3} alpha={4:F2} sortOrder={5} sprite={6}", ((Object)transform).name, activeInHierarchy, Object.op_Implicit((Object)(object)useCamera) ? ((Object)useCamera).name : "null", flag, num3, Object.op_Implicit((Object)(object)componentInChildren) ? ((Renderer)componentInChildren).sortingOrder : 0, (Object.op_Implicit((Object)(object)componentInChildren) && Object.op_Implicit((Object)(object)componentInChildren.sprite)) ? ((Object)componentInChildren.sprite).name : "null"));
}
}
if (!activeInHierarchy)
{
if (forLogPass)
{
ManualLogSource log3 = Plugin.Log;
if (log3 != null)
{
log3.LogInfo((object)("[Cinnamon] reject '" + ((Object)transform).name + "': !active"));
}
}
continue;
}
if (!flag)
{
if (forLogPass)
{
ManualLogSource log4 = Plugin.Log;
if (log4 != null)
{
log4.LogInfo((object)("[Cinnamon] reject '" + ((Object)transform).name + "': srOk=false"));
}
}
continue;
}
int num4 = 1 << ((Component)componentInChildren).gameObject.layer;
Camera val3 = null;
float num5 = float.MaxValue;
Bounds bounds;
Vector2 val5;
if ((Object)(object)useCamera != (Object)null && ((Behaviour)useCamera).enabled)
{
bounds = ((Renderer)componentInChildren).bounds;
Vector3 val4 = useCamera.WorldToScreenPoint(((Bounds)(ref bounds)).center);
val3 = useCamera;
val5 = new Vector2(val4.x - mousePosition.x, val4.y - mousePosition.y);
num5 = ((Vector2)(ref val5)).sqrMagnitude;
}
if ((Object)(object)val3 == (Object)null)
{
Camera[] allCameras = Camera.allCameras;
foreach (Camera val6 in allCameras)
{
if ((Object)(object)val6 == (Object)null || !((Behaviour)val6).enabled || (val6.cullingMask & num4) == 0)
{
continue;
}
bounds = ((Renderer)componentInChildren).bounds;
Vector3 val7 = val6.WorldToScreenPoint(((Bounds)(ref bounds)).center);
if (!(val7.z <= 0f))
{
val5 = new Vector2(val7.x, val7.y) - new Vector2(mousePosition.x, mousePosition.y);
float sqrMagnitude = ((Vector2)(ref val5)).sqrMagnitude;
if (sqrMagnitude < num5)
{
num5 = sqrMagnitude;
val3 = val6;
}
}
}
}
if ((Object)(object)val3 == (Object)null)
{
if (forLogPass)
{
ManualLogSource log5 = Plugin.Log;
if (log5 != null)
{
log5.LogInfo((object)("[Cinnamon] reject '" + ((Object)transform).name + "': no camera passed"));
}
}
continue;
}
bool num6 = ((Renderer)componentInChildren).sortingOrder > num;
bool flag2 = ((Renderer)componentInChildren).sortingOrder == num && num5 < num2;
if (num6 || flag2)
{
num = ((Renderer)componentInChildren).sortingOrder;
num2 = num5;
val = transform;
cursorCam = val3;
}
}
if ((Object)(object)val != (Object)null)
{
_cursorRoot = val;
_cursorCam = cursorCam;
}
else if ((Object)(object)_cursorRoot != (Object)null && !((Component)_cursorRoot).gameObject.activeInHierarchy)
{
_cursorRoot = null;
_cursorCam = null;
}
}
private void OnGUI()
{
//IL_0052: 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_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: 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_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: 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_00cc: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: 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_00ea: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: 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)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: 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_0120: 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)
if (!_active || (Object)(object)_activeTex == (Object)null || (Object)(object)_hiddenSr == (Object)null)
{
return;
}
Camera val = (((Object)(object)_cursorCam != (Object)null) ? _cursorCam : Camera.main);
if ((Object)(object)val == (Object)null)
{
return;
}
Bounds bounds = ((Renderer)_hiddenSr).bounds;
Vector3 val2 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref bounds)).min.x, ((Bounds)(ref bounds)).min.y, ((Bounds)(ref bounds)).center.z));
Vector3 val3 = val.WorldToScreenPoint(new Vector3(((Bounds)(ref bounds)).max.x, ((Bounds)(ref bounds)).max.y, ((Bounds)(ref bounds)).center.z));
if (!(val2.z < 0f))
{
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))
{
GUI.depth = -32000;
GUI.DrawTexture(new Rect(x, y, num, num2), (Texture)(object)_activeTex);
}
}
}
private void OnDestroy()
{
if (_active)
{
ExitActive();
}
foreach (KeyValuePair<Sprite, Texture2D> item in _extractedCache)
{
if ((Object)(object)item.Value != (Object)null)
{
Object.Destroy((Object)(object)item.Value);
}
}
_extractedCache.Clear();
if ((Object)(object)_instance == (Object)(object)this)
{
_instance = null;
}
}
}
}