Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Cinematic Unity Explorer v1.3.5
CinematicUnityExplorer.BIE5.Mono.dll
Decompiled 5 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Diagnostics.SymbolStore; using System.Globalization; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Timers; using System.Xml; using System.Xml.Serialization; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CinematicUnityExplorer.Cinematic; using CinematicUnityExplorer.Inspectors; using CinematicUnityExplorer.LineDrawing; using CinematicUnityExplorer.Patches; using HarmonyLib; using Microsoft.CodeAnalysis; using Mono.CSharp; using Mono.CSharp.IL2CPP; using Mono.CSharp.Linq; using Mono.CSharp.Nullable; using Mono.CSharp.yyParser; using Mono.CSharp.yydebug; using Mono.CompilerServices.SymbolWriter; using MonoMod.RuntimeDetour; using Tomlet; using Tomlet.Attributes; using Tomlet.Exceptions; using Tomlet.Models; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; using UnityExplorer; using UnityExplorer.CSConsole; using UnityExplorer.CSConsole.Lexers; using UnityExplorer.CacheObject; using UnityExplorer.CacheObject.IValues; using UnityExplorer.CacheObject.Views; using UnityExplorer.CatmullRom; using UnityExplorer.Config; using UnityExplorer.Hooks; using UnityExplorer.Inspectors; using UnityExplorer.Inspectors.MouseInspectors; using UnityExplorer.Loader.BIE; using UnityExplorer.ObjectExplorer; using UnityExplorer.Runtime; using UnityExplorer.Serializers; using UnityExplorer.UI; using UnityExplorer.UI.Panels; using UnityExplorer.UI.Widgets; using UnityExplorer.UI.Widgets.AutoComplete; using UnityExplorerPlus.ParseUtility; using UniverseLib; using UniverseLib.Config; using UniverseLib.Input; using UniverseLib.Runtime; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; using UniverseLib.UI.Panels; using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ButtonList; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; [assembly: AssemblyTitle("CinematicUnityExplorer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: ComVisible(false)] [assembly: Guid("b21dbde3-5d6f-4726-93ab-cc3cc68bae7d")] [assembly: AssemblyFileVersion("1.4.0")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCompany("originalnicodr, Sinai, yukieiji")] [assembly: AssemblyProduct("CinematicUnityExplorer")] [assembly: AssemblyCopyright("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<ea549b1f-d2b1-43fc-b732-d20c4d3ca6f0>Embedded] internal sealed class <ea549b1f-d2b1-43fc-b732-d20c4d3ca6f0>EmbeddedAttribute : System.Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<ea549b1f-d2b1-43fc-b732-d20c4d3ca6f0>Embedded] internal sealed class IsReadOnlyAttribute : Attribute { } } namespace UnityExplorerPlus.ParseUtility { public static class ParseManager { private static readonly Dictionary<string, Func<object, string>> customToStringsByFullName = new Dictionary<string, Func<object, string>>(); private static readonly Dictionary<Type, Func<object, string>> customToStrings = new Dictionary<Type, Func<object, string>>(); private static readonly Dictionary<string, Type> typeCache = new Dictionary<string, Type>(); private static Type GetCachedType(string typeFullName) { if (typeCache.TryGetValue(typeFullName, out var value)) { return value; } Type type = AccessTools.TypeByName(typeFullName); if ((object)type != null) { typeCache[typeFullName] = type; } return type; } public static string TryGetCustomToString(object value) { if (UnityHelpers.IsNullOrDestroyed(value, true)) { return null; } Type type = value.GetType(); if (customToStrings.TryGetValue(type, out var value2)) { return value2(value); } return customToStrings.FirstOrDefault((KeyValuePair<Type, Func<object, string>> x) => x.Key.IsInstanceOfType(value)).Value?.Invoke(value); } public static bool IsTypeRegisteredForToString(Type type) { return customToStrings.ContainsKey(type) || customToStrings.Any((KeyValuePair<Type, Func<object, string>> x) => x.Key.IsInstanceOfType(type)); } public static void RegisterToString(string typeFullName, Func<object, string> toString) { if (customToStringsByFullName.ContainsKey(typeFullName)) { } customToStringsByFullName[typeFullName] = toString; Type cachedType = GetCachedType(typeFullName); if ((object)cachedType != null) { customToStrings[cachedType] = toString; } } public static void RegisterToString<T>(Func<T, string> toString) { RegisterToString(typeof(T).FullName, (object val) => toString((T)val)); } public static void Init() { RegisterToString("tk2dSpriteAnimationClip", delegate(object clip) { string text11 = ((clip?.GetType().GetField("name"))?.GetValue(clip) as string) ?? "UnnamedClip"; return "<color=grey>tk2dSpriteAnimationClip: </color><color=green>" + text11 + "</color>"; }); RegisterToString("tk2dSpriteDefinition", delegate(object def) { string text10 = ((def?.GetType().GetField("name"))?.GetValue(def) as string) ?? "UnnamedDefinition"; return "<color=grey>tk2dSpriteDefinition: </color><color=green>" + text10 + "</color>"; }); RegisterToString("tk2dSpriteAnimationFrame", delegate(object frame) { string text9 = (frame?.GetType().GetField("spriteId"))?.GetValue(frame)?.ToString() ?? "UnnamedSpriteId"; return "<color=grey>tk2dSpriteAnimationFrame: </color><color=green>" + text9 + "</color>"; }); RegisterToString("HutongGames.PlayMaker.FsmState", delegate(object state) { string text8 = ((state?.GetType().GetProperty("Name"))?.GetValue(state, null) as string) ?? "UnnamedState"; return "<color=grey>Fsm State: </color><color=green>" + text8 + "</color>"; }); RegisterToString("HutongGames.PlayMaker.FsmTransition", delegate(object tran) { Type type2 = tran?.GetType(); object obj2 = (type2?.GetProperty("FsmEvent"))?.GetValue(tran, null); string text4 = null; if (obj2 != null) { text4 = obj2.GetType().GetProperty("Name")?.GetValue(obj2, null) as string; } string text5 = (type2?.GetProperty("EventName"))?.GetValue(tran, null) as string; object obj3 = (type2?.GetProperty("ToFsmState"))?.GetValue(tran, null); string text6 = null; if (obj3 != null) { text6 = obj3.GetType().GetProperty("Name")?.GetValue(obj3, null) as string; } string text7 = (type2?.GetProperty("ToState"))?.GetValue(tran, null) as string; return "<color=grey>Fsm Transition: </color><color=green>" + (text4 ?? text5) + "</color><color=grey> -> </color><color=green>" + (text6 ?? text7) + "</color>"; }); RegisterToString("HutongGames.PlayMaker.FsmEvent", delegate(object ev) { string text3 = ((ev?.GetType().GetProperty("Name"))?.GetValue(ev, null) as string) ?? "UnnamedEvent"; return "<color=grey>Fsm Event: </color><color=green>" + text3 + "</color>"; }); RegisterToString("HutongGames.PlayMaker.NamedVariable", delegate(object v) { Type type = v?.GetType(); string text = (type?.GetProperty("VariableType"))?.GetValue(v, null)?.ToString() ?? "Unknown"; string text2 = ((type?.GetProperty("Name"))?.GetValue(v, null) as string) ?? "Unnamed"; object obj = (type?.GetProperty("Value"))?.GetValue(v, null); return "<color=grey>Fsm Variable(</color><color=green>" + text + "</color><color=grey>): </color><color=green>" + text2 + "</color> | " + ToStringUtility.ToStringWithType(obj, typeof(object), true); }); } } } namespace System.Runtime.CompilerServices { internal static class IsExternalInit { } } namespace CinematicUnityExplorer { public static class Drawing { private static Texture2D aaLineTex; private static Texture2D lineTex; private static Material blitMaterial; private static Material blendMaterial; private static Rect lineRect; public static void DrawLine(Vector2 pointA, Vector2 pointB, Color color, float width, bool antiAlias) { //IL_0001: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_0111: Unknown result type (might be due to invalid IL or missing references) float num = pointB.x - pointA.x; float num2 = pointB.y - pointA.y; float num3 = Mathf.Sqrt(num * num + num2 * num2); if (!(num3 < 0.001f)) { Texture2D val; Material val2; if (antiAlias) { width *= 3f; val = aaLineTex; val2 = blendMaterial; } else { val = lineTex; val2 = blitMaterial; } float num4 = width * num2 / num3; float num5 = width * num / num3; Matrix4x4 identity = Matrix4x4.identity; identity.m00 = num; identity.m01 = 0f - num4; identity.m03 = pointA.x + 0.5f * num4; identity.m10 = num2; identity.m11 = num5; identity.m13 = pointA.y - 0.5f * num5; GL.PushMatrix(); GL.MultMatrix(identity); Graphics.DrawTexture(lineRect, (Texture)(object)val, lineRect, 0, 0, 0, 0, color, val2); if (antiAlias) { Graphics.DrawTexture(lineRect, (Texture)(object)val, lineRect, 0, 0, 0, 0, color, val2); } GL.PopMatrix(); } } public static void DrawCircle(Vector2 center, int radius, Color color, float width, int segmentsPerQuarter) { //IL_0001: 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) DrawCircle(center, radius, color, width, antiAlias: false, segmentsPerQuarter); } public static void DrawCircle(Vector2 center, int radius, Color color, float width, bool antiAlias, int segmentsPerQuarter) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00b6: 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_00ce: 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_00e7: 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_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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) float num = (float)radius * 0.55191505f; Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(center.x, center.y - (float)radius); Vector2 endTangent = default(Vector2); ((Vector2)(ref endTangent))..ctor(center.x - num, center.y - (float)radius); Vector2 startTangent = default(Vector2); ((Vector2)(ref startTangent))..ctor(center.x + num, center.y - (float)radius); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(center.x + (float)radius, center.y); Vector2 endTangent2 = default(Vector2); ((Vector2)(ref endTangent2))..ctor(center.x + (float)radius, center.y - num); Vector2 startTangent2 = default(Vector2); ((Vector2)(ref startTangent2))..ctor(center.x + (float)radius, center.y + num); Vector2 val3 = default(Vector2); ((Vector2)(ref val3))..ctor(center.x, center.y + (float)radius); Vector2 startTangent3 = default(Vector2); ((Vector2)(ref startTangent3))..ctor(center.x - num, center.y + (float)radius); Vector2 endTangent3 = default(Vector2); ((Vector2)(ref endTangent3))..ctor(center.x + num, center.y + (float)radius); Vector2 val4 = default(Vector2); ((Vector2)(ref val4))..ctor(center.x - (float)radius, center.y); Vector2 startTangent4 = default(Vector2); ((Vector2)(ref startTangent4))..ctor(center.x - (float)radius, center.y - num); Vector2 endTangent4 = default(Vector2); ((Vector2)(ref endTangent4))..ctor(center.x - (float)radius, center.y + num); DrawBezierLine(val, startTangent, val2, endTangent2, color, width, antiAlias, segmentsPerQuarter); DrawBezierLine(val2, startTangent2, val3, endTangent3, color, width, antiAlias, segmentsPerQuarter); DrawBezierLine(val3, startTangent3, val4, endTangent4, color, width, antiAlias, segmentsPerQuarter); DrawBezierLine(val4, startTangent4, val, endTangent, color, width, antiAlias, segmentsPerQuarter); } public static void DrawBezierLine(Vector2 start, Vector2 startTangent, Vector2 end, Vector2 endTangent, Color color, float width, bool antiAlias, int segments) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: 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_0027: 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_0034: Unknown result type (might be due to invalid IL or missing references) Vector2 pointA = CubeBezier(start, startTangent, end, endTangent, 0f); for (int i = 1; i < segments + 1; i++) { Vector2 val = CubeBezier(start, startTangent, end, endTangent, (float)i / (float)segments); DrawLine(pointA, val, color, width, antiAlias); pointA = val; } } private static Vector2 CubeBezier(Vector2 s, Vector2 st, Vector2 e, Vector2 et, float t) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_003f: 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_004d: Unknown result type (might be due to invalid IL or missing references) //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_005a: Unknown result type (might be due to invalid IL or missing references) float num = 1f - t; return num * num * num * s + 3f * num * num * t * st + 3f * num * t * t * et + t * t * t * e; } static Drawing() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) aaLineTex = null; lineTex = null; blitMaterial = null; blendMaterial = null; lineRect = new Rect(0f, 0f, 1f, 1f); Initialize(); } private static void Initialize() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) if ((Object)(object)lineTex == (Object)null) { lineTex = new Texture2D(1, 1, (TextureFormat)5, false); lineTex.SetPixel(0, 1, Color.white); lineTex.Apply(); } if ((Object)(object)aaLineTex == (Object)null) { aaLineTex = new Texture2D(1, 3, (TextureFormat)5, false); aaLineTex.SetPixel(0, 0, new Color(1f, 1f, 1f, 0f)); aaLineTex.SetPixel(0, 1, Color.white); aaLineTex.SetPixel(0, 2, new Color(1f, 1f, 1f, 0f)); aaLineTex.Apply(); } blitMaterial = (Material)typeof(GUI).GetMethod("get_blitMaterial", BindingFlags.Static | BindingFlags.NonPublic).Invoke(null, null); blendMaterial = (Material)typeof(GUI).GetMethod("get_blendMaterial", BindingFlags.Static | BindingFlags.NonPublic).Invoke(null, null); } } public abstract class SingleMonoBehaviour<T> : MonoBehaviour where T : SingleMonoBehaviour<T> { private static T _instance; public static T Instance { get { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown if ((Object)(object)_instance == (Object)null) { _instance = Object.FindObjectOfType<T>(); if ((Object)(object)_instance == (Object)null) { GameObject val = new GameObject(typeof(T).Name); _instance = val.AddComponent<T>(); } } return _instance; } } protected virtual void Awake() { if ((Object)(object)_instance != (Object)null && (Object)(object)_instance != (Object)(object)this) { Debug.LogWarning((object)("Another instance of " + typeof(T).Name + " already exists. Destroying this one.")); Object.Destroy((Object)(object)((Component)this).gameObject); } else { _instance = (T)this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } } protected virtual void OnDestroy() { if ((Object)(object)_instance == (Object)(object)this) { _instance = null; } } } } namespace CinematicUnityExplorer.Patches { [HarmonyPatch] public static class CinematicUnityExplorerPatches { private static Type _playMakerFSMType; private static Type GetPlayMakerFSMType() { if ((object)_playMakerFSMType == null) { _playMakerFSMType = ReflectionUtility.GetTypeByName("PlayMakerFSM"); if ((object)_playMakerFSMType != null) { } } return _playMakerFSMType; } [HarmonyPrefix] [HarmonyPatch(typeof(ToStringUtility), "ToStringWithType")] public static bool ToStringWithType_Prefix(object value, Type fallbackType, bool includeNamespace, ref string __result) { string text = ParseManager.TryGetCustomToString(value); if (text != null) { __result = text; return false; } return true; } [HarmonyPatch(typeof(CacheObjectBase), "SetDataToCell")] [HarmonyPostfix] public static void CacheObjectBase_SetDataToCell_Postfix(CacheObjectBase __instance, CacheObjectCell cell) { if (__instance.Value == null || !ParseManager.IsTypeRegisteredForToString(__instance.Value.GetType())) { return; } MethodInfo methodInfo = AccessTools.Method(typeof(CacheObjectBase), "SetValueState", (Type[])null, (Type[])null); if ((object)methodInfo != null) { Type type = AccessTools.Inner(typeof(CacheObjectBase), "ValueState"); if ((object)type != null) { object obj = Activator.CreateInstance(type, true, __instance.CanWrite, __instance.CanWrite, true); methodInfo.Invoke(__instance, new object[2] { cell, obj }); } } } [HarmonyPatch(typeof(ComponentList), "SetComponentCell")] [HarmonyPostfix] public static void ComponentList_SetComponentCell_Postfix(ComponentList __instance, ComponentCell cell, int index) { GameObjectInspector parent = __instance.Parent; if (parent == null) { return; } GameObject target = parent.Target; if (!((Object)(object)target != (Object)null)) { return; } Component[] components = target.GetComponents<Component>(); if (index < 0 || index >= components.Length) { return; } Component val = components[index]; Type playMakerFSMType = GetPlayMakerFSMType(); if ((object)playMakerFSMType == null || !playMakerFSMType.IsInstanceOfType(val)) { return; } try { PropertyInfo property = playMakerFSMType.GetProperty("FsmName", BindingFlags.Instance | BindingFlags.Public); if ((object)property != null) { object value = property.GetValue(val, null); string text = value as string; if (!string.IsNullOrEmpty(text)) { ((ButtonCell)cell).Button.ButtonText.text = ((ButtonCell)cell).Button.ButtonText.text + "<color=grey>(</color><color=#7FFF00>" + text + "</color><color=grey>)</color>"; } } } catch (Exception) { } } } } namespace CinematicUnityExplorer.Inspectors { public struct TriangleVertices { public Vector3 VertexA; public Vector3 VertexB; public Vector3 VertexC; public TriangleVertices(Vector3 a, Vector3 b, Vector3 c) { //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) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) VertexA = a; VertexB = b; VertexC = c; } public void Deconstruct(out Vector3 a, out Vector3 b, out Vector3 c) { //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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) a = VertexA; b = VertexB; c = VertexC; } } public static class TransformExtensions { public static float GetScaleX(this Transform transform) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return transform.localScale.x; } public static float GetScaleY(this Transform transform) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return transform.localScale.y; } public static string GetTransformPath(this Transform transform, bool includeSelf = true) { string text = (includeSelf ? ((Object)transform).name : ""); Transform parent = transform.parent; while ((Object)(object)parent != (Object)null) { text = ((Object)parent).name + "/" + text; parent = parent.parent; } return text; } } public static class VectorExtensions { public static Vector3 MultiplyElements(this Vector3 a, Vector3 b) { //IL_0001: 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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) return new Vector3(a.x * b.x, a.y * b.y, a.z * b.z); } public static Vector2 MultiplyElements(this Vector2 a, Vector2 b) { //IL_0001: 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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) return new Vector2(a.x * b.x, a.y * b.y); } } } namespace CinematicUnityExplorer.LineDrawing { public class LineData { public Vector2 Start { get; } public Vector2 End { get; } public Color Color { get; } public int Depth { get; } public float Width { get; } public LineData(Vector2 start, Vector2 end, Color color, int depth, float width = 0.7f) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) Start = start; End = end; Color = color; Depth = depth; Width = width; } } internal interface ILineProvider { List<LineData> Lines { get; } } internal class LineRenderer2 : SingleMonoBehaviour<LineRenderer2> { public List<ILineProvider> providers = new List<ILineProvider>(); private void OnGUI() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Invalid comparison between Unknown and I4 //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) Event current = Event.current; if (current == null || (int)current.type != 7) { return; } foreach (ILineProvider provider in providers) { foreach (LineData line in provider.Lines) { int depth = GUI.depth; GUI.depth = line.Depth; Drawing.DrawLine(line.Start, line.End, line.Color, line.Width, antiAlias: false); GUI.depth = depth; } } } } public struct Triangle { public Vector3 A; public Vector3 B; public Vector3 C; public Triangle(Vector3 a, Vector3 b, Vector3 c) { //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) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) A = a; B = b; C = c; } } } namespace CinematicUnityExplorer.Cinematic { internal static class NativeMethods { [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string dll); [DllImport("kernel32.dll")] public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); } public class UnityIGCSConnector { [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void MoveCameraCallback(float step_left, float step_up, float fov, int from_start); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void SessionCallback(); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr U_IGCS_Initialize(MoveCameraCallback callback, SessionCallback start_cb, SessionCallback end_cb); private Mono.CSharp.Tuple<Vector3, Quaternion> position = null; private Mono.CSharp.Tuple<Vector3, Quaternion> endSessionPosition = null; private readonly bool isValid = false; private bool _isActive = false; private readonly List<System.Delegate> delegates = new List<System.Delegate>(); private readonly Queue<Mono.CSharp.Tuple<float, float>> commands = new Queue<Mono.CSharp.Tuple<float, float>>(); private IntPtr CameraStatus = IntPtr.Zero; public bool IsActive => isValid && _isActive; public void UpdateFreecamStatus(bool enabled) { if (!(CameraStatus == IntPtr.Zero)) { Marshal.WriteByte(CameraStatus, (byte)(enabled ? 1 : 0)); } } public void ExecuteCameraCommand(Camera cam) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_00bc: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)cam).transform; ShouldMoveToOriginalPosition(transform); if (!_isActive || position == null) { position = new Mono.CSharp.Tuple<Vector3, Quaternion>(transform.position, transform.rotation); } if (!_isActive || position == null) { return; } Mono.CSharp.Tuple<float, float> tuple = null; lock (commands) { if (commands.Count <= 0) { return; } tuple = commands.Dequeue(); } transform.position = position.Item1; transform.rotation = position.Item2; transform.Translate(tuple.Item1, tuple.Item2, 0f); } private void MoveCamera(float stepLeft, float stepUp, float fov, int fromStart) { lock (commands) { commands.Enqueue(new Mono.CSharp.Tuple<float, float>(stepLeft, stepUp)); } } private void StartSession() { _isActive = true; } public void ShouldMoveToOriginalPosition(Transform transform) { //IL_0026: 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) if (isValid && endSessionPosition != null) { transform.position = endSessionPosition.Item1; transform.rotation = endSessionPosition.Item2; endSessionPosition = null; } } private void EndSession() { endSessionPosition = position; position = null; _isActive = false; lock (commands) { commands.Clear(); } } public UnityIGCSConnector() { string text = ((IntPtr.Size == 8) ? "UnityIGCSConnector.dll" : "UnityIGCSConnector.32.dll"); IntPtr intPtr = NativeMethods.LoadLibrary(text); if (intPtr == IntPtr.Zero) { ExplorerCore.LogWarning(text + " was not found so IGCSDof will not be available"); return; } IntPtr procAddress = NativeMethods.GetProcAddress(intPtr, "U_IGCS_Initialize"); if (procAddress == IntPtr.Zero) { throw new EntryPointNotFoundException("Failed to find 'U_IGCS_Initialize' which means you can have a corrupt UnityIGCSConnector.dll."); } U_IGCS_Initialize u_IGCS_Initialize = (U_IGCS_Initialize)Marshal.GetDelegateForFunctionPointer(procAddress, typeof(U_IGCS_Initialize)); delegates.Add(new MoveCameraCallback(MoveCamera)); delegates.Add(new SessionCallback(StartSession)); delegates.Add(new SessionCallback(EndSession)); CameraStatus = u_IGCS_Initialize((MoveCameraCallback)delegates[0], (SessionCallback)delegates[1], (SessionCallback)delegates[2]); if (CameraStatus == IntPtr.Zero) { throw new Exception("IGCSDof returned an invalid pointer which means something went wrong"); } isValid = true; } } } namespace UniverseLib.Input { public static class IGamepadInputInterceptor { private static bool _isEnabled = false; private static int _targetGamepadIndex = 0; private static Type _gamepadType; private static Type _buttonControlType; private static Type _axisControlType; private static Type _vector2ControlType; private static Type _inputControlType; private static PropertyInfo _basePathProp; private static PropertyInfo _buttonIsPressedProp; private static PropertyInfo _buttonWasPressedProp; private static PropertyInfo _buttonWasReleasedProp; private static MethodInfo _axisReadValueMethod; private static MethodInfo _vector2ReadValueMethod; private static PropertyInfo _deviceProp; private static PropertyInfo _vector2XProp; private static PropertyInfo _vector2YProp; private static PropertyInfo _gamepadAllProp; private static PropertyInfo _gamepadCurrentProp; private static PropertyInfo _gamepadLeftStickProp; private static PropertyInfo _gamepadRightStickProp; private static readonly Dictionary<string, string> _vendorPrefixMap = new Dictionary<string, string> { { "/xinputcontrollerwindows", "/gamepad" }, { "/xinputcontroller", "/gamepad" }, { "/dualshockgamepad", "/gamepad" }, { "/dualsensegamepad", "/gamepad" }, { "/dualshock4gamepadhid", "/gamepad" }, { "/dualshock3gamepadhid", "/gamepad" }, { "/androidgamepad", "/gamepad" }, { "/switchprocontrollerhid", "/gamepad" } }; private static readonly Dictionary<string, object> _axisControls = new Dictionary<string, object>(); private static readonly Dictionary<string, object> _vector2Controls = new Dictionary<string, object>(); private static readonly Dictionary<string, float> _axisValues = new Dictionary<string, float>(); private static readonly Dictionary<string, Vector2> _vector2Values = new Dictionary<string, Vector2>(); public static void Init() { try { LoadReflectedTypes(); if ((object)_gamepadType != null && (object)_axisControlType != null) { PatchAnalogControls(); DiscoverGamepadControls(); _isEnabled = true; } } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Init failed: " + ex.Message + "\n" + ex.StackTrace); } } public static void Enable() { _isEnabled = true; } public static void Disable() { _isEnabled = false; } public static void SetTargetGamepad(int index) { _targetGamepadIndex = index; ClearControlCaches(); DiscoverGamepadControls(); } private static void LoadReflectedTypes() { _gamepadType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Gamepad, Unity.InputSystem"); _buttonControlType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Controls.ButtonControl, Unity.InputSystem"); _axisControlType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Controls.AxisControl, Unity.InputSystem"); _vector2ControlType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Controls.Vector2Control, Unity.InputSystem"); _inputControlType = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputControl, Unity.InputSystem"); _basePathProp = _inputControlType?.GetProperty("path", BindingFlags.Instance | BindingFlags.Public); _buttonIsPressedProp = _buttonControlType?.GetProperty("isPressed", BindingFlags.Instance | BindingFlags.Public); _buttonWasPressedProp = _buttonControlType?.GetProperty("wasPressedThisFrame", BindingFlags.Instance | BindingFlags.Public); _buttonWasReleasedProp = _buttonControlType?.GetProperty("wasReleasedThisFrame", BindingFlags.Instance | BindingFlags.Public); _axisReadValueMethod = _axisControlType?.GetMethod("ReadValue", Type.EmptyTypes); _vector2ReadValueMethod = _vector2ControlType?.GetMethod("ReadValue", Type.EmptyTypes); _deviceProp = _inputControlType?.GetProperty("device", BindingFlags.Instance | BindingFlags.Public); _vector2XProp = _vector2ControlType?.GetProperty("x", BindingFlags.Instance | BindingFlags.Public); _vector2YProp = _vector2ControlType?.GetProperty("y", BindingFlags.Instance | BindingFlags.Public); _gamepadAllProp = _gamepadType?.GetProperty("all", BindingFlags.Static | BindingFlags.Public); _gamepadCurrentProp = _gamepadType?.GetProperty("current", BindingFlags.Static | BindingFlags.Public); _gamepadLeftStickProp = _gamepadType?.GetProperty("leftStick", BindingFlags.Instance | BindingFlags.Public); _gamepadRightStickProp = _gamepadType?.GetProperty("rightStick", BindingFlags.Instance | BindingFlags.Public); } private static void LogLoadedType(string name, Type type) { if ((object)type != null) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Loaded type: " + name); } else { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to load type: " + name); } } private static void PatchAnalogControls() { try { if ((object)_vector2ControlType != null) { MethodInfo method = _vector2ControlType.GetMethod("ReadValue", BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null); if ((object)method == null) { Type baseType = _vector2ControlType.BaseType; if ((object)baseType != null && baseType.IsGenericType) { method = baseType.GetMethod("ReadValue", BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null); } } if ((object)method != null) { PatchMethod(method, null, "Postfix_Vector2ReadValue"); } } if ((object)_axisControlType == null) { return; } MethodInfo method2 = _axisControlType.GetMethod("ReadValue", BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null); if ((object)method2 == null) { Type baseType2 = _axisControlType.BaseType; if ((object)baseType2 != null && baseType2.IsGenericType) { method2 = baseType2.GetMethod("ReadValue", BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null); } } if ((object)method2 != null) { PatchMethod(method2, null, "Postfix_AxisReadValue"); } } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Error during patching: " + ex.Message); } } private static void PatchMethod(MethodInfo method, string prefixName, string postfixName) { //IL_004b: 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) try { if ((object)method != null) { MethodInfo methodInfo = ((prefixName != null) ? AccessTools.Method(typeof(IGamepadInputInterceptor), prefixName, (Type[])null, (Type[])null) : null); MethodInfo methodInfo2 = ((postfixName != null) ? AccessTools.Method(typeof(IGamepadInputInterceptor), postfixName, (Type[])null, (Type[])null) : null); object obj = ExplorerCore.Harmony; obj = method; obj = (object)(((object)methodInfo == null) ? ((HarmonyMethod)null) : new HarmonyMethod(methodInfo)); obj = (object)(((object)methodInfo2 == null) ? ((HarmonyMethod)null) : new HarmonyMethod(methodInfo2)); ((Harmony)obj).Patch((MethodBase)obj, (HarmonyMethod)obj, (HarmonyMethod)obj, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to patch method: " + ex.Message); } } private static void DiscoverGamepadControls() { try { object gamepadInstance = GetGamepadInstance(_targetGamepadIndex); if (gamepadInstance == null) { return; } string[] array = new string[12] { "buttonSouth", "buttonNorth", "buttonWest", "buttonEast", "leftStickButton", "rightStickButton", "leftShoulder", "rightShoulder", "startButton", "selectButton", "leftTrigger", "rightTrigger" }; string[] array2 = new string[2] { "leftStick", "rightStick" }; string[] array3 = array; foreach (string text in array3) { try { PropertyInfo property = _gamepadType.GetProperty(text, BindingFlags.Instance | BindingFlags.Public); if ((object)property == null) { continue; } object value = property.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value != null) { string text2 = ExtractAndNormalizePath(value); if (!string.IsNullOrEmpty(text2)) { INewInputSystem.gamepadButtonControls[text2] = value; } } } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access button " + text + ": " + ex.Message); } } try { PropertyInfo property2 = _gamepadType.GetProperty("dpad", BindingFlags.Instance | BindingFlags.Public); if ((object)property2 != null) { object value2 = property2.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value2 != null) { string[] array4 = new string[4] { "up", "down", "left", "right" }; string[] array5 = array4; foreach (string text3 in array5) { try { PropertyInfo property3 = value2.GetType().GetProperty(text3, BindingFlags.Instance | BindingFlags.Public); if ((object)property3 == null) { continue; } object value3 = property3.GetValue(value2, BindingFlags.Default, null, null, null); if (value3 != null) { string text4 = ExtractAndNormalizePath(value3); if (!string.IsNullOrEmpty(text4)) { INewInputSystem.gamepadButtonControls[text4] = value3; } } } catch (Exception ex2) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access dpad." + text3 + ": " + ex2.Message); } } } } } catch (Exception ex3) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access dpad: " + ex3.Message); } string[] array6 = array2; foreach (string text5 in array6) { try { PropertyInfo property4 = _gamepadType.GetProperty(text5, BindingFlags.Instance | BindingFlags.Public); if ((object)property4 == null) { continue; } object value4 = property4.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value4 == null) { continue; } string text6 = ExtractAndNormalizePath(value4); if (!string.IsNullOrEmpty(text6)) { _vector2Controls[text6] = value4; } string[] array7 = new string[2] { "x", "y" }; string[] array8 = array7; foreach (string text7 in array8) { try { PropertyInfo property5 = value4.GetType().GetProperty(text7, BindingFlags.Instance | BindingFlags.Public); if ((object)property5 == null) { continue; } object value5 = property5.GetValue(value4, BindingFlags.Default, null, null, null); if (value5 != null) { string value6 = ExtractAndNormalizePath(value5); if (!string.IsNullOrEmpty(value6)) { string text8 = text5.ToLowerInvariant(); string key = "/gamepad/" + text8 + "/" + text7; _axisControls[key] = value5; } } } catch (Exception ex4) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access " + text5 + "." + text7 + ": " + ex4.Message); } } } catch (Exception ex5) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access vector2 " + text5 + ": " + ex5.Message); } } string[] array9 = new string[2] { "leftTrigger", "rightTrigger" }; string[] array10 = array9; foreach (string text9 in array10) { try { PropertyInfo property6 = _gamepadType.GetProperty(text9, BindingFlags.Instance | BindingFlags.Public); if ((object)property6 == null) { continue; } object value7 = property6.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value7 != null) { string text10 = ExtractAndNormalizePath(value7); if (!string.IsNullOrEmpty(text10)) { _axisControls[text10] = value7; } } } catch (Exception ex6) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Failed to access " + text9 + ": " + ex6.Message); } } int num = INewInputSystem.gamepadButtonControls.Count + _axisControls.Count + _vector2Controls.Count; } catch (Exception ex7) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Error discovering controls: " + ex7.Message + "\n" + ex7.StackTrace); } } private static object GetGamepadInstance(int index) { try { if ((object)_gamepadAllProp != null) { object value = _gamepadAllProp.GetValue(null, BindingFlags.Default, null, null, null); if (value != null) { Type type = value.GetType(); PropertyInfo property = type.GetProperty("Count", BindingFlags.Instance | BindingFlags.Public); PropertyInfo property2 = type.GetProperty("Item", BindingFlags.Instance | BindingFlags.Public); if ((object)property != null && (object)property2 != null) { int num = (int)property.GetValue(value, BindingFlags.Default, null, null, null); if (index >= 0 && index < num) { return property2.GetValue(value, new object[1] { index }); } } } } if ((object)_gamepadCurrentProp != null) { return _gamepadCurrentProp.GetValue(null, BindingFlags.Default, null, null, null); } return null; } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Error getting gamepad instance: " + ex.Message); return null; } } private static string ExtractAndNormalizePath(object control) { if (control == null) { return null; } string text = null; try { string text2 = control.ToString(); if (!string.IsNullOrEmpty(text2)) { int num = text2.IndexOf('/'); if (num >= 0) { int num2 = text2.IndexOf('}', num); if (num2 >= 0) { text = text2.Substring(num, num2 - num); } } } } catch { } if (string.IsNullOrEmpty(text)) { try { PropertyInfo property = control.GetType().GetProperty("name", BindingFlags.Instance | BindingFlags.Public); if ((object)property != null) { string text3 = property.GetValue(control, BindingFlags.Default, null, null, null) as string; if (!string.IsNullOrEmpty(text3)) { text = "/gamepad/" + text3; } } } catch { } } if (string.IsNullOrEmpty(text)) { return null; } return NormalizeControlPath(text); } public static string NormalizeControlPath(string rawPath) { if (string.IsNullOrEmpty(rawPath)) { return rawPath; } string text = rawPath.ToLowerInvariant().Trim(); foreach (KeyValuePair<string, string> item in _vendorPrefixMap) { if (text.StartsWith(item.Key)) { text = item.Value + text.Substring(item.Key.Length); break; } } int length = "/gamepad".Length; if (text.StartsWith("/gamepad") && text.Length > length && char.IsDigit(text[length])) { text = "/gamepad" + text.Substring(length + 1); } switch (text) { default: if (!(text == "/gamepad/right")) { break; } goto case "/gamepad/up"; case "/gamepad/up": case "/gamepad/down": case "/gamepad/left": { string text2 = text.Substring("/gamepad/".Length); text = "/gamepad/dpad/" + text2; break; } } return text; } private static void ClearControlCaches() { INewInputSystem.gamepadButtonControls.Clear(); _axisControls.Clear(); _vector2Controls.Clear(); _axisValues.Clear(); _vector2Values.Clear(); } public static bool IsButtonPressed(string buttonPath) { if (!_isEnabled) { return false; } string key = buttonPath.ToLower(); if (INewInputSystem.gamepadButtonControls.TryGetValue(key, out var value) && (object)_buttonIsPressedProp != null) { _buttonIsPressedProp.GetValue(value, BindingFlags.Default, null, null, null); } bool value2; return INewInputSystem.buttonPressedStates.TryGetValue(key, out value2) && value2; } public static bool WasButtonPressedThisFrame(string buttonPath) { if (!_isEnabled) { return false; } string key = buttonPath.ToLower(); if (INewInputSystem.gamepadButtonControls.TryGetValue(key, out var value) && (object)_buttonWasPressedProp != null) { _buttonWasPressedProp.GetValue(value, BindingFlags.Default, null, null, null); } bool value2; return INewInputSystem.buttonWasPressedStates.TryGetValue(key, out value2) && value2; } public static bool WasButtonReleasedThisFrame(string buttonPath) { if (!_isEnabled) { return false; } string key = buttonPath.ToLower(); if (INewInputSystem.gamepadButtonControls.TryGetValue(key, out var value) && (object)_buttonWasReleasedProp != null) { _buttonWasReleasedProp.GetValue(value, BindingFlags.Default, null, null, null); } bool value2; return INewInputSystem.buttonWasReleasedStates.TryGetValue(key, out value2) && value2; } public static float GetAxisValue(string axisPath) { if (!_isEnabled) { return 0f; } string key = NormalizeControlPath(axisPath ?? ""); if (_axisControls.TryGetValue(key, out var value) && (object)_axisReadValueMethod != null) { _axisReadValueMethod.Invoke(value, null); } float value2; return _axisValues.TryGetValue(key, out value2) ? value2 : 0f; } public static Vector2 GetVector2Value(string vectorPath) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) if (!_isEnabled) { return new Vector2(0f, 0f); } string key = NormalizeControlPath(vectorPath ?? ""); if (_vector2Controls.TryGetValue(key, out var value) && (object)_vector2ReadValueMethod != null) { _vector2ReadValueMethod.Invoke(value, null); } Vector2 value2; return (Vector2)(_vector2Values.TryGetValue(key, out value2) ? value2 : new Vector2(0f, 0f)); } public static IEnumerable<string> GetRegisteredButtonPaths() { return INewInputSystem.gamepadButtonControls.Keys; } public static IEnumerable<string> GetRegisteredAxisPaths() { return _axisControls.Keys; } public static IEnumerable<string> GetRegisteredVector2Paths() { return _vector2Controls.Keys; } private static void Postfix_Vector2ReadValue(object __instance, ref object __result) { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) if (__instance == null || __result == null) { return; } try { if ((object)_deviceProp != null) { object value = _deviceProp.GetValue(__instance, BindingFlags.Default, null, null, null); if (value == null) { return; } } } catch { return; } string text = ExtractAndNormalizePath(__instance); if (string.IsNullOrEmpty(text)) { return; } try { if ((object)_vector2XProp != null && (object)_vector2YProp != null) { float num = (float)_vector2XProp.GetValue(__result, BindingFlags.Default, null, null, null); float num2 = (float)_vector2YProp.GetValue(__result, BindingFlags.Default, null, null, null); _vector2Values[text] = new Vector2(num, num2); if (_isEnabled && FreeCamPanel.ShouldOverrideInput() && _vector2XProp.CanWrite && _vector2YProp.CanWrite) { _vector2XProp.SetValue(__result, 0f, BindingFlags.Default, null, null, null); _vector2YProp.SetValue(__result, 0f, BindingFlags.Default, null, null, null); } } } catch { } } private static void Postfix_AxisReadValue(object __instance, ref float __result) { if (__instance == null) { return; } try { if ((object)_deviceProp != null) { object value = _deviceProp.GetValue(__instance, BindingFlags.Default, null, null, null); if (value == null) { return; } } } catch { return; } string text = ExtractAndNormalizePath(__instance); if (string.IsNullOrEmpty(text)) { return; } string text2 = text; try { object gamepadInstance = GetGamepadInstance(_targetGamepadIndex); if (gamepadInstance != null) { if ((object)_gamepadLeftStickProp != null) { object value2 = _gamepadLeftStickProp.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value2 != null) { PropertyInfo property = value2.GetType().GetProperty("x", BindingFlags.Instance | BindingFlags.Public); PropertyInfo property2 = value2.GetType().GetProperty("y", BindingFlags.Instance | BindingFlags.Public); object obj2 = property?.GetValue(value2, BindingFlags.Default, null, null, null); object obj3 = property2?.GetValue(value2, BindingFlags.Default, null, null, null); if (__instance == obj2 || __instance == obj3) { text2 = text.Replace("/gamepad/x", "/gamepad/leftstick/x").Replace("/gamepad/y", "/gamepad/leftstick/y"); } } } if (text2 == text && (object)_gamepadRightStickProp != null) { object value3 = _gamepadRightStickProp.GetValue(gamepadInstance, BindingFlags.Default, null, null, null); if (value3 != null) { PropertyInfo property3 = value3.GetType().GetProperty("x", BindingFlags.Instance | BindingFlags.Public); PropertyInfo property4 = value3.GetType().GetProperty("y", BindingFlags.Instance | BindingFlags.Public); object obj4 = property3?.GetValue(value3, BindingFlags.Default, null, null, null); object obj5 = property4?.GetValue(value3, BindingFlags.Default, null, null, null); if (__instance == obj4 || __instance == obj5) { text2 = text.Replace("/gamepad/x", "/gamepad/rightstick/x").Replace("/gamepad/y", "/gamepad/rightstick/y"); } } } } } catch (Exception ex) { ExplorerCore.LogWarning("[IGamepadInputInterceptor] Error identifying stick axis: " + ex.Message); } _axisValues[text2] = __result; if (_isEnabled && FreeCamPanel.ShouldOverrideInput()) { __result = 0f; } } } public static class IInputManager { private static InputType currentInputType; public static Vector3 MousePosition => InputManager.MousePosition; public static void Setup() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //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_0010: 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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected I4, but got Unknown currentInputType = InputManager.CurrentType; InputType val = currentInputType; InputType val2 = val; switch ((int)val2) { case 1: ILegacyInput.Init(); break; case 0: INewInputSystem.Init(); break; case 2: break; } } public static bool GetKey(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected I4, but got Unknown //IL_0026: 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_002f: Unknown result type (might be due to invalid IL or missing references) InputType val = currentInputType; InputType val2 = val; return (int)val2 switch { 1 => ILegacyInput.GetKey(key), 0 => INewInputSystem.GetKey(key), _ => InputManager.GetKey(key), }; } public static bool GetKeyDown(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected I4, but got Unknown //IL_001d: 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) InputType val = currentInputType; InputType val2 = val; switch ((int)val2) { case 1: return ILegacyInput.GetKeyDown(key); case 0: { string buttonName = ("/keyboard/" + ((object)(KeyCode)(ref key)).ToString()).ToLower(); return INewInputSystem.GetButtonWasPressed(buttonName); } default: return InputManager.GetKeyDown(key); } } public static bool GetKeyUp(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected I4, but got Unknown //IL_001d: 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) InputType val = currentInputType; InputType val2 = val; switch ((int)val2) { case 1: return ILegacyInput.GetKeyUp(key); case 0: { string buttonName = ("/keyboard/" + ((object)(KeyCode)(ref key)).ToString()).ToLower(); return INewInputSystem.GetButtonWasReleased(buttonName); } default: return InputManager.GetKeyUp(key); } } public static bool GetMouseButton(int button) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected I4, but got Unknown InputType val = currentInputType; InputType val2 = val; return (int)val2 switch { 1 => ILegacyInput.GetMouseButton(button), 0 => INewInputSystem.GetMouseButton(button), _ => InputManager.GetMouseButton(button), }; } public static bool GetMouseButtonDown(int button) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected I4, but got Unknown InputType val = currentInputType; InputType val2 = val; return (int)val2 switch { 1 => ILegacyInput.GetMouseButtonDown(button), 0 => INewInputSystem.GetMouseButtonDown(button), _ => InputManager.GetMouseButtonDown(button), }; } } public static class ILegacyInput { public static Dictionary<KeyCode, bool> getKeyDict = new Dictionary<KeyCode, bool>(); public static Dictionary<KeyCode, bool> getKeyDownDict = new Dictionary<KeyCode, bool>(); public static Dictionary<KeyCode, bool> getKeyUpDict = new Dictionary<KeyCode, bool>(); public static Dictionary<int, bool> getMouseButton = new Dictionary<int, bool>(); public static Dictionary<int, bool> getMouseButtonDown = new Dictionary<int, bool>(); public static bool GetKey(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if ((int)key == 0) { return false; } InputManager.GetKey(key); return getKeyDict[key]; } public static bool GetKeyDown(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if ((int)key == 0) { return false; } InputManager.GetKeyDown(key); return getKeyDownDict[key]; } public static bool GetKeyUp(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if ((int)key == 0) { return false; } InputManager.GetKeyUp(key); return getKeyUpDict[key]; } public static bool GetMouseButton(int button) { InputManager.GetMouseButton(button); return getMouseButton[button]; } public static bool GetMouseButtonDown(int button) { InputManager.GetMouseButtonDown(button); return getMouseButtonDown[button]; } public static void Init() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Expected O, but got Unknown //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Expected O, but got Unknown //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Expected O, but got Unknown //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Expected O, but got Unknown Type typeByName = ReflectionUtility.GetTypeByName("UnityEngine.Input"); try { MethodInfo method = typeByName.GetMethod("GetKey", new Type[1] { typeof(string) }); ExplorerCore.Harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyString", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method2 = typeByName.GetMethod("GetKey", new Type[1] { typeof(KeyCode) }); ExplorerCore.Harmony.Patch((MethodBase)method2, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyKeyCode", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method3 = typeByName.GetMethod("GetKeyDown", new Type[1] { typeof(string) }); ExplorerCore.Harmony.Patch((MethodBase)method3, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyDownString", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method4 = typeByName.GetMethod("GetKeyDown", new Type[1] { typeof(KeyCode) }); ExplorerCore.Harmony.Patch((MethodBase)method4, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyDownKeyCode", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method5 = typeByName.GetMethod("GetKeyUp", new Type[1] { typeof(string) }); ExplorerCore.Harmony.Patch((MethodBase)method5, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyUpString", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method6 = typeByName.GetMethod("GetKeyUp", new Type[1] { typeof(KeyCode) }); ExplorerCore.Harmony.Patch((MethodBase)method6, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideKeyUpKeyCode", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method7 = typeByName.GetMethod("GetMouseButton", new Type[1] { typeof(int) }); ExplorerCore.Harmony.Patch((MethodBase)method7, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideMouseButton", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } try { MethodInfo method8 = typeByName.GetMethod("GetMouseButtonDown", new Type[1] { typeof(int) }); ExplorerCore.Harmony.Patch((MethodBase)method8, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(ILegacyInput), "OverrideMouseButtonDown", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } } public static void OverrideKeyString(ref bool __result, ref string name) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) KeyCode key = (KeyCode)System.Enum.Parse(typeof(KeyCode), name); getKeyDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } public static void OverrideKeyKeyCode(ref bool __result, ref KeyCode key) { if (key) { getKeyDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } } public static void OverrideKeyDownString(ref bool __result, ref string name) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) KeyCode key = (KeyCode)System.Enum.Parse(typeof(KeyCode), name); getKeyDownDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } public static void OverrideKeyDownKeyCode(ref bool __result, ref KeyCode key) { if (key) { getKeyDownDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } } public static void OverrideKeyUpString(ref bool __result, ref string name) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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) KeyCode key = (KeyCode)System.Enum.Parse(typeof(KeyCode), name); getKeyUpDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } public static void OverrideKeyUpKeyCode(ref bool __result, ref KeyCode key) { if (key) { getKeyUpDict[key] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } } public static void OverrideMouseButton(ref bool __result, ref int button) { getMouseButton[button] = __result; if (FreeCamPanel.ShouldOverrideInput() && (button != 0 || !UIManager.ShowMenu)) { __result = false; } } public static void OverrideMouseButtonDown(ref bool __result, ref int button) { getMouseButtonDown[button] = __result; if (FreeCamPanel.ShouldOverrideInput() && (button != 0 || !UIManager.ShowMenu)) { __result = false; } } } public static class INewInputSystem { private static PropertyInfo isPressedProp; private static PropertyInfo wasPressedProp; private static PropertyInfo wasReleasedProp; private static MethodInfo isValueConsideredPressed; private static MethodInfo isPressedMethod; private static MethodInfo isInProgressMethod; private static MethodInfo wasPressedMethod; private static MethodInfo wasPerformedMethod; internal static readonly Dictionary<string, object> buttonControls = new Dictionary<string, object>(); internal static readonly Dictionary<string, object> gamepadButtonControls = new Dictionary<string, object>(); internal static readonly Dictionary<string, bool> buttonPressedStates = new Dictionary<string, bool>(); internal static readonly Dictionary<string, bool> buttonWasPressedStates = new Dictionary<string, bool>(); internal static readonly Dictionary<string, bool> buttonWasReleasedStates = new Dictionary<string, bool>(); private static readonly Dictionary<string, bool> buttonIsValueConsideredPressedStates = new Dictionary<string, bool>(); private static readonly Dictionary<string, bool> actionInProgressStates = new Dictionary<string, bool>(); private static readonly Dictionary<string, bool> actionWasPerformedStates = new Dictionary<string, bool>(); public static void Init() { Type typeByName = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Controls.ButtonControl, Unity.InputSystem"); Type typeByName2 = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.InputAction, Unity.InputSystem"); if ((object)typeByName == null || (object)typeByName2 == null) { ExplorerCore.LogWarning("Unity.InputSystem types not found; InputSystem integration disabled."); return; } PatchButtonControl(typeByName); PatchInputAction(typeByName2); GetButtonControls(); IGamepadInputInterceptor.Init(); } private static void PatchButtonControl(Type buttonControlType) { isPressedProp = buttonControlType.GetProperty("isPressed"); wasPressedProp = buttonControlType.GetProperty("wasPressedThisFrame"); wasReleasedProp = buttonControlType.GetProperty("wasReleasedThisFrame"); isValueConsideredPressed = buttonControlType.GetMethod("IsValueConsideredPressed"); PatchPropertyGetter(isPressedProp, "Postfix_IsPressed"); PatchPropertyGetter(wasPressedProp, "Postfix_WasPressedThisFrame"); PatchPropertyGetter(wasReleasedProp, "Postfix_WasReleasedThisFrame"); PatchPropertyGetter(wasReleasedProp, "Postfix_IsValueConsideredPressed"); } private static void PatchInputAction(Type inputActionType) { isPressedMethod = inputActionType.GetMethod("IsPressed"); isInProgressMethod = inputActionType.GetMethod("IsInProgress"); wasPressedMethod = inputActionType.GetMethod("WasPressedThisFrame"); wasPerformedMethod = inputActionType.GetMethod("WasPerformedThisFrame"); PatchMethod(isPressedMethod, "Postfix_IsPressed"); PatchMethod(isInProgressMethod, "Postfix_IsInProgress"); PatchMethod(wasPressedMethod, "Postfix_WasPressedThisFrame"); PatchMethod(wasPerformedMethod, "Postfix_WasPerformedThisFrame"); } private static void PatchPropertyGetter(PropertyInfo prop, string postfixName) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown if ((object)prop?.GetGetMethod() != null) { ExplorerCore.Harmony.Patch((MethodBase)prop.GetGetMethod(), (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(INewInputSystem), postfixName, (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } private static void PatchMethod(MethodInfo method, string postfixName) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown if ((object)method != null) { ExplorerCore.Harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(INewInputSystem), postfixName, (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } public static void GetButtonControls() { PropertyInfo pathProp = ReflectionUtility.GetTypeByName("UnityEngine.InputSystem.Controls.ButtonControl, Unity.InputSystem")?.GetProperty("path", BindingFlags.Instance | BindingFlags.Public); RegisterDeviceControls("UnityEngine.InputSystem.Keyboard", "UnityEngine.InputSystem.Controls.KeyControl", pathProp); RegisterDeviceControls("UnityEngine.InputSystem.Mouse", "UnityEngine.InputSystem.Controls.ButtonControl", pathProp); } internal static void RegisterDeviceControls(string deviceTypeName, string controlTypeName, PropertyInfo pathProp) { Type typeByName = ReflectionUtility.GetTypeByName(deviceTypeName + ", Unity.InputSystem"); if ((object)typeByName == null) { return; } object obj = typeByName.GetProperty("current", BindingFlags.Static | BindingFlags.Public)?.GetValue(null, null); if (obj == null) { return; } PropertyInfo[] properties = typeByName.GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.GetIndexParameters().Length != 0 || !(propertyInfo.PropertyType.FullName == controlTypeName)) { continue; } object value = propertyInfo.GetValue(obj, null); if (value != null) { string text = pathProp?.GetValue(value, null) as string; if (!string.IsNullOrEmpty(text)) { buttonControls[text.ToLower()] = value; } } } } public static bool GetKey(KeyCode key) { string buttonName = PropToKeycode(("/keyboard/" + ((object)(KeyCode)(ref key)).ToString()).ToLower()); return GetButtonPressed(buttonName); } public static bool GetButtonPressed(string buttonName) { string key = buttonName.ToLower(); if (buttonControls.TryGetValue(key, out var value)) { isPressedProp?.GetValue(value, null); bool value2; return buttonPressedStates.TryGetValue(key, out value2) && value2; } return false; } public static bool GetButtonWasPressed(string buttonName) { string key = buttonName.ToLower(); if (buttonControls.TryGetValue(key, out var value)) { wasPressedProp?.GetValue(value, null); bool value2; return buttonWasPressedStates.TryGetValue(key, out value2) && value2; } return false; } public static bool GetButtonWasReleased(string buttonName) { string key = buttonName.ToLower(); if (buttonControls.TryGetValue(key, out var value)) { wasReleasedProp?.GetValue(value, null); bool value2; return buttonWasReleasedStates.TryGetValue(key, out value2) && value2; } return false; } public static bool GetMouseButton(int button) { return GetButtonPressed(button switch { 0 => "/mouse/leftbutton", 1 => "/mouse/rightbutton", 2 => "/mouse/middlebutton", 3 => "/mouse/forwardbutton", 4 => "/mouse/backbutton", _ => $"/mouse/button{button}", }); } public static bool GetMouseButtonDown(int button) { return GetButtonWasPressed(button switch { 0 => "/mouse/leftbutton", 1 => "/mouse/rightbutton", 2 => "/mouse/middlebutton", 3 => "/mouse/forwardbutton", 4 => "/mouse/backbutton", _ => $"/mouse/button{button}", }); } private static void Postfix_IsPressed(object __instance, ref bool __result) { StoreState(__instance, ref __result, buttonPressedStates); } private static void Postfix_WasPressedThisFrame(object __instance, ref bool __result) { StoreState(__instance, ref __result, buttonWasPressedStates); } private static void Postfix_WasReleasedThisFrame(object __instance, ref bool __result) { StoreState(__instance, ref __result, buttonWasReleasedStates); } private static void Postfix_IsValueConsideredPressed(object __instance, ref bool __result) { StoreState(__instance, ref __result, buttonIsValueConsideredPressedStates); } private static void Postfix_IsInProgress(object __instance, ref bool __result) { StoreState(__instance, ref __result, actionInProgressStates); } private static void Postfix_WasPerformedThisFrame(object __instance, ref bool __result) { StoreState(__instance, ref __result, actionWasPerformedStates); } private static void StoreState(object __instance, ref bool __result, Dictionary<string, bool> dict) { try { Type type = __instance.GetType(); string rawPath = ((type.GetProperty("path") ?? type.GetProperty("name"))?.GetValue(__instance, null)?.ToString() ?? string.Empty).ToLower(); rawPath = IGamepadInputInterceptor.NormalizeControlPath(rawPath); dict[rawPath] = __result; if (FreeCamPanel.ShouldOverrideInput()) { __result = false; } } catch (Exception ex) { ExplorerCore.LogWarning("Failed to store state: " + ex.Message); } } public static string PropToKeycode(string propName) { return propName switch { "/keyboard/leftcontrol" => "/keyboard/leftctrl", "/keyboard/rightcontrol" => "/keyboard/rightctrl", "/keyboard/keypad0" => "/keyboard/numpad0", "/keyboard/keypad1" => "/keyboard/numpad1", "/keyboard/keypad2" => "/keyboard/numpad2", "/keyboard/keypad3" => "/keyboard/numpad3", "/keyboard/keypad4" => "/keyboard/numpad4", "/keyboard/keypad5" => "/keyboard/numpad5", "/keyboard/keypad6" => "/keyboard/numpad6", "/keyboard/keypad7" => "/keyboard/numpad7", "/keyboard/keypad8" => "/keyboard/numpad8", "/keyboard/keypad9" => "/keyboard/numpad9", "/keyboard/keypaddivide" => "/keyboard/numpaddivide", "/keyboard/keypadmultiply" => "/keyboard/numpadmultiply", "/keyboard/keypadminus" => "/keyboard/numpadminus", "/keyboard/keypadplus" => "/keyboard/numpadplus", "/keyboard/keypadperiod" => "/keyboard/numpadperiod", "/keyboard/keypadequals" => "/keyboard/numpadequals", "/keyboard/keypadenter" => "/keyboard/numpadenter", "/keyboard/alpha0" => "/keyboard/0", "/keyboard/alpha1" => "/keyboard/1", "/keyboard/alpha2" => "/keyboard/2", "/keyboard/alpha3" => "/keyboard/3", "/keyboard/alpha4" => "/keyboard/4", "/keyboard/alpha5" => "/keyboard/5", "/keyboard/alpha6" => "/keyboard/6", "/keyboard/alpha7" => "/keyboard/7", "/keyboard/alpha8" => "/keyboard/8", "/keyboard/alpha9" => "/keyboard/9", "/keyboard/print" => "/keyboard/printscreen", _ => propName, }; } } } namespace UnityExplorer { public class ArrowGenerator { public static GameObject CreateArrow(Vector3 arrowPosition, Quaternion arrowRotation, Color color) { //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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_006d: 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_0077: 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_009e: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Expected O, but got Unknown //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) try { float value = ConfigManager.Arrow_Size.Value; Vector3 localScale = default(Vector3); ((Vector3)(ref localScale))..ctor(Math.Max(value, 0.1f), Math.Max(value, 0.1f), Math.Max(value, 0.1f)); GameObject val = GameObject.CreatePrimitive((PrimitiveType)2); val.GetComponent<Collider>().enabled = false; val.GetComponent<MeshFilter>().mesh = CreateCylinderMesh(0.01f, 20, 2); val.transform.rotation = Quaternion.LookRotation(Vector3.down, Vector3.up); Renderer component = val.GetComponent<Renderer>(); component.material = new Material(Shader.Find("Sprites/Default")); component.material.color = color; GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0); val2.GetComponent<Collider>().enabled = false; val2.GetComponent<MeshFilter>().mesh = CreateConeMesh(10, 0.05f, 0.1f); val2.transform.SetParent(val.transform, true); Renderer component2 = val2.GetComponent<Renderer>(); component2.material = new Material(Shader.Find("Sprites/Default")); component2.material.color = color; val.transform.rotation = Quaternion.LookRotation(Vector3.back, Vector3.up); GameObject val3 = new GameObject("CUE-Arrow"); val.transform.SetParent(val3.transform, true); val3.transform.localScale = localScale; val3.transform.position = arrowPosition; val3.transform.rotation = arrowRotation; Transform transform = val3.transform; transform.position += 0.5f * val3.transform.forward; return val3; } catch { return FallbackArrow(arrowPosition, arrowRotation, color); } } private static GameObject FallbackArrow(Vector3 arrowPosition, Quaternion arrowRotation, Color color) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: 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_00fc: Expected O, but got Unknown //IL_0117: 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) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.CreatePrimitive((PrimitiveType)2); val.GetComponent<Collider>().enabled = false; Renderer component = val.GetComponent<Renderer>(); component.material = new Material(Shader.Find("Sprites/Default")); component.material.color = color; val.transform.localScale = new Vector3(0.025f, 0.15f, 0.025f); GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0); val2.GetComponent<Collider>().enabled = false; val2.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); val2.transform.position = new Vector3(0f, 0.15f, 0f); val2.transform.SetParent(val.transform, true); Renderer component2 = val2.GetComponent<Renderer>(); component2.material = new Material(Shader.Find("Sprites/Default")); component2.material.color = color; GameObject val3 = new GameObject("CUE-Arrow"); val.transform.SetParent(val3.transform, true); val3.transform.position = arrowPosition; Vector3 eulerAngles = ((Quaternion)(ref arrowRotation)).eulerAngles; eulerAngles.x += 90f; val3.transform.rotation = Quaternion.Euler(eulerAngles); Transform transform = val3.transform; transform.position += 0.15f * val3.transform.up; return val3; } public static void PatchLights() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown try { PropertyInfo property = typeof(Light).GetProperty("color"); MethodInfo setMethod = property.GetSetMethod(); ExplorerCore.Harmony.Patch((MethodBase)setMethod, new HarmonyMethod(AccessTools.Method(typeof(ArrowGenerator), "ChangeArrowColor", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } catch { } } private static void ChangeArrowColor(Light __instance, Color __0) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (((Object)__instance).name.Contains("CUE - Light")) { Renderer[] componentsInChildren = ((Component)__instance).GetComponentsInChildren<Renderer>(); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { val.material.color = __0; } } } private static Mesh CreateConeMesh(int subdivisions, float radius, float height) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //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_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) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) Mesh val = new Mesh(); Vector3[] array = (Vector3[])(object)new Vector3[subdivisions + 2]; Vector2[] array2 = (Vector2[])(object)new Vector2[array.Length]; int[] array3 = new int[subdivisions * 2 * 3]; array[0] = Vector3.zero; array2[0] = new Vector2(0.5f, 0f); int i = 0; int num = subdivisions - 1; for (; i < subdivisions; i++) { float num2 = (float)i / (float)num; float num3 = num2 * ((float)Math.PI * 2f); float num4 = Mathf.Cos(num3) * radius; float num5 = Mathf.Sin(num3) * radius; array[i + 1] = new Vector3(num4, 0f, num5); array2[i + 1] = new Vector2(num2, 0f); } array[subdivisions + 1] = new Vector3(0f, height, 0f); array2[subdivisions + 1] = new Vector2(0.5f, 1f); int j = 0; for (int num6 = subdivisions - 1; j < num6; j++) { int num7 = j * 3; array3[num7] = 0; array3[num7 + 1] = j + 1; array3[num7 + 2] = j + 2; } int num8 = subdivisions * 3; int k = 0; for (int num9 = subdivisions - 1; k < num9; k++) { int num10 = k * 3 + num8; array3[num10] = k + 1; array3[num10 + 1] = subdivisions + 1; array3[num10 + 2] = k + 2; } val.vertices = array; val.uv = array2; val.triangles = array3; val.RecalculateBounds(); val.RecalculateNormals(); return val; } private static Mesh CreateCylinderMesh(float radius = 1f, int iterations = 50, int lenggth = 10, float gap = 0.5f) { //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_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_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown //IL_006d: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) int num = 0; float num2 = 0f; int i = 0; Vector3[] array = (Vector3[])(object)new Vector3[iterations * lenggth + 2]; int num3 = 0; array[^2] = Vector3.zero; for (; i < lenggth; i++) { int num4 = 0; while (num4 < iterations) { float num5 = (float)num4 * 1f / (float)iterations * (float)Math.PI * 2f; float num6 = Mathf.Sin(num5) * radius; float num7 = Mathf.Cos(num5) * radius; array[num3] = new Vector3(num6, num7, num2); num4++; num++; num3++; } num2 += gap; } array[^1] = new Vector3(0f, 0f, array[^3].z); Mesh val = new Mesh(); val.vertices = array; int j = 0; Vector3[] array2 = (Vector3[])(object)new Vector3[num + 2]; for (; j < num; j++) { array2[j] = Vector3.forward; } val.normals = array2; j = 0; int[] array3 = new int[3 * (lenggth - 1) * iterations * 2 + 3]; for (; j < (lenggth - 1) * iterations; j++) { array3[j * 3] = j; if ((j + 1) % iterations == 0) { array3[j * 3 + 1] = 1 + j - iterations; } else { array3[j * 3 + 1] = 1 + j; } array3[j * 3 + 2] = iterations + j; } int num8 = -1; for (int k = (array3.Length - 3) / 2; k < array3.Length - 6; k += 3) { if ((num8 + 2) % iterations == 0) { array3[k] = num8 + iterations * 2 + 1; } else { array3[k] = num8 + iterations + 1; } array3[k + 1] = num8 + 2; array3[k + 2] = num8 + iterations + 2; num8++; } array3[^3] = 0; array3[^2] = iterations * 2 - 1; array3[^1] = iterations; int[] array4 = new int[iterations * 3 * 2]; int num9 = 0; for (int l = 0; l < array4.Length / 2; l += 3) { array4[l] = num9; if (num9 + 1 != iterations) { array4[l + 1] = num9 + 1; } else { array4[l + 1] = 0; } array4[l + 2] = array.Length - 2; num9++; } num9 = iterations * (lenggth - 1); for (int m = array4.Length / 2; m < array4.Length; m += 3) { array4[m] = num9; if (num9 + 1 != iterations * (lenggth - 1)) { array4[m + 1] = num9 + 1; } else { array4[m + 1] = iterations * (lenggth - 1); } array4[m + 2] = array.Length - 1; num9++; } array4[^3] = iterations * (lenggth - 1); array4[^2] = array.Length - 3; array4[^1] = array.Length - 1; int[] array5 = new int[array3.Length + array4.Length]; int num10 = 0; int num11 = 0; num10 = 0; num11 = 0; for (; num10 < array3.Length; num10++) { array5[num11++] = array3[num10]; } for (num10 = 0; num10 < array4.Length; num10++) { array5[num11++] = array4[num10]; } val.triangles = array5; val.Optimize(); val.RecalculateNormals(); return val; } } public class ExplorerBehaviour : MonoBehaviour { internal bool quitting; internal static ExplorerBehaviour Instance { get; private set; } internal static void Setup() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("ExplorerBehaviour"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)61; Instance = val.AddComponent<ExplorerBehaviour>(); } internal void Update() { ExplorerCore.Update(); } internal void OnDestroy() { OnApplicationQuit(); } internal void OnApplicationQuit() { if (!quitting) { quitting = true; if (Object.op_Implicit((Object)(object)UIManager.UIRoot)) { TryDestroy(((Component)UIManager.UIRoot.transform.root).gameObject); } object? value = typeof(Universe).Assembly.GetType("UniverseLib.UniversalBehaviour").GetProperty("Instance", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, null); TryDestroy(((Component)((value is Component) ? value : null)).gameObject); TryDestroy(((Component)this).gameObject); } } internal void TryDestroy(GameObject obj) { try { if (Object.op_Implicit((Object)(object)obj)) { Object.Destroy((Object)(object)obj); } } catch { } } } public class KeypressListener : MonoBehaviour { private bool frameSkip; internal static KeypressListener Instance { get; private set; } internal static void Setup() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("KeypressListener"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)61; Instance = val.AddComponent<KeypressListener>(); } public void Update() { //IL_001b: 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_0076: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid I
UniverseLib.Mono.dll
Decompiled 5 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using HarmonyLib; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; using UniverseLib.Config; using UniverseLib.Input; using UniverseLib.Runtime; using UniverseLib.Runtime.Mono; using UniverseLib.UI; using UniverseLib.UI.Models; using UniverseLib.UI.ObjectPool; using UniverseLib.UI.Panels; using UniverseLib.UI.Widgets; using UniverseLib.UI.Widgets.ScrollView; using UniverseLib.Utility; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("UniverseLib")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Sinai, yukieiji")] [assembly: AssemblyProduct("UniverseLib")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("b21dbde3-5d6f-4726-93ab-cc3cc68bae7d")] [assembly: AssemblyFileVersion("1.5.5")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.5.0")] [module: UnverifiableCode] public static class MonoExtensions { private static PropertyInfo p_childControlHeight = AccessTools.Property(typeof(HorizontalOrVerticalLayoutGroup), "childControlHeight"); private static PropertyInfo p_childControlWidth = AccessTools.Property(typeof(HorizontalOrVerticalLayoutGroup), "childControlWidth"); public static void AddListener(this UnityEvent _event, Action listener) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown _event.AddListener(new UnityAction(listener.Invoke)); } public static void AddListener<T>(this UnityEvent<T> _event, Action<T> listener) { _event.AddListener((UnityAction<T>)listener.Invoke); } public static void RemoveListener(this UnityEvent _event, Action listener) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown _event.RemoveListener(new UnityAction(listener.Invoke)); } public static void RemoveListener<T>(this UnityEvent<T> _event, Action<T> listener) { _event.RemoveListener((UnityAction<T>)listener.Invoke); } public static void Clear(this StringBuilder sb) { sb.Remove(0, sb.Length); } public static void SetChildControlHeight(this HorizontalOrVerticalLayoutGroup group, bool value) { p_childControlHeight?.SetValue(group, value, null); } public static void SetChildControlWidth(this HorizontalOrVerticalLayoutGroup group, bool value) { p_childControlWidth?.SetValue(group, value, null); } } namespace UniverseLib { public static class ReflectionExtensions { public static Type GetActualType(this object obj) { return ReflectionUtility.Instance.Internal_GetActualType(obj); } public static object TryCast(this object obj) { return ReflectionUtility.Instance.Internal_TryCast(obj, ReflectionUtility.Instance.Internal_GetActualType(obj)); } public static object TryCast(this object obj, Type castTo) { return ReflectionUtility.Instance.Internal_TryCast(obj, castTo); } public static T TryCast<T>(this object obj) { try { return (T)ReflectionUtility.Instance.Internal_TryCast(obj, typeof(T)); } catch { return default(T); } } public static Type[] TryGetTypes(this Assembly asm) { try { return asm.GetTypes(); } catch (ReflectionTypeLoadException e) { return ReflectionUtility.TryExtractTypesFromException(e); } catch { try { return asm.GetExportedTypes(); } catch (ReflectionTypeLoadException e2) { return ReflectionUtility.TryExtractTypesFromException(e2); } catch { return ArgumentUtility.EmptyTypes; } } } public static bool ReferenceEqual(this object objA, object objB) { if (objA == objB) { return true; } Object val = (Object)((objA is Object) ? objA : null); if (val != null) { Object val2 = (Object)((objB is Object) ? objB : null); if (val2 != null && Object.op_Implicit(val) && Object.op_Implicit(val2) && val.m_CachedPtr == val2.m_CachedPtr) { return true; } } return false; } public static string ReflectionExToString(this Exception e, bool innerMost = true) { if (e == null) { return "The exception was null."; } if (innerMost) { e = e.GetInnerMostException(); } return $"{e.GetType()}: {e.Message}"; } public static Exception GetInnerMostException(this Exception e) { while (e != null && e.InnerException != null) { e = e.InnerException; } return e; } } public class ReflectionUtility { public static bool Initializing; public const BindingFlags FLAGS = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; public static readonly SortedDictionary<string, Type> AllTypes = new SortedDictionary<string, Type>(StringComparer.OrdinalIgnoreCase); public static readonly List<string> AllNamespaces = new List<string>(); private static readonly HashSet<string> uniqueNamespaces = new HashSet<string>(); private static string[] allTypeNamesArray; private static readonly Dictionary<string, Type> shorthandToType = new Dictionary<string, Type> { { "object", typeof(object) }, { "string", typeof(string) }, { "bool", typeof(bool) }, { "byte", typeof(byte) }, { "sbyte", typeof(sbyte) }, { "char", typeof(char) }, { "decimal", typeof(decimal) }, { "double", typeof(double) }, { "float", typeof(float) }, { "int", typeof(int) }, { "uint", typeof(uint) }, { "long", typeof(long) }, { "ulong", typeof(ulong) }, { "short", typeof(short) }, { "ushort", typeof(ushort) }, { "void", typeof(void) } }; internal static readonly Dictionary<string, Type[]> baseTypes = new Dictionary<string, Type[]>(); internal static ReflectionUtility Instance { get; private set; } public static event Action<Type> OnTypeLoaded; internal static void Init() { Instance = new ReflectionUtility(); Instance.Initialize(); } protected virtual void Initialize() { SetupTypeCache(); Initializing = false; } public static string[] GetTypeNameArray() { if (allTypeNamesArray == null || allTypeNamesArray.Length != AllTypes.Count) { allTypeNamesArray = new string[AllTypes.Count]; int num = 0; foreach (string key in AllTypes.Keys) { allTypeNamesArray[num] = key; num++; } } return allTypeNamesArray; } private static void SetupTypeCache() { if (Universe.Context == RuntimeContext.Mono) { ForceLoadManagedAssemblies(); } Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly asm in assemblies) { CacheTypes(asm); } AppDomain.CurrentDomain.AssemblyLoad += AssemblyLoaded; } private static void AssemblyLoaded(object sender, AssemblyLoadEventArgs args) { if ((object)args.LoadedAssembly != null && !(args.LoadedAssembly.GetName().Name == "completions")) { CacheTypes(args.LoadedAssembly); } } private static void ForceLoadManagedAssemblies() { string path = Path.Combine(Application.dataPath, "Managed"); if (!Directory.Exists(path)) { return; } string[] files = Directory.GetFiles(path, "*.dll"); foreach (string assemblyFile in files) { try { Assembly asm = Assembly.LoadFrom(assemblyFile); asm.TryGetTypes(); } catch { } } } internal static void CacheTypes(Assembly asm) { Type[] array = asm.TryGetTypes(); foreach (Type type in array) { try { string @namespace = type.Namespace; if (!string.IsNullOrEmpty(@namespace) && !uniqueNamespaces.Contains(@namespace)) { uniqueNamespaces.Add(@namespace); int j; for (j = 0; j < AllNamespaces.Count && @namespace.CompareTo(AllNamespaces[j]) >= 0; j++) { } AllNamespaces.Insert(j, @namespace); } } catch (Exception arg) { Universe.Log($"Can't cache type named {type.Name} Error: {arg}"); } AllTypes[type.FullName] = type; ReflectionUtility.OnTypeLoaded?.Invoke(type); } } public static Type GetTypeByName(string fullName) { return Instance.Internal_GetTypeByName(fullName); } internal virtual Type Internal_GetTypeByName(string fullName) { if (shorthandToType.TryGetValue(fullName, out var value)) { return value; } AllTypes.TryGetValue(fullName, out var value2); if ((object)value2 == null) { value2 = Type.GetType(fullName); } return value2; } internal virtual Type Internal_GetActualType(object obj) { return obj?.GetType(); } internal virtual object Internal_TryCast(object obj, Type castTo) { return obj; } public static string ProcessTypeInString(Type type, string theString) { return Instance.Internal_ProcessTypeInString(theString, type); } internal virtual string Internal_ProcessTypeInString(string theString, Type type) { return theString; } public static void FindSingleton(string[] possibleNames, Type type, BindingFlags flags, List<object> instances) { Instance.Internal_FindSingleton(possibleNames, type, flags, instances); } internal virtual void Internal_FindSingleton(string[] possibleNames, Type type, BindingFlags flags, List<object> instances) { foreach (string name in possibleNames) { FieldInfo field = type.GetField(name, flags); if ((object)field != null) { object value = field.GetValue(null); if (value != null) { instances.Add(value); break; } } } } public static Type[] TryExtractTypesFromException(ReflectionTypeLoadException e) { try { return e.Types.Where((Type it) => (object)it != null).ToArray(); } catch { return ArgumentUtility.EmptyTypes; } } public static Type[] GetAllBaseTypes(object obj) { return GetAllBaseTypes(obj?.GetActualType()); } public static Type[] GetAllBaseTypes(Type type) { if ((object)type == null) { throw new ArgumentNullException("type"); } string assemblyQualifiedName = type.AssemblyQualifiedName; if (baseTypes.TryGetValue(assemblyQualifiedName, out var value)) { return value; } List<Type> list = new List<Type>(); while ((object)type != null) { list.Add(type); type = type.BaseType; } value = list.ToArray(); baseTypes.Add(assemblyQualifiedName, value); return value; } public static void GetImplementationsOf(Type baseType, Action<HashSet<Type>> onResultsFetched, bool allowAbstract, bool allowGeneric, bool allowEnum) { RuntimeHelper.StartCoroutine(DoGetImplementations(onResultsFetched, baseType, allowAbstract, allowGeneric, allowEnum)); } private static IEnumerator DoGetImplementations(Action<HashSet<Type>> onResultsFetched, Type baseType, bool allowAbstract, bool allowGeneric, bool allowEnum) { List<Type> resolvedTypes = new List<Type>(); OnTypeLoaded += ourListener; HashSet<Type> set = new HashSet<Type>(); IEnumerator coro2 = GetImplementationsAsync(baseType, set, allowAbstract, allowGeneric, allowEnum, DefaultTypesEnumerator()); while (coro2.MoveNext()) { yield return null; } OnTypeLoaded -= ourListener; if (resolvedTypes.Count > 0) { coro2 = GetImplementationsAsync(baseType, set, allowAbstract, allowGeneric, allowEnum, resolvedTypes.GetEnumerator()); while (coro2.MoveNext()) { yield return null; } } onResultsFetched(set); void ourListener(Type t) { resolvedTypes.Add(t); } } private static IEnumerator<Type> DefaultTypesEnumerator() { string[] names = GetTypeNameArray(); foreach (string name in names) { yield return AllTypes[name]; } } private static IEnumerator GetImplementationsAsync(Type baseType, HashSet<Type> set, bool allowAbstract, bool allowGeneric, bool allowEnum, IEnumerator<Type> enumerator) { Stopwatch sw = new Stopwatch(); sw.Start(); bool isGenericParam = baseType?.IsGenericParameter ?? false; while (enumerator.MoveNext()) { if (sw.ElapsedMilliseconds > 10) { yield return null; sw.Reset(); sw.Start(); } try { Type type = enumerator.Current; if (set.Contains(type) || (!allowAbstract && type.IsAbstract) || (!allowGeneric && type.IsGenericType) || (!allowEnum && type.IsEnum) || type.FullName.Contains("PrivateImplementationDetails") || type.FullName.Contains("DisplayClass") || Enumerable.Contains(type.FullName, '<')) { continue; } if (!isGenericParam) { if ((object)baseType == null || baseType.IsAssignableFrom(type)) { goto IL_0269; } } else if ((!type.IsClass || !MiscUtility.HasFlag(baseType.GenericParameterAttributes, GenericParameterAttributes.NotNullableValueTypeConstraint)) && (!type.IsValueType || !MiscUtility.HasFlag(baseType.GenericParameterAttributes, GenericParameterAttributes.ReferenceTypeConstraint)) && !baseType.GetGenericParameterConstraints().Any((Type it) => !it.IsAssignableFrom(type))) { goto IL_0269; } goto end_IL_009f; IL_0269: set.Add(type); end_IL_009f:; } catch { } } } public static bool IsEnumerable(Type type) { return Instance.Internal_IsEnumerable(type); } protected virtual bool Internal_IsEnumerable(Type type) { return typeof(IEnumerable).IsAssignableFrom(type); } public static bool TryGetEnumerator(object ienumerable, out IEnumerator enumerator) { return Instance.Internal_TryGetEnumerator(ienumerable, out enumerator); } protected virtual bool Internal_TryGetEnumerator(object list, out IEnumerator enumerator) { enumerator = (list as IEnumerable).GetEnumerator(); return true; } public static bool TryGetEntryType(Type enumerableType, out Type type) { return Instance.Internal_TryGetEntryType(enumerableType, out type); } protected virtual bool Internal_TryGetEntryType(Type enumerableType, out Type type) { if (enumerableType.IsArray) { type = enumerableType.GetElementType(); return true; } Type[] interfaces = enumerableType.GetInterfaces(); foreach (Type type2 in interfaces) { if (type2.IsGenericType) { Type genericTypeDefinition = type2.GetGenericTypeDefinition(); if ((object)genericTypeDefinition == typeof(IEnumerable<>) || (object)genericTypeDefinition == typeof(IList<>) || (object)genericTypeDefinition == typeof(ICollection<>)) { type = type2.GetGenericArguments()[0]; return true; } } } type = typeof(object); return false; } public static bool IsDictionary(Type type) { return Instance.Internal_IsDictionary(type); } protected virtual bool Internal_IsDictionary(Type type) { return typeof(IDictionary).IsAssignableFrom(type); } public static bool TryGetDictEnumerator(object dictionary, out IEnumerator<DictionaryEntry> dictEnumerator) { return Instance.Internal_TryGetDictEnumerator(dictionary, out dictEnumerator); } protected virtual bool Internal_TryGetDictEnumerator(object dictionary, out IEnumerator<DictionaryEntry> dictEnumerator) { dictEnumerator = EnumerateDictionary((IDictionary)dictionary); return true; } private IEnumerator<DictionaryEntry> EnumerateDictionary(IDictionary dict) { IDictionaryEnumerator enumerator = dict.GetEnumerator(); while (enumerator.MoveNext()) { yield return new DictionaryEntry(enumerator.Key, enumerator.Value); } } public static bool TryGetEntryTypes(Type dictionaryType, out Type keys, out Type values) { return Instance.Internal_TryGetEntryTypes(dictionaryType, out keys, out values); } protected virtual bool Internal_TryGetEntryTypes(Type dictionaryType, out Type keys, out Type values) { Type[] interfaces = dictionaryType.GetInterfaces(); foreach (Type type in interfaces) { if (type.IsGenericType && (object)type.GetGenericTypeDefinition() == typeof(IDictionary<, >)) { Type[] genericArguments = type.GetGenericArguments(); keys = genericArguments[0]; values = genericArguments[1]; return true; } } keys = typeof(object); values = typeof(object); return false; } } public abstract class RuntimeHelper { internal static RuntimeHelper Instance { get; private set; } internal static void Init() { Instance = new MonoProvider(); Instance.OnInitialize(); } protected internal abstract void OnInitialize(); public static Coroutine StartCoroutine(IEnumerator routine) { return Instance.Internal_StartCoroutine(routine); } protected internal abstract Coroutine Internal_StartCoroutine(IEnumerator routine); public static void StopCoroutine(Coroutine coroutine) { Instance.Internal_StopCoroutine(coroutine); } protected internal abstract void Internal_StopCoroutine(Coroutine coroutine); public static T AddComponent<T>(GameObject obj, Type type) where T : Component { return Instance.Internal_AddComponent<T>(obj, type); } protected internal abstract T Internal_AddComponent<T>(GameObject obj, Type type) where T : Component; public static ScriptableObject CreateScriptable(Type type) { return Instance.Internal_CreateScriptable(type); } protected internal abstract ScriptableObject Internal_CreateScriptable(Type type); public static string LayerToName(int layer) { return Instance.Internal_LayerToName(layer); } protected internal abstract string Internal_LayerToName(int layer); public static T[] FindObjectsOfTypeAll<T>() where T : Object { return Instance.Internal_FindObjectsOfTypeAll<T>(); } public static Object[] FindObjectsOfTypeAll(Type type) { return Instance.Internal_FindObjectsOfTypeAll(type); } protected internal abstract T[] Internal_FindObjectsOfTypeAll<T>() where T : Object; protected internal abstract Object[] Internal_FindObjectsOfTypeAll(Type type); public static void GraphicRaycast(GraphicRaycaster raycaster, PointerEventData data, List<RaycastResult> list) { Instance.Internal_GraphicRaycast(raycaster, data, list); } protected internal abstract void Internal_GraphicRaycast(GraphicRaycaster raycaster, PointerEventData data, List<RaycastResult> list); public static GameObject[] GetRootGameObjects(Scene scene) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return Instance.Internal_GetRootGameObjects(scene); } protected internal abstract GameObject[] Internal_GetRootGameObjects(Scene scene); public static int GetRootCount(Scene scene) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return Instance.Internal_GetRootCount(scene); } protected internal abstract int Internal_GetRootCount(Scene scene); public static void SetColorBlockAuto(Selectable selectable, Color baseColor) { //IL_0006: 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_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) Instance.Internal_SetColorBlock(selectable, baseColor, baseColor * 1.2f, baseColor * 0.8f); } public static void SetColorBlock(Selectable selectable, ColorBlock colors) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) Instance.Internal_SetColorBlock(selectable, colors); } protected internal abstract void Internal_SetColorBlock(Selectable selectable, ColorBlock colors); public static void SetColorBlock(Selectable selectable, Color? normal = null, Color? highlighted = null, Color? pressed = null, Color? disabled = null) { Instance.Internal_SetColorBlock(selectable, normal, highlighted, pressed, disabled); } protected internal abstract void Internal_SetColorBlock(Selectable selectable, Color? normal = null, Color? highlighted = null, Color? pressed = null, Color? disabled = null); } internal class UniversalBehaviour : MonoBehaviour { internal static UniversalBehaviour Instance { get; private set; } internal static void Setup() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("UniverseLibBehaviour"); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)(((Object)val).hideFlags | 0x3D); Instance = val.AddComponent<UniversalBehaviour>(); } internal void Update() { Universe.Update(); } } public class Universe { public enum GlobalState { WaitingToSetup, SettingUp, SetupCompleted } public const string NAME = "UniverseLib"; public const string VERSION = "1.5.5"; public const string AUTHOR = "Sinai, yukieiji"; public const string GUID = "com.sinai.universelib"; private static float startupDelay; private static Action<string, LogType> logHandler; public static RuntimeContext Context { get; } = RuntimeContext.Mono; public static GlobalState CurrentGlobalState { get; private set; } internal static Harmony Harmony { get; } = new Harmony("com.sinai.universelib"); private static event Action OnInitialized; public static void Init(Action onInitialized = null, Action<string, LogType> logHandler = null) { Init(1f, onInitialized, logHandler, default(UniverseLibConfig)); } public static void Init(float startupDelay, Action onInitialized, Action<string, LogType> logHandler, UniverseLibConfig config) { if (CurrentGlobalState == GlobalState.SetupCompleted) { InvokeOnInitialized(onInitialized); return; } if (startupDelay > Universe.startupDelay) { Universe.startupDelay = startupDelay; } ConfigManager.LoadConfig(config); OnInitialized += onInitialized; if (logHandler != null && Universe.logHandler == null) { Universe.logHandler = logHandler; } if (CurrentGlobalState == GlobalState.WaitingToSetup) { CurrentGlobalState = GlobalState.SettingUp; Log("UniverseLib 1.5.5 initializing..."); UniversalBehaviour.Setup(); ReflectionUtility.Init(); RuntimeHelper.Init(); RuntimeHelper.Instance.Internal_StartCoroutine(SetupCoroutine()); Log("Finished UniverseLib initial setup."); } } internal static void Update() { UniversalUI.Update(); } private static IEnumerator SetupCoroutine() { yield return null; Stopwatch sw = new Stopwatch(); sw.Start(); while (ReflectionUtility.Initializing || (float)sw.ElapsedMilliseconds * 0.001f < startupDelay) { yield return null; } InputManager.Init(); UniversalUI.Init(); Log("UniverseLib 1.5.5 initialized."); CurrentGlobalState = GlobalState.SetupCompleted; InvokeOnInitialized(Universe.OnInitialized); } private static void InvokeOnInitialized(Action onInitialized) { if (onInitialized == null) { return; } Delegate[] invocationList = onInitialized.GetInvocationList(); foreach (Delegate @delegate in invocationList) { try { @delegate.DynamicInvoke(); } catch (Exception arg) { LogWarning($"Exception invoking onInitialized callback! {arg}"); } } } internal static void Log(object message) { Log(message, (LogType)3); } internal static void LogWarning(object message) { Log(message, (LogType)2); } internal static void LogError(object message) { Log(message, (LogType)0); } private static void Log(object message, LogType logType) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (logHandler != null) { logHandler("[UniverseLib] " + (message?.ToString() ?? string.Empty), logType); } } internal static bool Patch(Type type, string methodName, MethodType methodType, Type[] arguments = null, MethodInfo prefix = null, MethodInfo postfix = null, MethodInfo finalizer = null) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Invalid comparison between Unknown and I4 //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown try { string text = (((int)methodType == 1) ? "get_" : (((int)methodType != 2) ? string.Empty : "set_")); string text2 = text; MethodInfo methodInfo = ((arguments == null) ? type.GetMethod(text2 + methodName, AccessTools.all) : type.GetMethod(text2 + methodName, AccessTools.all, null, arguments, null)); if ((object)methodInfo == null) { return false; } PatchProcessor val = Harmony.CreateProcessor((MethodBase)methodInfo); if ((object)prefix != null) { val.AddPrefix(new HarmonyMethod(prefix)); } if ((object)postfix != null) { val.AddPostfix(new HarmonyMethod(postfix)); } if ((object)finalizer != null) { val.AddFinalizer(new HarmonyMethod(finalizer)); } val.Patch(); return true; } catch (Exception arg) { LogWarning($"\t Exception patching {type.FullName}.{methodName}: {arg}"); return false; } } internal static bool Patch(Type type, string[] possibleNames, MethodType methodType, Type[] arguments = null, MethodInfo prefix = null, MethodInfo postfix = null, MethodInfo finalizer = null) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) foreach (string methodName in possibleNames) { if (Patch(type, methodName, methodType, arguments, prefix, postfix, finalizer)) { return true; } } return false; } internal static bool Patch(Type type, string[] possibleNames, MethodType methodType, Type[][] possibleArguments, MethodInfo prefix = null, MethodInfo postfix = null, MethodInfo finalizer = null) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) foreach (string methodName in possibleNames) { foreach (Type[] arguments in possibleArguments) { if (Patch(type, methodName, methodType, arguments, prefix, postfix, finalizer)) { return true; } } } return false; } internal static bool Patch(Type type, string methodName, MethodType methodType, Type[][] possibleArguments, MethodInfo prefix = null, MethodInfo postfix = null, MethodInfo finalizer = null) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) foreach (Type[] arguments in possibleArguments) { if (Patch(type, methodName, methodType, arguments, prefix, postfix, finalizer)) { return true; } } return false; } } } namespace UniverseLib.Utility { public static class ArgumentUtility { public static readonly Type[] EmptyTypes = new Type[0]; public static readonly object[] EmptyArgs = new object[0]; public static readonly Type[] ParseArgs = new Type[1] { typeof(string) }; } public static class IOUtility { private static readonly char[] invalidDirectoryCharacters = Path.GetInvalidPathChars(); private static readonly char[] invalidFilenameCharacters = Path.GetInvalidFileNameChars(); public static string EnsureValidFilePath(string fullPathWithFile) { fullPathWithFile = string.Concat(fullPathWithFile.Split(invalidDirectoryCharacters)); Directory.CreateDirectory(Path.GetDirectoryName(fullPathWithFile)); return fullPathWithFile; } public static string EnsureValidFilename(string filename) { return string.Concat(filename.Split(invalidFilenameCharacters)); } } public static class MiscUtility { public static bool ContainsIgnoreCase(this string _this, string s) { return CultureInfo.CurrentCulture.CompareInfo.IndexOf(_this, s, CompareOptions.IgnoreCase) >= 0; } public static bool HasFlag(this Enum flags, Enum value) { try { ulong num = Convert.ToUInt64(value); return (Convert.ToUInt64(flags) & num) == num; } catch { long num2 = Convert.ToInt64(value); return (Convert.ToInt64(flags) & num2) == num2; } } public static bool EndsWith(this StringBuilder sb, string _string) { int length = _string.Length; if (sb.Length < length) { return false; } int num = 0; int num2 = sb.Length - length; while (num2 < sb.Length) { if (sb[num2] != _string[num]) { return false; } num2++; num++; } return true; } } public static class ParseUtility { internal delegate object ParseMethod(string input); internal delegate string ToStringMethod(object obj); public static readonly string NumberFormatString = "0.####"; private static readonly Dictionary<int, string> numSequenceStrings = new Dictionary<int, string>(); private static readonly HashSet<Type> nonPrimitiveTypes = new HashSet<Type> { typeof(string), typeof(decimal), typeof(DateTime) }; private static readonly HashSet<Type> formattedTypes = new HashSet<Type> { typeof(float), typeof(double), typeof(decimal) }; private static readonly Dictionary<string, string> typeInputExamples = new Dictionary<string, string>(); private static readonly Dictionary<string, ParseMethod> customTypes = new Dictionary<string, ParseMethod> { { typeof(Vector2).FullName, TryParseVector2 }, { typeof(Vector3).FullName, TryParseVector3 }, { typeof(Vector4).FullName, TryParseVector4 }, { typeof(Quaternion).FullName, TryParseQuaternion }, { typeof(Rect).FullName, TryParseRect }, { typeof(Color).FullName, TryParseColor }, { typeof(Color32).FullName, TryParseColor32 }, { typeof(LayerMask).FullName, TryParseLayerMask } }; private static readonly Dictionary<string, ToStringMethod> customTypesToString = new Dictionary<string, ToStringMethod> { { typeof(Vector2).FullName, Vector2ToString }, { typeof(Vector3).FullName, Vector3ToString }, { typeof(Vector4).FullName, Vector4ToString }, { typeof(Quaternion).FullName, QuaternionToString }, { typeof(Rect).FullName, RectToString }, { typeof(Color).FullName, ColorToString }, { typeof(Color32).FullName, Color32ToString }, { typeof(LayerMask).FullName, LayerMaskToString } }; public static string FormatDecimalSequence(params object[] numbers) { if (numbers.Length == 0) { return null; } return string.Format(CultureInfo.CurrentCulture, GetSequenceFormatString(numbers.Length), numbers); } internal static string GetSequenceFormatString(int count) { if (count <= 0) { return null; } if (numSequenceStrings.ContainsKey(count)) { return numSequenceStrings[count]; } string[] array = new string[count]; for (int i = 0; i < count; i++) { array[i] = $"{{{i}:{NumberFormatString}}}"; } string text = string.Join(" ", array); numSequenceStrings.Add(count, text); return text; } public static bool CanParse(Type type) { return !string.IsNullOrEmpty(type?.FullName) && (type.IsPrimitive || type.IsEnum || nonPrimitiveTypes.Contains(type) || customTypes.ContainsKey(type.FullName)); } public static bool CanParse<T>() { return CanParse(typeof(T)); } public static bool TryParse<T>(string input, out T obj, out Exception parseException) { object obj2; bool result = TryParse(input, typeof(T), out obj2, out parseException); if (obj2 != null) { obj = (T)obj2; } else { obj = default(T); } return result; } public static bool TryParse(string input, Type type, out object obj, out Exception parseException) { obj = null; parseException = null; if ((object)type == null) { return false; } if ((object)type == typeof(string)) { obj = input; return true; } if (type.IsEnum) { try { obj = Enum.Parse(type, input); return true; } catch (Exception e) { parseException = e.GetInnerMostException(); return false; } } try { if (customTypes.ContainsKey(type.FullName)) { obj = customTypes[type.FullName](input); } else { obj = AccessTools.Method(type, "Parse", ArgumentUtility.ParseArgs, (Type[])null).Invoke(null, new object[1] { input }); } return true; } catch (Exception e2) { Exception innerMostException = e2.GetInnerMostException(); parseException = innerMostException; } return false; } public static string ToStringForInput<T>(object obj) { return ToStringForInput(obj, typeof(T)); } public static string ToStringForInput(object obj, Type type) { if ((object)type == null || obj == null) { return null; } if ((object)type == typeof(string)) { return obj as string; } if (type.IsEnum) { return Enum.IsDefined(type, obj) ? Enum.GetName(type, obj) : obj.ToString(); } try { if (customTypes.ContainsKey(type.FullName)) { return customTypesToString[type.FullName](obj); } if (formattedTypes.Contains(type)) { return AccessTools.Method(type, "ToString", new Type[2] { typeof(string), typeof(IFormatProvider) }, (Type[])null).Invoke(obj, new object[2] { NumberFormatString, CultureInfo.CurrentCulture }) as string; } return obj.ToString(); } catch (Exception arg) { Universe.LogWarning($"Exception formatting object for input: {arg}"); return null; } } public static string GetExampleInput<T>() { return GetExampleInput(typeof(T)); } public static string GetExampleInput(Type type) { if (!typeInputExamples.ContainsKey(type.AssemblyQualifiedName)) { try { if (type.IsEnum) { typeInputExamples.Add(type.AssemblyQualifiedName, Enum.GetNames(type).First()); } else { object obj = Activator.CreateInstance(type); typeInputExamples.Add(type.AssemblyQualifiedName, ToStringForInput(obj, type)); } } catch (Exception message) { Universe.LogWarning("Exception generating default instance for example input for '" + type.FullName + "'"); Universe.Log(message); return ""; } } return typeInputExamples[type.AssemblyQualifiedName]; } internal static object TryParseVector2(string input) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); string[] array = input.Split(new char[1] { ' ' }); val.x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); return val; } internal static string Vector2ToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (!(obj is Vector2 val) || 1 == 0) { return null; } return FormatDecimalSequence(val.x, val.y); } internal static object TryParseVector3(string input) { //IL_0003: 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) Vector3 val = default(Vector3); string[] array = input.Split(new char[1] { ' ' }); val.x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val.z = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); return val; } internal static string Vector3ToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (!(obj is Vector3 val) || 1 == 0) { return null; } return FormatDecimalSequence(val.x, val.y, val.z); } internal static object TryParseVector4(string input) { //IL_0003: 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) Vector4 val = default(Vector4); string[] array = input.Split(new char[1] { ' ' }); val.x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val.z = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); val.w = float.Parse(array[3].Trim(), CultureInfo.CurrentCulture); return val; } internal static string Vector4ToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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) if (!(obj is Vector4 val) || 1 == 0) { return null; } return FormatDecimalSequence(val.x, val.y, val.z, val.w); } internal static object TryParseQuaternion(string input) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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) Vector3 val = default(Vector3); string[] array = input.Split(new char[1] { ' ' }); if (array.Length == 4) { Quaternion val2 = default(Quaternion); val2.x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val2.y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val2.z = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); val2.w = float.Parse(array[3].Trim(), CultureInfo.CurrentCulture); return val2; } val.x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val.z = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); return Quaternion.Euler(val); } internal static string QuaternionToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (!(obj is Quaternion val) || 1 == 0) { return null; } Vector3 eulerAngles = ((Quaternion)(ref val)).eulerAngles; return FormatDecimalSequence(eulerAngles.x, eulerAngles.y, eulerAngles.z); } internal static object TryParseRect(string input) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) Rect val = default(Rect); string[] array = input.Split(new char[1] { ' ' }); ((Rect)(ref val)).x = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); ((Rect)(ref val)).y = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); ((Rect)(ref val)).width = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); ((Rect)(ref val)).height = float.Parse(array[3].Trim(), CultureInfo.CurrentCulture); return val; } internal static string RectToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!(obj is Rect val) || 1 == 0) { return null; } return FormatDecimalSequence(((Rect)(ref val)).x, ((Rect)(ref val)).y, ((Rect)(ref val)).width, ((Rect)(ref val)).height); } internal static object TryParseColor(string input) { //IL_0003: 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) Color val = default(Color); string[] array = input.Split(new char[1] { ' ' }); val.r = float.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.g = float.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val.b = float.Parse(array[2].Trim(), CultureInfo.CurrentCulture); if (array.Length > 3) { val.a = float.Parse(array[3].Trim(), CultureInfo.CurrentCulture); } else { val.a = 1f; } return val; } internal static string ColorToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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) if (!(obj is Color val) || 1 == 0) { return null; } return FormatDecimalSequence(val.r, val.g, val.b, val.a); } internal static object TryParseColor32(string input) { //IL_0003: 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) Color32 val = default(Color32); string[] array = input.Split(new char[1] { ' ' }); val.r = byte.Parse(array[0].Trim(), CultureInfo.CurrentCulture); val.g = byte.Parse(array[1].Trim(), CultureInfo.CurrentCulture); val.b = byte.Parse(array[2].Trim(), CultureInfo.CurrentCulture); if (array.Length > 3) { val.a = byte.Parse(array[3].Trim(), CultureInfo.CurrentCulture); } else { val.a = byte.MaxValue; } return val; } internal static string Color32ToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_0048: 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) if (!(obj is Color32 val) || 1 == 0) { return null; } return $"{val.r} {val.g} {val.b} {val.a}"; } internal static object TryParseLayerMask(string input) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) return LayerMask.op_Implicit(int.Parse(input)); } internal static string LayerMaskToString(object obj) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!(obj is LayerMask val) || 1 == 0) { return null; } return ((LayerMask)(ref val)).value.ToString(); } } public static class SignatureHighlighter { public const string NAMESPACE = "#a8a8a8"; public const string CONST = "#92c470"; public const string CLASS_STATIC = "#3a8d71"; public const string CLASS_INSTANCE = "#2df7b2"; public const string STRUCT = "#0fba3a"; public const string INTERFACE = "#9b9b82"; public const string FIELD_STATIC = "#8d8dc6"; public const string FIELD_INSTANCE = "#c266ff"; public const string METHOD_STATIC = "#b55b02"; public const string METHOD_INSTANCE = "#ff8000"; public const string PROP_STATIC = "#588075"; public const string PROP_INSTANCE = "#55a38e"; public const string LOCAL_ARG = "#a6e9e9"; public const string OPEN_COLOR = "<color="; public const string CLOSE_COLOR = "</color>"; public const string OPEN_ITALIC = "<i>"; public const string CLOSE_ITALIC = "</i>"; public static readonly Regex ArrayTokenRegex = new Regex("\\[,*?\\]"); private static readonly Regex colorTagRegex = new Regex("<color=#?[\\d|\\w]*>"); public static readonly Color StringOrange = new Color(0.83f, 0.61f, 0.52f); public static readonly Color EnumGreen = new Color(0.57f, 0.76f, 0.43f); public static readonly Color KeywordBlue = new Color(0.3f, 0.61f, 0.83f); public static readonly string keywordBlueHex = KeywordBlue.ToHex(); public static readonly Color NumberGreen = new Color(0.71f, 0.8f, 0.65f); private static readonly Dictionary<string, string> typeToRichType = new Dictionary<string, string>(); private static readonly Dictionary<string, string> highlightedMethods = new Dictionary<string, string>(); private static readonly Dictionary<Type, string> builtInTypesToShorthand = new Dictionary<Type, string> { { typeof(object), "object" }, { typeof(string), "string" }, { typeof(bool), "bool" }, { typeof(byte), "byte" }, { typeof(sbyte), "sbyte" }, { typeof(char), "char" }, { typeof(decimal), "decimal" }, { typeof(double), "double" }, { typeof(float), "float" }, { typeof(int), "int" }, { typeof(uint), "uint" }, { typeof(long), "long" }, { typeof(ulong), "ulong" }, { typeof(short), "short" }, { typeof(ushort), "ushort" }, { typeof(void), "void" } }; public static string Parse(Type type, bool includeNamespace, MemberInfo memberInfo = null) { if ((object)type == null) { throw new ArgumentNullException("type"); } if (memberInfo is MethodInfo method) { return ParseMethod(method); } if (memberInfo is ConstructorInfo ctor) { return ParseConstructor(ctor); } StringBuilder stringBuilder = new StringBuilder(); if (type.IsByRef) { AppendOpenColor(stringBuilder, "#" + keywordBlueHex).Append("ref ").Append("</color>"); } Type type2 = type; while (type2.HasElementType) { type2 = type2.GetElementType(); } includeNamespace &= !builtInTypesToShorthand.ContainsKey(type2); if (!type.IsGenericParameter && (!type.HasElementType || !type.GetElementType().IsGenericParameter) && includeNamespace && TryGetNamespace(type, out var ns)) { AppendOpenColor(stringBuilder, "#a8a8a8").Append(ns).Append("</color>").Append('.'); } stringBuilder.Append(ProcessType(type)); if ((object)memberInfo != null) { stringBuilder.Append('.'); int index = stringBuilder.Length - 1; AppendOpenColor(stringBuilder, GetMemberInfoColor(memberInfo, out var isStatic)).Append(memberInfo.Name).Append("</color>"); if (isStatic) { stringBuilder.Insert(index, "<i>"); stringBuilder.Append("</i>"); } } return stringBuilder.ToString(); } private static string ProcessType(Type type) { string key = type.ToString(); if (typeToRichType.ContainsKey(key)) { return typeToRichType[key]; } StringBuilder stringBuilder = new StringBuilder(); if (!type.IsGenericParameter) { int length = stringBuilder.Length; Type declaringType = type.DeclaringType; while ((object)declaringType != null) { stringBuilder.Insert(length, HighlightType(declaringType) + "."); declaringType = declaringType.DeclaringType; } stringBuilder.Append(HighlightType(type)); if (type.IsGenericType) { ProcessGenericArguments(type, stringBuilder); } } else { stringBuilder.Append("<color=").Append("#92c470").Append('>') .Append(type.Name) .Append("</color>"); } string text = stringBuilder.ToString(); typeToRichType.Add(key, text); return text; } internal static string GetClassColor(Type type) { if (type.IsAbstract && type.IsSealed) { return "#3a8d71"; } if (type.IsEnum || type.IsGenericParameter) { return "#92c470"; } if (type.IsValueType) { return "#0fba3a"; } if (type.IsInterface) { return "#9b9b82"; } return "#2df7b2"; } private static bool TryGetNamespace(Type type, out string ns) { return !string.IsNullOrEmpty(ns = type.Namespace?.Trim()); } private static StringBuilder AppendOpenColor(StringBuilder sb, string color) { return sb.Append("<color=").Append(color).Append('>'); } private static string HighlightType(Type type) { StringBuilder stringBuilder = new StringBuilder(); if (type.IsByRef) { type = type.GetElementType(); } int num = 0; Match match = ArrayTokenRegex.Match(type.Name); if (match != null && match.Success) { num = 1 + match.Value.Count((char c) => c == ','); type = type.GetElementType(); } if (builtInTypesToShorthand.TryGetValue(type, out var value)) { AppendOpenColor(stringBuilder, "#" + keywordBlueHex).Append(value).Append("</color>"); } else { stringBuilder.Append("<color=" + GetClassColor(type) + ">").Append(type.Name).Append("</color>"); } if (num > 0) { stringBuilder.Append('[').Append(new string(',', num - 1)).Append(']'); } return stringBuilder.ToString(); } private static void ProcessGenericArguments(Type type, StringBuilder sb) { List<Type> list = type.GetGenericArguments().ToList(); for (int i = 0; i < sb.Length; i++) { if (!list.Any()) { break; } if (sb[i] != '`') { continue; } int num = i; i++; StringBuilder stringBuilder = new StringBuilder(); for (; char.IsDigit(sb[i]); i++) { stringBuilder.Append(sb[i]); } string text = stringBuilder.ToString(); int num2 = int.Parse(text); sb.Remove(num, text.Length + 1); int num3 = 1; num++; while (num3 < "</color>".Length && sb[num] == "</color>"[num3]) { num3++; num++; } sb.Insert(num, '<'); num++; int length = sb.Length; while (num2 > 0 && list.Any()) { num2--; Type type2 = list.First(); list.RemoveAt(0); sb.Insert(num, ProcessType(type2)); if (num2 > 0) { num += sb.Length - length; sb.Insert(num, ", "); num += 2; length = sb.Length; } } sb.Insert(num + sb.Length - length, '>'); } } public static string RemoveHighlighting(string _string) { if (_string == null) { throw new ArgumentNullException("_string"); } _string = _string.Replace("<i>", string.Empty); _string = _string.Replace("</i>", string.Empty); _string = colorTagRegex.Replace(_string, string.Empty); _string = _string.Replace("</color>", string.Empty); return _string; } [Obsolete("Use 'ParseMethod(MethodInfo)' instead (rename).")] public static string HighlightMethod(MethodInfo method) { return ParseMethod(method); } public static string ParseMethod(MethodInfo method) { string key = GeneralExtensions.FullDescription((MethodBase)method); if (highlightedMethods.ContainsKey(key)) { return highlightedMethods[key]; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(Parse(method.DeclaringType, includeNamespace: false)); stringBuilder.Append('.'); string text = ((!method.IsStatic) ? "#ff8000" : "#b55b02"); stringBuilder.Append("<color=" + text + ">" + method.Name + "</color>"); if (method.IsGenericMethod) { stringBuilder.Append("<"); Type[] genericArguments = method.GetGenericArguments(); for (int i = 0; i < genericArguments.Length; i++) { Type type = genericArguments[i]; if (type.IsGenericParameter) { stringBuilder.Append("<color=#92c470>" + genericArguments[i].Name + "</color>"); } else { stringBuilder.Append(Parse(type, includeNamespace: false)); } if (i < genericArguments.Length - 1) { stringBuilder.Append(", "); } } stringBuilder.Append(">"); } stringBuilder.Append('('); ParameterInfo[] parameters = method.GetParameters(); for (int j = 0; j < parameters.Length; j++) { ParameterInfo parameterInfo = parameters[j]; stringBuilder.Append(Parse(parameterInfo.ParameterType, includeNamespace: false)); if (j < parameters.Length - 1) { stringBuilder.Append(", "); } } stringBuilder.Append(')'); string text2 = stringBuilder.ToString(); highlightedMethods.Add(key, text2); return text2; } [Obsolete("Use 'ParseConstructor(ConstructorInfo)' instead (rename).")] public static string HighlightConstructor(ConstructorInfo ctor) { return ParseConstructor(ctor); } public static string ParseConstructor(ConstructorInfo ctor) { string key = GeneralExtensions.FullDescription((MethodBase)ctor); if (highlightedMethods.ContainsKey(key)) { return highlightedMethods[key]; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(Parse(ctor.DeclaringType, includeNamespace: false)); string value = stringBuilder.ToString(); stringBuilder.Append('.'); stringBuilder.Append(value); stringBuilder.Append('('); ParameterInfo[] parameters = ctor.GetParameters(); for (int i = 0; i < parameters.Length; i++) { ParameterInfo parameterInfo = parameters[i]; stringBuilder.Append(Parse(parameterInfo.ParameterType, includeNamespace: false)); if (i < parameters.Length - 1) { stringBuilder.Append(", "); } } stringBuilder.Append(')'); string text = stringBuilder.ToString(); highlightedMethods.Add(key, text); return text; } public static string GetMemberInfoColor(MemberInfo memberInfo, out bool isStatic) { isStatic = false; if (memberInfo is FieldInfo fieldInfo) { if (fieldInfo.IsStatic) { isStatic = true; return "#8d8dc6"; } return "#c266ff"; } if (memberInfo is MethodInfo methodInfo) { if (methodInfo.IsStatic) { isStatic = true; return "#b55b02"; } return "#ff8000"; } if (memberInfo is PropertyInfo propertyInfo) { if (propertyInfo.GetAccessors(nonPublic: true)[0].IsStatic) { isStatic = true; return "#588075"; } return "#55a38e"; } if (memberInfo is ConstructorInfo) { isStatic = true; return "#2df7b2"; } throw new NotImplementedException(memberInfo.GetType().Name + " is not supported"); } } public static class ToStringUtility { internal static Dictionary<string, MethodInfo> toStringMethods = new Dictionary<string, MethodInfo>(); private const string nullString = "<color=grey>null</color>"; private const string nullUnknown = "<color=grey>null</color> (?)"; private const string destroyedString = "<color=red>Destroyed</color>"; private const string untitledString = "<i><color=grey>untitled</color></i>"; private const string eventSystemNamespace = "UnityEngine.EventSystem"; public static string PruneString(string s, int chars = 200, int lines = 5) { if (string.IsNullOrEmpty(s)) { return s; } StringBuilder stringBuilder = new StringBuilder(Math.Max(chars, s.Length)); int num = 0; for (int i = 0; i < s.Length; i++) { if (num >= lines || i >= chars) { stringBuilder.Append("..."); break; } char c = s[i]; if (c == '\r' || c == '\n') { num++; } stringBuilder.Append(c); } return stringBuilder.ToString(); } public static string ToStringWithType(object value, Type fallbackType, bool includeNamespace = true) { if (value.IsNullOrDestroyed() && (object)fallbackType == null) { return "<color=grey>null</color> (?)"; } Type type = value?.GetActualType() ?? fallbackType; string text = SignatureHighlighter.Parse(type, includeNamespace); StringBuilder stringBuilder = new StringBuilder(); if (value.IsNullOrDestroyed()) { if (value == null) { stringBuilder.Append("<color=grey>null</color>"); AppendRichType(stringBuilder, text); return stringBuilder.ToString(); } stringBuilder.Append("<color=red>Destroyed</color>"); AppendRichType(stringBuilder, text); return stringBuilder.ToString(); } Object val = (Object)((value is Object) ? value : null); if (val != null) { if (string.IsNullOrEmpty(val.name)) { stringBuilder.Append("<i><color=grey>untitled</color></i>"); } else { stringBuilder.Append('"'); stringBuilder.Append(PruneString(val.name, 50, 1)); stringBuilder.Append('"'); } AppendRichType(stringBuilder, text); } else if (type.FullName.StartsWith("UnityEngine.EventSystem")) { stringBuilder.Append(text); } else { string text2 = ToString(value); if (type.IsGenericType || text2 == type.FullName || text2 == type.FullName + " " + type.FullName || text2 == "Il2Cpp" + type.FullName || type.FullName == "Il2Cpp" + text2) { stringBuilder.Append(text); } else { stringBuilder.Append(PruneString(text2)); AppendRichType(stringBuilder, text); } } return stringBuilder.ToString(); } private static void AppendRichType(StringBuilder sb, string richType) { sb.Append(' '); sb.Append('('); sb.Append(richType); sb.Append(')'); } private static string ToString(object value) { if (value.IsNullOrDestroyed()) { if (value == null) { return "<color=grey>null</color>"; } return "<color=red>Destroyed</color>"; } Type actualType = value.GetActualType(); if (!toStringMethods.ContainsKey(actualType.AssemblyQualifiedName)) { MethodInfo method = actualType.GetMethod("ToString", ArgumentUtility.EmptyTypes); toStringMethods.Add(actualType.AssemblyQualifiedName, method); } value = value.TryCast(actualType); string theString; try { theString = (string)toStringMethods[actualType.AssemblyQualifiedName].Invoke(value, ArgumentUtility.EmptyArgs); } catch (Exception e) { theString = e.ReflectionExToString(); } return ReflectionUtility.ProcessTypeInString(actualType, theString); } } public static class UnityHelpers { private static PropertyInfo onEndEdit; public static bool OccuredEarlierThanDefault(this float time) { return Time.realtimeSinceStartup - 0.01f >= time; } public static bool OccuredEarlierThan(this float time, float secondsAgo) { return Time.realtimeSinceStartup - secondsAgo >= time; } public static bool IsNullOrDestroyed(this object obj, bool suppressWarning = true) { try { if (obj == null) { if (!suppressWarning) { Universe.LogWarning("The target instance is null!"); } return true; } Object val = (Object)((obj is Object) ? obj : null); if (val != null && !Object.op_Implicit(val)) { if (!suppressWarning) { Universe.LogWarning("The target UnityEngine.Object was destroyed!"); } return true; } return false; } catch { return true; } } public static string GetTransformPath(this Transform transform, bool includeSelf = false) { StringBuilder stringBuilder = new StringBuilder(); if (includeSelf) { stringBuilder.Append(((Object)transform).name); } while (Object.op_Implicit((Object)(object)transform.parent)) { transform = transform.parent; stringBuilder.Insert(0, '/'); stringBuilder.Insert(0, ((Object)transform).name); } return stringBuilder.ToString(); } public static string ToHex(this Color color) { //IL_0001: 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_003d: Unknown result type (might be due to invalid IL or missing references) byte b = (byte)Mathf.Clamp(Mathf.RoundToInt(color.r * 255f), 0, 255); byte b2 = (byte)Mathf.Clamp(Mathf.RoundToInt(color.g * 255f), 0, 255); byte b3 = (byte)Mathf.Clamp(Mathf.RoundToInt(color.b * 255f), 0, 255); return $"{b:X2}{b2:X2}{b3:X2}"; } public static Color ToColor(this string _string) { //IL_006c: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) _string = _string.Replace("#", ""); if (_string.Length != 6) { return Color.magenta; } byte b = byte.Parse(_string.Substring(0, 2), NumberStyles.HexNumber); byte b2 = byte.Parse(_string.Substring(2, 2), NumberStyles.HexNumber); byte b3 = byte.Parse(_string.Substring(4, 2), NumberStyles.HexNumber); Color result = default(Color); result.r = (float)((decimal)b / 255m); result.g = (float)((decimal)b2 / 255m); result.b = (float)((decimal)b3 / 255m); result.a = 1f; return result; } public static UnityEvent<string> GetOnEndEdit(this InputField _this) { if ((object)onEndEdit == null) { onEndEdit = AccessTools.Property(typeof(InputField), "onEndEdit") ?? throw new Exception("Could not get InputField.onEndEdit property!"); } return onEndEdit.GetValue(_this, null).TryCast<UnityEvent<string>>(); } } } namespace UniverseLib.UI { public class UIBase { internal static readonly int TOP_SORTORDER = 30000; public string ID { get; } public GameObject RootObject { get; } public RectTransform RootRect { get; } public Canvas Canvas { get; } public Action UpdateMethod { get; } public PanelManager Panels { get; } public bool Enabled { get { return Object.op_Implicit((Object)(object)RootObject) && RootObject.activeSelf; } set { UniversalUI.SetUIActive(ID, value); } } public UIBase(string id, Action updateMethod) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) if (string.IsNullOrEmpty(id)) { throw new ArgumentException("Cannot register a UI with a null or empty id!"); } if (UniversalUI.registeredUIs.ContainsKey(id)) { throw new ArgumentException("A UI with the id '" + id + "' is already registered!"); } ID = id; UpdateMethod = updateMethod; RootObject = UIFactory.CreateUIObject(id + "_Root", UniversalUI.CanvasRoot); RootObject.SetActive(false); RootRect = RootObject.GetComponent<RectTransform>(); Canvas = RootObject.AddComponent<Canvas>(); Canvas.renderMode = (RenderMode)1; Canvas.referencePixelsPerUnit = 100f; Canvas.sortingOrder = TOP_SORTORDER; Canvas.overrideSorting = true; CanvasScaler val = RootObject.AddComponent<CanvasScaler>(); val.referenceResolution = new Vector2(1920f, 1080f); val.screenMatchMode = (ScreenMatchMode)1; RootObject.AddComponent<GraphicRaycaster>(); RectTransform component = RootObject.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.pivot = new Vector2(0.5f, 0.5f); Panels = CreatePanelManager(); RootObject.SetActive(true); UniversalUI.registeredUIs.Add(id, this); UniversalUI.uiBases.Add(this); } protected virtual PanelManager CreatePanelManager() { return new PanelManager(this); } public void SetOnTop() { RootObject.transform.SetAsLastSibling(); foreach (UIBase uiBasis in UniversalUI.uiBases) { int num = UniversalUI.CanvasRoot.transform.childCount - ((Transform)uiBasis.RootRect).GetSiblingIndex(); uiBasis.Canvas.sortingOrder = TOP_SORTORDER - num; } UniversalUI.uiBases.Sort((UIBase a, UIBase b) => b.RootObject.transform.GetSiblingIndex().CompareTo(a.RootObject.transform.GetSiblingIndex())); } internal void Update() { try { Panels.Update(); UpdateMethod?.Invoke(); } catch (Exception arg) { Universe.LogWarning($"Exception invoking update method for {ID}: {arg}"); } } } public static class UIFactory { internal static Vector2 largeElementSize = new Vector2(100f, 30f); internal static Vector2 smallElementSize = new Vector2(25f, 25f); internal static Color defaultTextColor = Color.white; public static GameObject CreateUIObject(string name, GameObject parent, Vector2 sizeDelta = default(Vector2)) { //IL_0002: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name) { layer = 5, hideFlags = (HideFlags)61 }; if (Object.op_Implicit((Object)(object)parent)) { val.transform.SetParent(parent.transform, false); } RectTransform val2 = val.AddComponent<RectTransform>(); val2.sizeDelta = sizeDelta; return val; } internal static void SetDefaultTextValues(Text text) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) ((Graphic)text).color = defaultTextColor; text.font = UniversalUI.DefaultFont; text.fontSize = 14; } internal static void SetDefaultSelectableValues(Selectable selectable) { //IL_0002: 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_0012: 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_0047: 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) Navigation navigation = selectable.navigation; ((Navigation)(ref navigation)).mode = (Mode)4; selectable.navigation = navigation; RuntimeHelper.Instance.Internal_SetColorBlock(selectable, (Color?)new Color(0.2f, 0.2f, 0.2f), (Color?)new Color(0.3f, 0.3f, 0.3f), (Color?)new Color(0.15f, 0.15f, 0.15f), (Color?)null); } public static LayoutElement SetLayoutElement(GameObject gameObject, int? minWidth = null, int? minHeight = null, int? flexibleWidth = null, int? flexibleHeight = null, int? preferredWidth = null, int? preferredHeight = null, bool? ignoreLayout = null) { LayoutElement val = gameObject.GetComponent<LayoutElement>(); if (!Object.op_Implicit((Object)(object)val)) { val = gameObject.AddComponent<LayoutElement>(); } if (minWidth.HasValue) { val.minWidth = minWidth.Value; } if (minHeight.HasValue) { val.minHeight = minHeight.Value; } if (flexibleWidth.HasValue) { val.flexibleWidth = flexibleWidth.Value; } if (flexibleHeight.HasValue) { val.flexibleHeight = flexibleHeight.Value; } if (preferredWidth.HasValue) { val.preferredWidth = preferredWidth.Value; } if (preferredHeight.HasValue) { val.preferredHeight = preferredHeight.Value; } if (ignoreLayout.HasValue) { val.ignoreLayout = ignoreLayout.Value; } return val; } public static T SetLayoutGroup<T>(GameObject gameObject, bool? forceWidth = null, bool? forceHeight = null, bool? childControlWidth = null, bool? childControlHeight = null, int? spacing = null, int? padTop = null, int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) where T : HorizontalOrVerticalLayoutGroup { T val = gameObject.GetComponent<T>(); if (!Object.op_Implicit((Object)(object)val)) { val = gameObject.AddComponent<T>(); } return SetLayoutGroup(val, forceWidth, forceHeight, childControlWidth, childControlHeight, spacing, padTop, padBottom, padLeft, padRight, childAlignment); } public static T SetLayoutGroup<T>(T group, bool? forceWidth = null, bool? forceHeight = null, bool? childControlWidth = null, bool? childControlHeight = null, int? spacing = null, int? padTop = null, int? padBottom = null, int? padLeft = null, int? padRight = null, TextAnchor? childAlignment = null) where T : HorizontalOrVerticalLayoutGroup { //IL_0143: Unknown result type (might be due to invalid IL or missing references) if (forceWidth.HasValue) { ((HorizontalOrVerticalLayoutGroup)group).childForceExpandWidth = forceWidth.Value; } if (forceHeight.HasValue) { ((HorizontalOrVerticalLayoutGroup)group).childForceExpandHeight = forceHeight.Value; } if (childControlWidth.HasValue) { ((HorizontalOrVerticalLayoutGroup)(object)group).SetChildControlWidth(childControlWidth.Value); } if (childControlHeight.HasValue) { ((HorizontalOrVerticalLayoutGroup)(object)group).SetChildControlHeight(childControlHeight.Value); } if (spacing.HasValue) { ((HorizontalOrVerticalLayoutGroup)group).spacing = spacing.Value; } if (padTop.HasValue) { ((LayoutGroup)(object)group).padding.top = padTop.Value; } if (padBottom.HasValue) { ((LayoutGroup)(object)group).padding.bottom = padBottom.Value; } if (padLeft.HasValue) { ((LayoutGroup)(object)group).padding.left = padLeft.Value; } if (padRight.HasValue) { ((LayoutGroup)(object)group).padding.right = padRight.Value; } if (childAlignment.HasValue) { ((LayoutGroup)(object)group).childAlignment = childAlignment.Value; } return group; } public static GameObject CreatePanel(string name, GameObject parent, out GameObject contentHolder, Color? bgColor = null) { //IL_0005: 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_0061: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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) //IL_00b1: 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_00f0: 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) GameObject val = CreateUIObject(name, parent); UIFactory.SetLayoutGroup<VerticalLayoutGroup>(val, (bool?)true, (bool?)true, (bool?)true, (bool?)true, (int?)0, (int?)1, (int?)1, (int?)1, (int?)1, (TextAnchor?)null); RectTransform component = val.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.anchoredPosition = Vector2.zero; component.sizeDelta = Vector2.zero; ((Graphic)val.AddComponent<Image>()).color = Color.black; val.AddComponent<RectMask2D>(); contentHolder = CreateUIObject("Content", val); Image val2 = contentHolder.AddComponent<Image>(); val2.type = (Type)3; ((Graphic)val2).color = (Color)((!bgColor.HasValue) ? new Color(0.07f, 0.07f, 0.07f) : bgColor.Value); UIFactory.SetLayoutGroup<VerticalLayoutGroup>(contentHolder, (bool?)true, (bool?)true, (bool?)true, (bool?)true, (int?)3, (int?)3, (int?)3, (int?)3, (int?)3, (TextAnchor?)null); return val; } public static GameObject CreateVerticalGroup(GameObject parent, string name, bool forceWidth, bool forceHeight, bool childControlWidth, bool childControlHeight, int spacing = 0, Vector4 padding = default(Vector4), Color bgColor = default(Color), TextAnchor? childAlignment = null) { //IL_0005: 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_0034: 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) //IL_004e: 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_0078: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent); UIFactory.SetLayoutGroup<VerticalLayoutGroup>(val, (bool?)forceWidth, (bool?)forceHeight, (bool?)childControlWidth, (bool?)childControlHeight, (int?)spacing, (int?)(int)padding.x, (int?)(int)padding.y, (int?)(int)padding.z, (int?)(int)padding.w, childAlignment); Image val2 = val.AddComponent<Image>(); ((Graphic)val2).color = (Color)((bgColor == default(Color)) ? new Color(0.17f, 0.17f, 0.17f) : bgColor); return val; } public static GameObject CreateHorizontalGroup(GameObject parent, string name, bool forceExpandWidth, bool forceExpandHeight, bool childControlWidth, bool childControlHeight, int spacing = 0, Vector4 padding = default(Vector4), Color bgColor = default(Color), TextAnchor? childAlignment = null) { //IL_0005: 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_0034: 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) //IL_004e: 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_0078: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent); UIFactory.SetLayoutGroup<HorizontalLayoutGroup>(val, (bool?)forceExpandWidth, (bool?)forceExpandHeight, (bool?)childControlWidth, (bool?)childControlHeight, (int?)spacing, (int?)(int)padding.x, (int?)(int)padding.y, (int?)(int)padding.z, (int?)(int)padding.w, childAlignment); Image val2 = val.AddComponent<Image>(); ((Graphic)val2).color = (Color)((bgColor == default(Color)) ? new Color(0.17f, 0.17f, 0.17f) : bgColor); return val; } public static GameObject CreateGridGroup(GameObject parent, string name, Vector2 cellSize, Vector2 spacing, Color bgColor = default(Color)) { //IL_0005: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_004c: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent); GridLayoutGroup val2 = val.AddComponent<GridLayoutGroup>(); ((LayoutGroup)val2).childAlignment = (TextAnchor)0; val2.cellSize = cellSize; val2.spacing = spacing; Image val3 = val.AddComponent<Image>(); ((Graphic)val3).color = (Color)((bgColor == default(Color)) ? new Color(0.17f, 0.17f, 0.17f) : bgColor); return val; } public static Text CreateLabel(GameObject parent, string name, string defaultText, TextAnchor alignment = 3, Color color = default(Color), bool supportRichText = true, int fontSize = 14) { //IL_0005: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_003f: 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_0054: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent); Text val2 = val.AddComponent<Text>(); SetDefaultTextValues(val2); val2.text = defaultText; ((Graphic)val2).color = ((color == default(Color)) ? defaultTextColor : color); val2.supportRichText = supportRichText; val2.alignment = alignment; val2.fontSize = fontSize; return val2; } public static ButtonRef CreateButton(GameObject parent, string name, string text, Color? normalColor = null) { //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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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) Color valueOrDefault = normalColor.GetValueOrDefault(); if (!normalColor.HasValue) { ((Color)(ref valueOrDefault))..ctor(0.25f, 0.25f, 0.25f); normalColor = valueOrDefault; } ButtonRef buttonRef = CreateButton(parent, name, text, default(ColorBlock)); RuntimeHelper instance = RuntimeHelper.Instance; Button component = buttonRef.Component; Color? normal = normalColor; Color? val = normalColor; float num = 1.2f; Color? highlighted = (val.HasValue ? new Color?(val.GetValueOrDefault() * num) : null); val = normalColor; num = 0.7f; instance.Internal_SetColorBlock((Selectable)(object)component, normal, highlighted, val.HasValue ? new Color?(val.GetValueOrDefault() * num) : null); return buttonRef; } public static ButtonRef CreateButton(GameObject parent, string name, string text, ColorBlock colors) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00c1: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent, smallElementSize); GameObject val2 = CreateUIObject("Text", val); Image val3 = val.AddComponent<Image>(); val3.type = (Type)1; ((Graphic)val3).color = new Color(1f, 1f, 1f, 1f); Button val4 = val.AddComponent<Button>(); SetDefaultSelectableValues((Selectable)(object)val4); ((ColorBlock)(ref colors)).colorMultiplier = 1f; RuntimeHelper.Instance.Internal_SetColorBlock((Selectable)(object)val4, colors); Text val5 = val2.AddComponent<Text>(); val5.text = text; SetDefaultTextValues(val5); val5.alignment = (TextAnchor)4; RectTransform component = val2.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.sizeDelta = Vector2.zero; SetButtonDeselectListener(val4); return new ButtonRef(val4); } internal static void SetButtonDeselectListener(Button button) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown ((UnityEvent)button.onClick).AddListener((UnityAction)delegate { ((Selectable)button).OnDeselect((BaseEventData)null); }); } public static GameObject CreateSlider(GameObject parent, string name, out Slider slider) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0112: 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_0140: 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_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent, smallElementSize); GameObject val2 = CreateUIObject("Background", val); GameObject val3 = CreateUIObject("Fill Area", val); GameObject val4 = CreateUIObject("Fill", val3); GameObject val5 = CreateUIObject("Handle Slide Area", val); GameObject val6 = CreateUIObject("Handle", val5); Image val7 = val2.AddComponent<Image>(); val7.type = (Type)1; ((Graphic)val7).color = new Color(0.15f, 0.15f, 0.15f, 1f); RectTransform component = val2.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0f, 0.25f); component.anchorMax = new Vector2(1f, 0.75f); component.sizeDelta = new Vector2(0f, 0f); RectTransform component2 = val3.GetComponent<RectTransform>(); component2.anchorMin = new Vector2(0f, 0.25f); component2.anchorMax = new Vector2(1f, 0.75f); component2.anchoredPosition = new Vector2(-5f, 0f); component2.sizeDelta = new Vector2(-20f, 0f); Image val8 = val4.AddComponent<Image>(); val8.type = (Type)1; ((Graphic)val8).color = new Color(0.3f, 0.3f, 0.3f, 1f); val4.GetComponent<RectTransform>().sizeDelta = new Vector2(10f, 0f); RectTransform component3 = val5.GetComponent<RectTransform>(); component3.sizeDelta = new Vector2(-20f, 0f); component3.anchorMin = new Vector2(0f, 0f); component3.anchorMax = new Vector2(1f, 1f); Image val9 = val6.AddComponent<Image>(); ((Graphic)val9).color = new Color(0.5f, 0.5f, 0.5f, 1f); val6.GetComponent<RectTransform>().sizeDelta = new Vector2(20f, 0f); slider = val.AddComponent<Slider>(); slider.fillRect = val4.GetComponent<RectTransform>(); slider.handleRect = val6.GetComponent<RectTransform>(); ((Selectable)slider).targetGraphic = (Graphic)(object)val9; slider.direction = (Direction)0; RuntimeHelper.Instance.Internal_SetColorBlock((Selectable)(object)slider, (Color?)new Color(0.4f, 0.4f, 0.4f), (Color?)new Color(0.55f, 0.55f, 0.55f), (Color?)new Color(0.3f, 0.3f, 0.3f), (Color?)null); return val; } public static GameObject CreateScrollbar(GameObject parent, string name, out Scrollbar scrollbar) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_00a5: 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_00bf: 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) GameObject val = CreateUIObject(name, parent, smallElementSize); GameObject val2 = CreateUIObject("Sliding Area", val); GameObject val3 = CreateUIObject("Handle", val2); Image val4 = val.AddComponent<Image>(); val4.type = (Type)1; ((Graphic)val4).color = new Color(0.1f, 0.1f, 0.1f); Image val5 = val3.AddComponent<Image>(); val5.type = (Type)1; ((Graphic)val5).color = new Color(0.4f, 0.4f, 0.4f); RectTransform component = val2.GetComponent<RectTransform>(); component.sizeDelta = new Vector2(-20f, -20f); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; RectTransform component2 = val3.GetComponent<RectTransform>(); component2.sizeDelta = new Vector2(20f, 20f); scrollbar = val.AddComponent<Scrollbar>(); scrollbar.handleRect = component2; ((Selectable)scrollbar).targetGraphic = (Graphic)(object)val5; SetDefaultSelectableValues((Selectable)(object)scrollbar); return val; } public static GameObject CreateToggle(GameObject parent, string name, out Toggle toggle, out Text text, Color bgColor = default(Color), int checkWidth = 20, int checkHeight = 20) { //IL_0009: 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_009f: 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_00b3: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent, smallElementSize); UIFactory.SetLayoutGroup<HorizontalLayoutGroup>(val, (bool?)false, (bool?)false, (bool?)true, (bool?)true, (int?)5, (int?)0, (int?)0, (int?)0, (int?)0, (TextAnchor?)(TextAnchor)3); toggle = val.AddComponent<Toggle>(); toggle.isOn = true; SetDefaultSelectableValues((Selectable)(object)toggle); Toggle t2 = toggle; ((UnityEvent<bool>)(object)toggle.onValueChanged).AddListener((UnityAction<bool>)delegate { ((Selectable)t2).OnDeselect((BaseEventData)null); }); GameObject val2 = CreateUIObject("Background", val); Image val3 = val2.AddComponent<Image>(); ((Graphic)val3).color = (Color)((bgColor == default(Color)) ? new Color(0.04f, 0.04f, 0.04f, 0.75f) : bgColor); UIFactory.SetLayoutGroup<HorizontalLayoutGroup>(val2, (bool?)true, (bool?)true, (bool?)true, (bool?)true, (int?)0, (int?)2, (int?)2, (int?)2, (int?)2, (TextAnchor?)null); SetLayoutElement(val2, checkWidth, flexibleWidth: 0, minHeight: checkHeight, flexibleHeight: 0); GameObject val4 = CreateUIObject("Checkmark", val2); Image val5 = val4.AddComponent<Image>(); ((Graphic)val5).color = new Color(0.8f, 1f, 0.8f, 0.3f); GameObject val6 = CreateUIObject("Label", val); text = val6.AddComponent<Text>(); text.text = ""; text.alignment = (TextAnchor)3; SetDefaultTextValues(text); SetLayoutElement(val6, 0, flexibleWidth: 0, minHeight: checkHeight, flexibleHeight: 0); toggle.graphic = (Graphic)(object)val5; ((Selectable)toggle).targetGraphic = (Graphic)(object)val3; return val; } public static InputFieldRef CreateInputField(GameObject parent, string name, string placeHolderText) { //IL_0005: 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_0037: 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_004f: 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_009b: 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_00d7: 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_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_0257: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUIObject(name, parent); Image val2 = val.AddComponent<Image>(); val2.type = (Type)1; ((Graphic)val2).color = new Color(0f, 0f, 0f, 0.5f); InputField val3 = val.AddComponent<InputField>(); Navigation navigation = ((Selectable)val3).navigation; ((Navigation)(ref navigation)).mode = (Mode)0; ((Selectable)val3).navigation = navigation; val3.lineType = (LineType)0; ((Selectable)val3).interactable = true; ((Selectable)val3).transition = (Transition)1; ((Selectable)val3).targetGraphic = (Graphic)(object)val2; RuntimeHelper.Instance.Internal_SetColorBlock((Selectable)(object)val3, (Color?)new Color(1f, 1f, 1f, 1f), (Color?)new Color(0.95f, 0.95f, 0.95f, 1f), (Color?)new Color(0.78f, 0.78f, 0.78f, 1f), (Color?)null); GameObject val4 = CreateUIObject("TextArea", val); val4.AddComponent<RectMask2D>(); RectTransform component = val4.GetComponent<RectTransform>(); component.anchorMin = Vector2.zero; component.anchorMax = Vector2.one; component.offsetMin = Vector2.zero; component.offsetMax = Vector2.zero; GameObject val5 = CreateUIObject("Placeholder", val4); Text val6 = val5.AddComponent<Text>(); SetDefaultTextValues(val6); val6.text = placeHolderText ?? "..."; ((Graphic)val6).color = new Color(0.5f, 0.5f, 0.5f, 1f); val6.horizontalOverflow = (HorizontalWrapMode)0; val6.alignment = (TextAnchor)3; val6.fontSize = 14; RectTransform component2 = val5.GetComponent<RectTransform>(); component2.anchorMin = Vector2.zero; component2.anchorMax = Vector2.one; component2.offsetMin = Vector2.zero; component2.offsetMax = Vector2.zero; val3.placeholder = (Graphic)(object)val6; GameObject val7 = CreateUIObject("Text", val4); Text val8 = val7.AddComponent<Text>(); SetDefaultTextValues(val8); val8.text = ""; ((Graphic)val8).color = new Color(1f, 1f, 1f, 1f); val8.horizontalOverflow = (HorizontalWrapMode)0; val8.alignment = (TextAnchor)3; val8.fontSize = 14; RectTransform component3 = val7.GetComponent<RectTransform>(); component3.anchorMin = Vector2.zero; component3.anchorMax = Vector2.one; component3.offsetMin = Vector2.zero; component3.offsetMax = Vector2.zero; val3.textComponent = val8; val3.characterLimit = 16000; return new InputFieldRef(val3); } public static GameObject CreateDropdown(GameObject parent, string name, out Dropdown dropdown, string defaultItemText, int itemFontSize, Action<int> onValueChanged, string[] defaultOptions = null) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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_004e: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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_0096: 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_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_00d8: 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_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0130: 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_016e: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0254: 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_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be du