using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
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 Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
[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: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("Omniscye")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+a63a05b5692081e245cc708d987b8804730213b3")]
[assembly: AssemblyProduct("OmniumLib")]
[assembly: AssemblyTitle("OmniumLib")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Empress.OmniumLib
{
[BepInPlugin("dev.empress.omniumlib", "OmniumLib", "1.1.0")]
public sealed class OmniumLibPlugin : BaseUnityPlugin
{
public const string PluginGuid = "dev.empress.omniumlib";
public const string PluginName = "OmniumLib";
public const string PluginVersion = "1.1.0";
internal static ManualLogSource Log;
internal static Harmony Harmony;
private void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
Log = ((BaseUnityPlugin)this).Logger;
Harmony = new Harmony("dev.empress.omniumlib");
if ((Object)(object)OmnLibHost.Instance == (Object)null)
{
OmnLibHost.Create();
}
SceneManager.sceneLoaded += delegate(Scene scene, LoadSceneMode mode)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
try
{
Events.RaiseSceneLoaded(scene, mode);
}
catch (Exception arg)
{
Log.LogError((object)$"[OmniumLib] Events.RaiseSceneLoaded failed: {arg}");
}
};
((BaseUnityPlugin)this).Logger.LogInfo((object)"OmniumLib 1.1.0 ready.");
}
private void OnDestroy()
{
try
{
Harmony harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
catch
{
}
}
}
public static class Events
{
public static event Action<Scene, LoadSceneMode> SceneLoaded;
public static event Action BundlesReady;
public static event Action<bool> FocusChanged;
internal static void RaiseSceneLoaded(Scene s, LoadSceneMode m)
{
//IL_000b: 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)
Events.SceneLoaded?.Invoke(s, m);
}
internal static void RaiseBundlesReady()
{
Events.BundlesReady?.Invoke();
}
internal static void RaiseFocus(bool hasFocus)
{
Events.FocusChanged?.Invoke(hasFocus);
}
}
public sealed class OmnLibHost : MonoBehaviour
{
public static OmnLibHost Instance { get; internal set; }
public static void Create()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
if (!Object.op_Implicit((Object)(object)Instance))
{
GameObject val = new GameObject("OmniumLibHost");
Object.DontDestroyOnLoad((Object)(object)val);
Instance = val.AddComponent<OmnLibHost>();
}
}
public void Run(IEnumerator routine)
{
((MonoBehaviour)this).StartCoroutine(routine);
}
}
public static class BundleGate
{
[CompilerGenerated]
private sealed class <>c__DisplayClass0_0
{
public bool eventFired;
internal void <WaitForRepoLibBundles>b__0()
{
eventFired = true;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass0_1
{
public FieldInfo opsField;
internal int <WaitForRepoLibBundles>b__1()
{
object value = opsField.GetValue(null);
if (value is ICollection collection)
{
return collection.Count;
}
PropertyInfo propertyInfo = value?.GetType().GetProperty("Count", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
return (propertyInfo != null) ? ((int)propertyInfo.GetValue(value)) : 0;
}
}
[CompilerGenerated]
private sealed class <WaitForRepoLibBundles>d__0 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public float timeoutSec;
public float pollSec;
public bool verbose;
private <>c__DisplayClass0_0 <>8__1;
private float <timeout>5__2;
private float <poll>5__3;
private float <deadline>5__4;
private Type <bundleLoader>5__5;
private Delegate <evtHandler>5__6;
private Func<int> <getOps>5__7;
private EventInfo <onAllLoaded>5__8;
private Action <handler>5__9;
private Exception <e>5__10;
private <>c__DisplayClass0_1 <>8__11;
private string <why>5__12;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <WaitForRepoLibBundles>d__0(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>8__1 = null;
<bundleLoader>5__5 = null;
<evtHandler>5__6 = null;
<getOps>5__7 = null;
<onAllLoaded>5__8 = null;
<handler>5__9 = null;
<e>5__10 = null;
<>8__11 = null;
<why>5__12 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
//IL_02cf: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>8__1 = new <>c__DisplayClass0_0();
<timeout>5__2 = Mathf.Max(1f, timeoutSec);
<poll>5__3 = Mathf.Max(0.05f, pollSec);
<deadline>5__4 = Time.realtimeSinceStartup + <timeout>5__2;
<bundleLoader>5__5 = TypeCache.FindType("REPOLib.BundleLoader");
if (<bundleLoader>5__5 == null)
{
OmniumLibPlugin.Log.LogDebug((object)"[OmniumLib] REPOLib not detected; skipping bundle wait.");
return false;
}
<>8__1.eventFired = false;
<evtHandler>5__6 = null;
try
{
<onAllLoaded>5__8 = <bundleLoader>5__5.GetEvent("OnAllBundlesLoaded", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (<onAllLoaded>5__8?.EventHandlerType != null)
{
<handler>5__9 = delegate
{
<>8__1.eventFired = true;
};
<evtHandler>5__6 = Delegate.CreateDelegate(<onAllLoaded>5__8.EventHandlerType, <handler>5__9.Target, <handler>5__9.Method);
<onAllLoaded>5__8.AddEventHandler(null, <evtHandler>5__6);
<handler>5__9 = null;
}
<onAllLoaded>5__8 = null;
}
catch (Exception ex)
{
<e>5__10 = ex;
OmniumLibPlugin.Log.LogDebug((object)("[OmniumLib] REPOLib event hook failed: " + <e>5__10.Message));
}
<getOps>5__7 = null;
try
{
<>8__11 = new <>c__DisplayClass0_1();
<>8__11.opsField = <bundleLoader>5__5.GetField("_operations", BindingFlags.Static | BindingFlags.NonPublic);
if (<>8__11.opsField != null)
{
<getOps>5__7 = delegate
{
object value = <>8__11.opsField.GetValue(null);
if (value is ICollection collection)
{
return collection.Count;
}
PropertyInfo propertyInfo = value?.GetType().GetProperty("Count", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
return (propertyInfo != null) ? ((int)propertyInfo.GetValue(value)) : 0;
};
}
<>8__11 = null;
}
catch
{
}
OmniumLibPlugin.Log.LogInfo((object)$"[OmniumLib] Waiting for REPOLib bundles (timeout {<timeout>5__2:0.0}s)…");
break;
case 1:
<>1__state = -1;
break;
}
if (Time.realtimeSinceStartup < <deadline>5__4 && !<>8__1.eventFired && (<getOps>5__7 == null || <getOps>5__7() != 0))
{
if (verbose)
{
<why>5__12 = (<>8__1.eventFired ? "event fired" : ((<getOps>5__7 == null) ? "unknown (no ops field)" : $"ops={<getOps>5__7()}"));
OmniumLibPlugin.Log.LogInfo((object)("[OmniumLib] Waiting… " + <why>5__12));
<why>5__12 = null;
}
<>2__current = (object)new WaitForSecondsRealtime(<poll>5__3);
<>1__state = 1;
return true;
}
if ((object)<evtHandler>5__6 != null)
{
try
{
<bundleLoader>5__5.GetEvent("OnAllBundlesLoaded", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)?.RemoveEventHandler(null, <evtHandler>5__6);
}
catch
{
}
}
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] REPOLib bundle gate cleared.");
Events.RaiseBundlesReady();
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[IteratorStateMachine(typeof(<WaitForRepoLibBundles>d__0))]
public static IEnumerator WaitForRepoLibBundles(float timeoutSec = 25f, float pollSec = 0.25f, bool verbose = false)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <WaitForRepoLibBundles>d__0(0)
{
timeoutSec = timeoutSec,
pollSec = pollSec,
verbose = verbose
};
}
}
public static class TypeCache
{
private static readonly Dictionary<string, Type> _byFull = new Dictionary<string, Type>();
private static readonly Dictionary<string, Type> _byShort = new Dictionary<string, Type>(StringComparer.Ordinal);
private static float _lastSweep;
private static readonly object _lock = new object();
public static Type FindType(string fullNameOrShort)
{
if (string.IsNullOrEmpty(fullNameOrShort))
{
return null;
}
lock (_lock)
{
if (_byFull.TryGetValue(fullNameOrShort, out Type value))
{
return value;
}
if (_byShort.TryGetValue(fullNameOrShort, out value))
{
return value;
}
SweepAssemblies();
if (_byFull.TryGetValue(fullNameOrShort, out value))
{
return value;
}
if (_byShort.TryGetValue(fullNameOrShort, out value))
{
return value;
}
}
return null;
}
private static void SweepAssemblies()
{
if (Time.realtimeSinceStartup - _lastSweep < 0.5f)
{
return;
}
_lastSweep = Time.realtimeSinceStartup;
try
{
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
Type[] types;
try
{
types = assembly.GetTypes();
}
catch
{
continue;
}
Type[] array = types;
foreach (Type type in array)
{
if (!(type == null))
{
string fullName = type.FullName;
string name = type.Name;
if (!string.IsNullOrEmpty(fullName))
{
_byFull[fullName] = type;
}
if (!string.IsNullOrEmpty(name) && !_byShort.ContainsKey(name))
{
_byShort[name] = type;
}
}
}
}
}
catch (Exception ex)
{
ManualLogSource log = OmniumLibPlugin.Log;
if (log != null)
{
log.LogDebug((object)("[OmniumLib] Type sweep failed: " + ex.Message));
}
}
}
}
public static class PlayerLocator
{
private static Transform _cached;
private static float _lastCheck;
public static Transform GetPlayer(bool forceRefresh = false, bool log = false)
{
if (!forceRefresh && Object.op_Implicit((Object)(object)_cached) && Time.realtimeSinceStartup - _lastCheck < 1f)
{
return _cached;
}
_lastCheck = Time.realtimeSinceStartup;
Transform val = null;
try
{
Type type = TypeCache.FindType("PlayerController");
if (type != null)
{
object? obj = type.GetField("instance", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(null);
Component val2 = (Component)((obj is Component) ? obj : null);
if (Object.op_Implicit((Object)(object)val2))
{
val = val2.transform;
}
if (Object.op_Implicit((Object)(object)val) && log)
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] Player via PlayerController.instance");
}
}
if ((Object)(object)val == (Object)null)
{
Type type2 = TypeCache.FindType("PlayerAvatar");
if (type2 != null)
{
Object[] array = Object.FindObjectsOfType(type2);
Object[] array2 = array;
foreach (Object obj2 in array2)
{
bool flag = false;
try
{
FieldInfo field = type2.GetField("isLocal", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
flag = (bool)(field.GetValue(obj2) ?? ((object)false));
}
}
catch
{
}
if (!flag)
{
continue;
}
object? obj4 = type2.GetField("playerTransform", BindingFlags.Instance | BindingFlags.Public)?.GetValue(obj2);
Transform val3 = (Transform)((obj4 is Transform) ? obj4 : null);
if (Object.op_Implicit((Object)(object)val3))
{
val = val3;
if (log)
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] Player via PlayerAvatar.local");
}
}
break;
}
if ((Object)(object)val == (Object)null && array.Length != 0)
{
Object obj5 = array[0];
Object obj6 = ((obj5 is Component) ? obj5 : null);
Transform val4 = ((obj6 != null) ? ((Component)obj6).transform : null);
if (Object.op_Implicit((Object)(object)val4))
{
val = val4;
if (log)
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] Player via first PlayerAvatar transform");
}
}
}
}
}
if ((Object)(object)val == (Object)null)
{
GameObject val5 = GameObject.FindGameObjectWithTag("Player");
if (Object.op_Implicit((Object)(object)val5))
{
val = val5.transform;
if (log)
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] Player via tag 'Player'");
}
}
}
if ((Object)(object)val == (Object)null && Object.op_Implicit((Object)(object)Camera.main))
{
val = ((Component)Camera.main).transform.root;
if (log)
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] Player via Camera.main.root");
}
}
}
catch (Exception ex)
{
OmniumLibPlugin.Log.LogError((object)("[OmniumLib] PlayerLocator failed: " + ex));
}
_cached = val;
return val;
}
}
public sealed class ObjectIndex
{
private List<GameObject> _all = new List<GameObject>();
private DateTime _lastBuild;
public IReadOnlyList<GameObject> All => _all;
public void Rebuild(bool force = false)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
if (!force && (DateTime.Now - _lastBuild).TotalSeconds < 2.0)
{
return;
}
_lastBuild = DateTime.Now;
try
{
Scene activeScene = SceneManager.GetActiveScene();
List<GameObject> list = new List<GameObject>();
GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
foreach (GameObject root in rootGameObjects)
{
Collect(root, list);
}
_all = list;
}
catch (Exception ex)
{
OmniumLibPlugin.Log.LogError((object)("[OmniumLib] ObjectIndex rebuild failed: " + ex));
}
}
public IEnumerable<GameObject> SearchByName(string containsLower)
{
string containsLower2 = containsLower;
if (string.IsNullOrEmpty(containsLower2))
{
return _all;
}
return _all.Where((GameObject go) => Object.op_Implicit((Object)(object)go) && ((Object)go).name != null && ((Object)go).name.ToLowerInvariant().Contains(containsLower2));
}
public static string GetPath(Transform tr)
{
if (!Object.op_Implicit((Object)(object)tr))
{
return "<null>";
}
Stack<string> stack = new Stack<string>();
while (Object.op_Implicit((Object)(object)tr))
{
stack.Push(((Object)tr).name);
tr = tr.parent;
}
return string.Join("/", stack);
}
private void Collect(GameObject root, List<GameObject> list)
{
if (Object.op_Implicit((Object)(object)root))
{
list.Add(root);
Transform transform = root.transform;
for (int i = 0; i < transform.childCount; i++)
{
Collect(((Component)transform.GetChild(i)).gameObject, list);
}
}
}
}
public sealed class InputGuard
{
private readonly List<Behaviour> _disabled = new List<Behaviour>();
private CursorLockMode _prevLock;
private bool _prevVisible;
private CharacterController _cc;
private bool _ccPrev;
private Rigidbody _rb;
private bool _rbPrevKinematic;
private bool _rbPrevDetect;
public bool RespectLoaders { get; set; } = true;
public void Begin()
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
try
{
_prevLock = Cursor.lockState;
_prevVisible = Cursor.visible;
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
_disabled.Clear();
_cc = null;
_rb = null;
Transform player = PlayerLocator.GetPlayer();
if (Object.op_Implicit((Object)(object)player))
{
List<Behaviour> list = new List<Behaviour>();
list.AddRange(((Component)player).GetComponentsInChildren<Behaviour>(true));
if (Object.op_Implicit((Object)(object)Camera.main))
{
list.AddRange(((Component)Camera.main).GetComponentsInChildren<Behaviour>(true));
}
foreach (Behaviour item in list)
{
if (!Object.op_Implicit((Object)(object)item) || !item.enabled)
{
continue;
}
Type type = ((object)item).GetType();
if (type == typeof(Camera) || type == typeof(AudioListener))
{
continue;
}
string text = "";
try
{
text = type.Assembly.GetName().Name ?? "";
}
catch
{
}
bool flag = text.Equals("Assembly-CSharp", StringComparison.OrdinalIgnoreCase) || text.Equals("Assembly-CSharp-firstpass", StringComparison.OrdinalIgnoreCase) || text.StartsWith("UnityEngine", StringComparison.OrdinalIgnoreCase) || text.StartsWith("Unity.", StringComparison.OrdinalIgnoreCase);
bool flag2 = text.IndexOf("RepoLib", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("REPOLib", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("OmniumLib", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("OmniumLibrary", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("BepInEx", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("Harmony", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("Thunderstore", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("Plugin", StringComparison.OrdinalIgnoreCase) >= 0 || text.IndexOf("Mod", StringComparison.OrdinalIgnoreCase) >= 0;
if (RespectLoaders && (!flag || flag2))
{
continue;
}
string name = type.Name;
bool flag3 = name.Contains("Mouse") || name.Contains("Look") || name.Contains("Locomotion") || name.Contains("Motor") || name.Contains("Movement") || (name.Contains("Input") && (name.Contains("Player") || name.Contains("Character") || name.Contains("Camera"))) || (name.Contains("Controller") && (name.Contains("Player") || name.Contains("Character") || name.Contains("FirstPerson") || name.Contains("ThirdPerson") || name.Contains("Camera")));
string text2 = ((Object.op_Implicit((Object)(object)item) && Object.op_Implicit((Object)(object)((Component)item).gameObject)) ? ((Object)((Component)item).gameObject).name : string.Empty);
if (RespectLoaders)
{
string text3 = name.ToLowerInvariant();
if (text3.Contains("ui") || text3.Contains("canvas") || text3.Contains("graphic"))
{
flag3 = false;
}
if (text2.IndexOf("HUD", StringComparison.OrdinalIgnoreCase) >= 0)
{
flag3 = false;
}
if (text2.IndexOf("REPOLib", StringComparison.OrdinalIgnoreCase) >= 0)
{
flag3 = false;
}
if (text2.IndexOf("OmniumLib", StringComparison.OrdinalIgnoreCase) >= 0)
{
flag3 = false;
}
}
if (flag3)
{
item.enabled = false;
_disabled.Add(item);
}
}
_cc = ((Component)player).GetComponent<CharacterController>();
if (Object.op_Implicit((Object)(object)_cc))
{
_ccPrev = ((Collider)_cc).enabled;
((Collider)_cc).enabled = false;
}
_rb = ((Component)player).GetComponent<Rigidbody>();
if (Object.op_Implicit((Object)(object)_rb))
{
_rbPrevKinematic = _rb.isKinematic;
_rbPrevDetect = _rb.detectCollisions;
_rb.isKinematic = true;
_rb.detectCollisions = false;
_rb.velocity = Vector3.zero;
}
}
Events.RaiseFocus(hasFocus: true);
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] InputGuard: ENABLED");
}
catch (Exception ex)
{
OmniumLibPlugin.Log.LogError((object)("[OmniumLib] InputGuard.Begin failed: " + ex));
}
}
public void End()
{
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
try
{
foreach (Behaviour item in _disabled)
{
if (Object.op_Implicit((Object)(object)item))
{
item.enabled = true;
}
}
_disabled.Clear();
if (Object.op_Implicit((Object)(object)_cc))
{
((Collider)_cc).enabled = _ccPrev;
}
if (Object.op_Implicit((Object)(object)_rb))
{
_rb.isKinematic = _rbPrevKinematic;
_rb.detectCollisions = _rbPrevDetect;
}
Cursor.lockState = _prevLock;
Cursor.visible = _prevVisible;
Events.RaiseFocus(hasFocus: false);
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] InputGuard: DISABLED");
}
catch (Exception ex)
{
OmniumLibPlugin.Log.LogError((object)("[OmniumLib] InputGuard.End failed: " + ex));
}
}
}
public sealed class LevelDebugVis : MonoBehaviour
{
private static LevelDebugVis _instance;
[Header("Visuals")]
public float MarkerScale = 0.35f;
public float PathMarkerScale = 0.22f;
public Color LevelPointColor = new Color(0.2f, 1f, 0.4f, 0.85f);
public Color PathPointColor = new Color(1f, 0.1f, 0.1f, 1f);
public float Emission = 3f;
public float LineWidth = 0.02f;
private GameObject _root;
private Material _unlitMat;
public static bool Active => Object.op_Implicit((Object)(object)_instance) && Object.op_Implicit((Object)(object)_instance._root) && _instance._root.activeSelf;
public static void Enable(bool on = true)
{
if (on)
{
Ensure();
}
else
{
Disable();
}
}
public static void Disable()
{
if (Object.op_Implicit((Object)(object)_instance))
{
if (Object.op_Implicit((Object)(object)_instance._root))
{
Object.Destroy((Object)(object)_instance._root);
}
Object.Destroy((Object)(object)_instance);
_instance = null;
}
}
public static void Rebuild()
{
if (Object.op_Implicit((Object)(object)_instance))
{
_instance.Build();
}
}
private static void Ensure()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)_instance))
{
_instance.Build();
return;
}
GameObject val = (GameObject)(Object.op_Implicit((Object)(object)OmnLibHost.Instance) ? ((object)((Component)OmnLibHost.Instance).gameObject) : ((object)new GameObject("OmniumLibHost")));
if (!Object.op_Implicit((Object)(object)OmnLibHost.Instance))
{
OmnLibHost.Instance = val.AddComponent<OmnLibHost>();
}
_instance = val.AddComponent<LevelDebugVis>();
_instance.Build();
}
private void OnEnable()
{
Events.SceneLoaded += OnSceneLoaded;
}
private void OnDisable()
{
Events.SceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene s, LoadSceneMode m)
{
Build();
}
private void Build()
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Expected O, but got Unknown
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0356: Unknown result type (might be due to invalid IL or missing references)
//IL_035d: Unknown result type (might be due to invalid IL or missing references)
//IL_0363: Unknown result type (might be due to invalid IL or missing references)
//IL_0370: Unknown result type (might be due to invalid IL or missing references)
//IL_0377: Unknown result type (might be due to invalid IL or missing references)
//IL_0381: Unknown result type (might be due to invalid IL or missing references)
//IL_0386: Unknown result type (might be due to invalid IL or missing references)
//IL_0394: Unknown result type (might be due to invalid IL or missing references)
//IL_039d: Unknown result type (might be due to invalid IL or missing references)
try
{
if (Object.op_Implicit((Object)(object)_root))
{
Object.Destroy((Object)(object)_root);
}
_root = new GameObject("OmniumLib_LevelVis");
Object.DontDestroyOnLoad((Object)(object)_root);
_unlitMat = MakeMat();
Type type = TypeCache.FindType("LevelPoint");
if (type == null)
{
OmniumLibPlugin.Log.LogWarning((object)"[OmniumLib] LevelDebugVis: LevelPoint type not found; nothing to draw.");
return;
}
Object[] array = Object.FindObjectsOfType(type);
List<Component> list = new List<Component>();
Object[] array2 = array;
foreach (Object val in array2)
{
Component val2 = (Component)(object)((val is Component) ? val : null);
if (val2 != null)
{
list.Add(val2);
}
}
foreach (Component item2 in list)
{
Transform transform = item2.transform;
MakeMarker(_root.transform, transform.position, MarkerScale, LevelPointColor, "LevelPoint");
}
Type type2 = type;
BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
FieldInfo fieldInfo = type2.GetField("ConnectedPoints", bindingAttr) ?? type2.GetField("Connections", bindingAttr) ?? type2.GetField("Neighbors", bindingAttr) ?? type2.GetField("Adjacent", bindingAttr);
if (fieldInfo != null)
{
HashSet<ulong> hashSet = new HashSet<ulong>();
foreach (Component item3 in list)
{
object value = fieldInfo.GetValue(item3);
if (value == null)
{
continue;
}
IEnumerable<object> enumerable = null;
if (value is IEnumerable<object> enumerable2)
{
enumerable = enumerable2;
}
else if (value is IEnumerable enumerable3)
{
List<object> list2 = new List<object>();
foreach (object item4 in enumerable3)
{
list2.Add(item4);
}
enumerable = list2;
}
if (enumerable == null)
{
continue;
}
foreach (object item5 in enumerable)
{
if (item5 == null)
{
continue;
}
Transform transform2 = item3.transform;
Transform val3 = null;
Component val4 = (Component)((item5 is Component) ? item5 : null);
if (val4 != null)
{
val3 = val4.transform;
}
else
{
Type type3 = item5.GetType();
if (type3 == type2)
{
object obj = ((item5 is Component) ? item5 : null);
val3 = ((obj != null) ? ((Component)obj).transform : null);
}
if ((Object)(object)val3 == (Object)null)
{
PropertyInfo property = type3.GetProperty("transform", bindingAttr);
if (property != null)
{
object? value2 = property.GetValue(item5, null);
val3 = (Transform)((value2 is Transform) ? value2 : null);
}
}
}
if (Object.op_Implicit((Object)(object)val3))
{
ulong item = HashPair(((Object)transform2).GetInstanceID(), ((Object)val3).GetInstanceID());
if (!hashSet.Contains(item))
{
hashSet.Add(item);
MakeLine(_root.transform, transform2.position, val3.position, PathPointColor);
Vector3 pos = Vector3.Lerp(transform2.position, val3.position, 0.5f);
MakeMarker(_root.transform, pos, PathMarkerScale, PathPointColor, "Path");
}
}
}
}
}
else
{
OmniumLibPlugin.Log.LogInfo((object)"[OmniumLib] LevelDebugVis: No 'ConnectedPoints' field detected; drew LevelPoint markers only.");
}
OmniumLibPlugin.Log.LogInfo((object)$"[OmniumLib] LevelDebugVis built: {_root.transform.childCount} visuals.");
}
catch (Exception ex)
{
OmniumLibPlugin.Log.LogError((object)("[OmniumLib] LevelDebugVis.Build failed: " + ex));
}
}
private static ulong HashPair(int a, int b)
{
uint num = (uint)a;
uint num2 = (uint)b;
if (num2 < num)
{
uint num3 = num;
num = num2;
num2 = num3;
}
return ((ulong)num << 32) | num2;
}
private void MakeMarker(Transform parent, Vector3 pos, float scale, Color color, string label)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
GameObject val = GameObject.CreatePrimitive((PrimitiveType)0);
((Object)val).name = "OmniumVis_" + label;
val.layer = 0;
val.transform.SetParent(parent, false);
val.transform.position = pos;
val.transform.localScale = new Vector3(scale, scale, scale);
MeshRenderer component = val.GetComponent<MeshRenderer>();
if (Object.op_Implicit((Object)(object)component))
{
((Renderer)component).sharedMaterial = MakeColorMat(color, Emission);
}
Collider component2 = val.GetComponent<Collider>();
if (Object.op_Implicit((Object)(object)component2))
{
component2.enabled = false;
}
}
private void MakeLine(Transform parent, Vector3 a, Vector3 b, Color color)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0032: 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_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("OmniumVis_PathLine");
val.transform.SetParent(parent, false);
LineRenderer val2 = val.AddComponent<LineRenderer>();
val2.positionCount = 2;
val2.SetPositions((Vector3[])(object)new Vector3[2] { a, b });
val2.startWidth = LineWidth;
val2.endWidth = LineWidth;
val2.numCapVertices = 4;
val2.numCornerVertices = 4;
((Renderer)val2).shadowCastingMode = (ShadowCastingMode)0;
((Renderer)val2).receiveShadows = false;
val2.useWorldSpace = true;
((Renderer)val2).allowOcclusionWhenDynamic = false;
((Renderer)val2).sharedMaterial = MakeColorMat(color, Emission);
}
private Material MakeMat()
{
//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_00be: Expected O, but got Unknown
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
string[] array = new string[8] { "Unlit/Color", "Universal Render Pipeline/Unlit", "HDRP/Unlit", "Unlit/Texture", "Sprites/Default", "UI/Default", "Standard", "Hidden/Internal-Colored" };
Shader val = null;
string[] array2 = array;
foreach (string text in array2)
{
val = Shader.Find(text);
if (Object.op_Implicit((Object)(object)val))
{
break;
}
}
if (!Object.op_Implicit((Object)(object)val))
{
Material val2 = new Material(Shader.Find("Sprites/Default"));
((Object)val2).hideFlags = (HideFlags)61;
return val2;
}
return new Material(val)
{
hideFlags = (HideFlags)61
};
}
private Material MakeColorMat(Color c, float emission)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Expected O, but got Unknown
//IL_0043: 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_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
Material val = (((Object)(object)_unlitMat != (Object)null) ? _unlitMat : MakeMat());
Material val2 = new Material(val)
{
hideFlags = (HideFlags)61
};
if (val2.HasProperty("_Color"))
{
val2.SetColor("_Color", c);
}
if (val2.HasProperty("_BaseColor"))
{
val2.SetColor("_BaseColor", c);
}
try
{
if (val2.HasProperty("_EmissionColor"))
{
val2.EnableKeyword("_EMISSION");
val2.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)1;
val2.SetColor("_EmissionColor", c * emission);
}
}
catch
{
}
return val2;
}
}
}
namespace OmniumLib
{
[BepInPlugin("Omniscye.OmniumLib", "OmniumLib", "1.0")]
public class OmniumLib : BaseUnityPlugin
{
internal static OmniumLib Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
private void Awake()
{
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Patch();
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
}
internal void Patch()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0026: Expected O, but got Unknown
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
}
internal void Unpatch()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
private void Update()
{
}
}
}