using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; using BepInEx; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Utilities; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("KOpti")] [assembly: AssemblyCompany("Kriperovich")] [assembly: AssemblyProduct("KOpti")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("0ce876e2-dcce-4dc7-bc20-3a80bc7cdb13")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace KOPTI; public class KOPTIFpsCounter : MonoBehaviour { private static readonly Color FpsTextColor = new Color(0.2f, 0.95f, 0.2f, 1f); private const int CanvasSortOrder = 9990; private GameObject _root; private TextMeshProUGUI _fpsText; private float _smoothedDeltaTime = 0.05f; private void Update() { if (!KOPTISettings.ShowFpsCounter) { if ((Object)(object)_root != (Object)null && _root.activeSelf) { _root.SetActive(false); } return; } EnsureUi(); if (!((Object)(object)_fpsText == (Object)null)) { _smoothedDeltaTime += (Time.unscaledDeltaTime - _smoothedDeltaTime) * 0.12f; if (_smoothedDeltaTime <= 0f) { _smoothedDeltaTime = 0.001f; } int num = Mathf.Clamp(Mathf.RoundToInt(1f / _smoothedDeltaTime), 0, 9999); ((TMP_Text)_fpsText).text = $"FPS:{num}"; } } private void EnsureUi() { if ((Object)(object)_root == (Object)null) { BuildUi(); } _root.SetActive(true); } private void BuildUi() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00ee: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) _root = new GameObject("KOPTI_FpsCounter"); Object.DontDestroyOnLoad((Object)(object)_root); Canvas obj = _root.AddComponent(); obj.renderMode = (RenderMode)0; obj.sortingOrder = 9990; CanvasScaler obj2 = _root.AddComponent(); obj2.uiScaleMode = (ScaleMode)1; obj2.referenceResolution = new Vector2(1920f, 1080f); _root.AddComponent(); GameObject val = new GameObject("FpsText", new Type[1] { typeof(RectTransform) }); val.transform.SetParent(_root.transform, false); RectTransform component = val.GetComponent(); component.anchorMin = new Vector2(0f, 1f); component.anchorMax = new Vector2(0f, 1f); component.pivot = new Vector2(0f, 1f); component.anchoredPosition = new Vector2(16f, -16f); component.sizeDelta = new Vector2(220f, 48f); _fpsText = val.AddComponent(); ((TMP_Text)_fpsText).font = ResolveGameFont(); ((TMP_Text)_fpsText).fontSize = 28f; ((TMP_Text)_fpsText).fontStyle = (FontStyles)1; ((TMP_Text)_fpsText).alignment = (TextAlignmentOptions)257; ((Graphic)_fpsText).color = FpsTextColor; ((TMP_Text)_fpsText).outlineWidth = 0.25f; ((TMP_Text)_fpsText).outlineColor = Color32.op_Implicit(Color.black); ((Graphic)_fpsText).raycastTarget = false; ((TMP_Text)_fpsText).text = "FPS:0"; } private static TMP_FontAsset ResolveGameFont() { //IL_0017: 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_005e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)LocalizedText.localizationTable != (Object)null) { TMP_FontAsset font = LocalizedText.localizationTable.GetFont(Settings.Get().Language, true); if ((Object)(object)font != (Object)null) { return font; } } TextMeshProUGUI[] array = Resources.FindObjectsOfTypeAll(); foreach (TextMeshProUGUI val in array) { if ((Object)(object)val != (Object)null && (Object)(object)((TMP_Text)val).font != (Object)null) { Scene scene = ((Component)val).gameObject.scene; if (((Scene)(ref scene)).isLoaded) { return ((TMP_Text)val).font; } } } return TMP_Settings.defaultFontAsset; } } internal static class KOPTISettings { public static bool ShowFpsCounter { get; set; } public static bool DimBackgroundWhenMenuOpen { get; set; } } [HarmonyPatch(typeof(Player), "AbilityButtonIsDown")] internal static class KOPTIPatch_Player_AbilityButtonIsDown { private static bool Prefix(ref bool __result) { if (KOPTIMenuState.IsOpen) { __result = false; return false; } return true; } } [HarmonyPatch(typeof(Player), "AbilityButton_1_IsDown")] [HarmonyPatch(typeof(Player), "AbilityButton_2_IsDown")] [HarmonyPatch(typeof(Player), "AbilityButton_3_IsDown")] [HarmonyPatch(typeof(Player), "AbilityButton_1_IsDown_RAW")] [HarmonyPatch(typeof(Player), "AbilityButton_2_IsDown_RAW")] [HarmonyPatch(typeof(Player), "AbilityButton_3_IsDown_RAW")] internal static class KOPTIPatch_Player_AbilityButtons { private static bool Prefix(ref bool __result) { if (KOPTIMenuState.IsOpen) { __result = false; return false; } return true; } } internal static class KOPTIMenuState { public static bool IsOpen { get; set; } } public class KOPTIBlueWaterReplacer : MonoBehaviour { private enum ReplacementLayer { Fill, Overlay } private readonly struct WaterRegion { public float XMin { get; } public float XMax { get; } public float TopY { get; } public float BottomY { get; } public bool IsValid { get { if (XMax > XMin) { return TopY > BottomY; } return false; } } public Vector3 Center => new Vector3((XMin + XMax) * 0.5f, (TopY + BottomY) * 0.5f, 0f); public Vector2 Size => new Vector2(Mathf.Abs(XMax - XMin), Mathf.Abs(TopY - BottomY)); public WaterRegion(float xMin, float xMax, float topY, float bottomY) { XMin = xMin; XMax = xMax; TopY = topY; BottomY = bottomY; } } private static readonly Color BlueFillBackground = new Color(0.06f, 0.16f, 0.38f, 1f); private static readonly Color BlueFillOverlay = new Color(0.118f, 0.392f, 0.855f, 1f); private static readonly string[] LevelWaterVisualNames = new string[4] { "ReflectiveWater", "WaterGradient", "WaterTextureMask", "Water2D PlayerMask" }; private readonly List _spawnedReplacements = new List(); private Transform _replacementRoot; private Sprite _blueSprite; public bool IsEnabled { get; private set; } private void Awake() { SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; ClearReplacements(); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (IsEnabled) { Apply(); } } public void SetEnabled(bool enabled) { if (IsEnabled != enabled) { IsEnabled = enabled; if (enabled) { Apply(); } else { ClearReplacements(); } } } public void Apply() { ClearReplacements(); EnsureRoot(); if (!Constants.isSpaceLevel) { if (!TryGetWaterRegions(out var fillRegion, out var overlayRegion)) { fillRegion = CreateFallbackFillRegion(); overlayRegion = CreateFallbackOverlayRegion(fillRegion); } CreateReplacementSprite(fillRegion, ReplacementLayer.Fill); CreateReplacementSprite(overlayRegion, ReplacementLayer.Overlay); } } private void EnsureRoot() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown if (!((Object)(object)_replacementRoot != (Object)null)) { GameObject val = new GameObject("KOPTI_BlueWaterReplacements"); Object.DontDestroyOnLoad((Object)(object)val); _replacementRoot = val.transform; } } private static WaterRegion CreateFallbackFillRegion() { //IL_0000: 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_0017: 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) float xMin = (float)SceneBounds.Camera_XMin; float xMax = (float)SceneBounds.Camera_XMax; float num = (float)SceneBounds.WaterHeight; float topY = num + 8f; float bottomY = Mathf.Min(num - 18f, (float)SceneBounds.Camera_YMin); return new WaterRegion(xMin, xMax, topY, bottomY); } private static WaterRegion CreateFallbackOverlayRegion(WaterRegion fillRegion) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) float topY = (float)SceneBounds.WaterHeight; return new WaterRegion(fillRegion.XMin, fillRegion.XMax, topY, fillRegion.BottomY); } private static bool TryGetWaterRegions(out WaterRegion fillRegion, out WaterRegion overlayRegion) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_0091: 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_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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_0191: Unknown result type (might be due to invalid IL or missing references) fillRegion = default(WaterRegion); overlayRegion = default(WaterRegion); bool flag = false; float num = float.PositiveInfinity; float num2 = float.NegativeInfinity; float num3 = float.NegativeInfinity; float num4 = float.PositiveInfinity; float num5 = (float)SceneBounds.WaterHeight; string[] levelWaterVisualNames = LevelWaterVisualNames; for (int i = 0; i < levelWaterVisualNames.Length; i++) { foreach (GameObject item in FindLevelWaterObjects(levelWaterVisualNames[i])) { if (TryGetReplacementBounds(item, out var bounds)) { num = Mathf.Min(num, ((Bounds)(ref bounds)).min.x); num2 = Mathf.Max(num2, ((Bounds)(ref bounds)).max.x); num3 = Mathf.Max(num3, ((Bounds)(ref bounds)).max.y); num4 = Mathf.Min(num4, ((Bounds)(ref bounds)).min.y); flag = true; } } } foreach (GameObject item2 in FindLevelWaterObjects("LevelWater")) { if (TryGetReplacementBounds(item2, out var bounds2)) { num = Mathf.Min(num, ((Bounds)(ref bounds2)).min.x); num2 = Mathf.Max(num2, ((Bounds)(ref bounds2)).max.x); num3 = Mathf.Max(num3, ((Bounds)(ref bounds2)).max.y); num4 = Mathf.Min(num4, ((Bounds)(ref bounds2)).min.y); flag = true; } } foreach (GameObject item3 in FindLevelWaterObjects("WaterHitBox")) { if (TryGetReplacementBounds(item3, out var bounds3)) { num5 = Mathf.Max(num5, ((Bounds)(ref bounds3)).max.y); } } if (!flag) { return false; } fillRegion = new WaterRegion(num, num2, num3, num4); overlayRegion = new WaterRegion(num, num2, num5, num4); if (fillRegion.IsValid) { return overlayRegion.IsValid; } return false; } private void CreateReplacementSprite(WaterRegion region, ReplacementLayer layer) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject((layer == ReplacementLayer.Fill) ? "KOPTI_BlueWater_Fill" : "KOPTI_BlueWater_Overlay"); val.transform.SetParent(_replacementRoot, false); val.transform.position = region.Center; SpriteRenderer obj = val.AddComponent(); obj.sprite = GetBlueSprite(); obj.color = ((layer == ReplacementLayer.Fill) ? BlueFillBackground : BlueFillOverlay); obj.drawMode = (SpriteDrawMode)1; obj.size = region.Size; ApplySorting(obj, layer); _spawnedReplacements.Add(val); } private static void ApplySorting(SpriteRenderer target, ReplacementLayer layer) { if (layer == ReplacementLayer.Fill) { if (!TryCopySortingFromLevelWaterObject(target, "WaterGradient", 0) && !TryCopySortingFromLevelWaterObject(target, "ReflectiveWater", 0)) { ((Renderer)target).sortingLayerName = "Default"; ((Renderer)target).sortingOrder = -500; } } else if (TryCopySortingFromLevelWaterObject(target, "Water2D PlayerMask", 0)) { BoostAboveSceneSprites(target, 50); } else if (TryCopySortingFromLevelWaterObject(target, "WaterTextureMask", 0)) { BoostAboveSceneSprites(target, 50); } else { ((Renderer)target).sortingLayerName = "Default"; BoostAboveSceneSprites(target, 100); } } private static bool TryCopySortingFromLevelWaterObject(SpriteRenderer target, string objectName, int orderOffset) { foreach (GameObject item in FindLevelWaterObjects(objectName)) { Renderer component = item.GetComponent(); if (!((Object)(object)component == (Object)null)) { ((Renderer)target).sortingLayerID = component.sortingLayerID; ((Renderer)target).sortingOrder = component.sortingOrder + orderOffset; return true; } } return false; } private static void BoostAboveSceneSprites(SpriteRenderer target, int orderBoost) { //IL_0049: 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) int sortingLayerID = ((Renderer)target).sortingLayerID; int num = SortingLayer.GetLayerValueFromID(sortingLayerID); int sortingOrder = ((Renderer)target).sortingOrder; SpriteRenderer[] array = Resources.FindObjectsOfTypeAll(); foreach (SpriteRenderer val in array) { if ((Object)(object)val == (Object)null || (Object)(object)((Component)val).gameObject == (Object)null) { continue; } Scene scene = ((Component)val).gameObject.scene; if (((Scene)(ref scene)).isLoaded && !((Object)((Component)val).gameObject).name.StartsWith("KOPTI_")) { int layerValueFromID = SortingLayer.GetLayerValueFromID(((Renderer)val).sortingLayerID); if (layerValueFromID > num || (layerValueFromID == num && ((Renderer)val).sortingOrder > sortingOrder)) { sortingLayerID = ((Renderer)val).sortingLayerID; num = layerValueFromID; sortingOrder = ((Renderer)val).sortingOrder; } } } ((Renderer)target).sortingLayerID = sortingLayerID; ((Renderer)target).sortingOrder = sortingOrder + orderBoost; } private static bool TryGetReplacementBounds(GameObject sourceObject, out Bounds bounds) { //IL_0001: 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_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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: 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_00c2: 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_00a2: 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_00ad: 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_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0107: 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) bounds = default(Bounds); bool flag = false; SpriteRenderer component = sourceObject.GetComponent(); Vector3 size; if ((Object)(object)component != (Object)null) { bounds = ((Renderer)component).bounds; size = ((Bounds)(ref bounds)).size; flag = ((Vector3)(ref size)).sqrMagnitude > 0.01f; } Collider2D component2 = sourceObject.GetComponent(); if ((Object)(object)component2 != (Object)null) { if (!flag) { bounds = component2.bounds; size = ((Bounds)(ref bounds)).size; flag = ((Vector3)(ref size)).sqrMagnitude > 0.01f; } else { ((Bounds)(ref bounds)).Encapsulate(component2.bounds); } } Renderer component3 = sourceObject.GetComponent(); if ((Object)(object)component3 != (Object)null && !(component3 is SpriteRenderer)) { if (!flag) { bounds = component3.bounds; size = ((Bounds)(ref bounds)).size; flag = ((Vector3)(ref size)).sqrMagnitude > 0.01f; } else { ((Bounds)(ref bounds)).Encapsulate(component3.bounds); } } if (!flag && ((Object)sourceObject).name == "LevelWater") { Renderer[] componentsInChildren = sourceObject.GetComponentsInChildren(true); foreach (Renderer val in componentsInChildren) { if (!flag) { bounds = val.bounds; size = ((Bounds)(ref bounds)).size; flag = ((Vector3)(ref size)).sqrMagnitude > 0.01f; } else { ((Bounds)(ref bounds)).Encapsulate(val.bounds); } } } return flag; } private static IEnumerable FindLevelWaterObjects(string objectName) { foreach (GameObject item in FindObjectsByName(objectName)) { if (IsUnderLevelWater(item)) { yield return item; } } } private static bool IsUnderLevelWater(GameObject obj) { Transform val = obj.transform; while ((Object)(object)val != (Object)null) { if (((Object)val).name == "LevelWater") { return true; } if (((Object)val).name == "Background") { return false; } val = val.parent; } return false; } private Sprite GetBlueSprite() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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) if ((Object)(object)_blueSprite != (Object)null) { return _blueSprite; } Texture2D val = new Texture2D(1, 1, (TextureFormat)4, false); val.SetPixel(0, 0, Color.white); val.Apply(); ((Texture)val).wrapMode = (TextureWrapMode)1; ((Texture)val).filterMode = (FilterMode)0; _blueSprite = Sprite.Create(val, new Rect(0f, 0f, 1f, 1f), new Vector2(0.5f, 0.5f), 1f, 0u, (SpriteMeshType)0, new Vector4(0f, 0f, 0f, 0f)); return _blueSprite; } private void ClearReplacements() { for (int i = 0; i < _spawnedReplacements.Count; i++) { if ((Object)(object)_spawnedReplacements[i] != (Object)null) { Object.Destroy((Object)(object)_spawnedReplacements[i]); } } _spawnedReplacements.Clear(); } private static IEnumerable FindObjectsByName(string objectName) { GameObject[] array = Resources.FindObjectsOfTypeAll(); GameObject[] array2 = array; foreach (GameObject val in array2) { if (!((Object)(object)val == (Object)null) && (int)((Object)val).hideFlags == 0) { Scene scene = val.scene; if (((Scene)(ref scene)).isLoaded && ((Object)val).name == objectName) { yield return val; } } } } } public class KOPTIDraggableWindow : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler { private RectTransform _window; private Vector2 _dragOffset; public void SetWindow(RectTransform window) { _window = window; } public void OnBeginDrag(PointerEventData eventData) { //IL_002c: 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_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) if (!((Object)(object)_window == (Object)null)) { Transform parent = ((Transform)_window).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); Vector2 val2 = default(Vector2); if (!((Object)(object)val == (Object)null) && RectTransformUtility.ScreenPointToLocalPointInRectangle(val, eventData.position, eventData.pressEventCamera, ref val2)) { _dragOffset = _window.anchoredPosition - val2; } } } public void OnDrag(PointerEventData eventData) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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) if (!((Object)(object)_window == (Object)null)) { Transform parent = ((Transform)_window).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); Vector2 val2 = default(Vector2); if (!((Object)(object)val == (Object)null) && RectTransformUtility.ScreenPointToLocalPointInRectangle(val, eventData.position, eventData.pressEventCamera, ref val2)) { _window.anchoredPosition = val2 + _dragOffset; } } } } internal static class KOPTIXpMenuStyles { public static readonly Color WindowBorder = new Color(0f, 0.329f, 0.89f, 1f); public static readonly Color WindowBackground = new Color(0.925f, 0.914f, 0.847f, 1f); public static readonly Color TitleBarTop = new Color(0.039f, 0.141f, 0.416f, 1f); public static readonly Color TitleBarBottom = new Color(0.192f, 0.416f, 0.773f, 1f); public static readonly Color CloseButtonNormal = new Color(0.831f, 0.282f, 0.282f, 1f); public static readonly Color CloseButtonHover = new Color(0.949f, 0.4f, 0.4f, 1f); public static readonly Color CloseButtonPressed = new Color(0.651f, 0.149f, 0.149f, 1f); public static readonly Color ListBorderDark = new Color(0.494f, 0.494f, 0.494f, 1f); public static readonly Color ListBorderLight = new Color(1f, 1f, 1f, 1f); public static readonly Color ListBackground = Color.white; public static readonly Color ListRowHover = new Color(0.192f, 0.416f, 0.773f, 1f); public static readonly Color ListRowNormalText = Color.black; public static readonly Color ListRowHoverText = Color.white; public static readonly Color SettingsButtonNormal = new Color(0.78f, 0.78f, 0.72f, 1f); public static readonly Color SettingsButtonHover = new Color(0.9f, 0.9f, 0.84f, 1f); public static readonly Color SettingsButtonPressed = new Color(0.62f, 0.62f, 0.56f, 1f); public static readonly Color MenuDimOverlay = new Color(0f, 0f, 0f, 0.72f); public static readonly Color StatusText = new Color(0.35f, 0.35f, 0.35f, 1f); public static Text CreateText(Transform parent, string text, int fontSize, TextAnchor alignment, Color color, Font font) { //IL_0032: 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) GameObject obj = CreateUiObject("Text", parent); StretchToParent(obj.GetComponent()); Text obj2 = obj.AddComponent(); obj2.font = font; obj2.text = text; obj2.fontSize = fontSize; obj2.alignment = alignment; ((Graphic)obj2).color = color; obj2.supportRichText = false; return obj2; } public static Button CreateCloseButton(Transform parent, Font font, UnityAction onClick) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: 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) return CreateTitleBarButton(parent, font, "X", -4f, CloseButtonNormal, CloseButtonHover, CloseButtonPressed, Color.white, onClick); } public static Button CreateSettingsButton(Transform parent, Font font, UnityAction onClick) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: 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) return CreateTitleBarButton(parent, font, "...", -29f, SettingsButtonNormal, SettingsButtonHover, SettingsButtonPressed, Color.black, onClick); } private static Button CreateTitleBarButton(Transform parent, Font font, string label, float anchoredRight, Color normalColor, Color hoverColor, Color pressedColor, Color labelColor, UnityAction onClick) { //IL_001d: 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_0047: 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_006c: 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_0093: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00ec: Unknown result type (might be due to invalid IL or missing references) GameObject val = CreateUiObject("TitleBarButton", parent); RectTransform component = val.GetComponent(); component.anchorMin = new Vector2(1f, 0.5f); component.anchorMax = new Vector2(1f, 0.5f); component.pivot = new Vector2(1f, 0.5f); component.anchoredPosition = new Vector2(anchoredRight, 0f); component.sizeDelta = new Vector2(21f, 21f); Image val2 = val.AddComponent(); ((Graphic)val2).color = normalColor; Button obj = val.AddComponent