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 Completionist Map v1.0.3
CompletionistMap/CompletionistMapMod.dll
Decompiled 9 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.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GenericVariableExtension; using GlobalEnums; using GlobalSettings; using HarmonyLib; using HutongGames.PlayMaker; using InControl; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using TMProOld; using TeamCherry.Localization; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using Yorai.CompletionistMap.MapIcon; using Yorai.CompletionistMap.Menu; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("CompletionistMapMod")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("CompletionistMapMod")] [assembly: AssemblyTitle("CompletionistMapMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Yorai.CompletionistMap { public interface IMapFilter { string NameKey { get; } string DisplayNameSingle { get; } string DisplayNameCategory { get; } Stylizer Style { get; } bool OverridesTexture { get; } FilterCountingFunction CustomCounting { get; } } public class SimpleMapFilter : IMapFilter { public string NameKey { get; } public Stylizer Style { get; set; } public bool OverridesTexture { get; set; } public FilterCountingFunction CustomCounting { get; set; } public string DisplayNameSingle { get; set; } public string DisplayNameCategory { get; set; } public SimpleMapFilter(string NameKey) { this.NameKey = NameKey; DisplayNameSingle = NameKey; } } public delegate(int obtained, int max) FilterCountingFunction(); public class MapMarkerHoverFeature : MonoBehaviour { public MapMarkerRenderer Renderer; private GameObject _holder; private TextMeshPro _tempText; private Vector3 _lastHoveredScale; private Transform _lastHoveredPin; private GameObject _hoverEverythingRoot; private void Start() { RecreateResources(); } private void OnDestroy() { Object.Destroy((Object)(object)_holder); Object.Destroy((Object)(object)_hoverEverythingRoot); ResetHoveredVanillaPinScale(); } private void Update() { if (Utils.TryGetMap(out var _)) { bool value = ModOptions.ShowAllMapZoneNames.Value; _hoverEverythingRoot.SetActive(value && !MapPatches.LatestDisplayedMapZone.HasValue); ShowTextForNearestPoint(); } } private void RecreateResources() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) Object.Destroy((Object)(object)_holder); Object.Destroy((Object)(object)_hoverEverythingRoot); TextMeshPro originalText = Object.FindAnyObjectByType<MapMarkerMenu>((FindObjectsInactive)1).amounts[0]; _holder = new GameObject("Mod Map Hover Text"); _tempText = Utils.CreateText(originalText, _holder); _holder.SetActive(false); if (!Utils.TryGetMap(out var map)) { return; } _hoverEverythingRoot = new GameObject("Mod Map Zone names"); _hoverEverythingRoot.transform.SetParent(((Component)map).transform); _hoverEverythingRoot.SetActive(false); Bounds val = default(Bounds); foreach (KeyValuePair<string, List<MapCache>> mapCache in map.mapCaches) { foreach (MapCache item in mapCache.Value) { if (Object.op_Implicit((Object)(object)item.gameMapScene) && item.gameMapScene.TryGetSpriteBounds(ref val)) { GameObject val2 = new GameObject(mapCache.Key); val2.transform.SetParent(_hoverEverythingRoot.transform, false); TextMeshPro obj = Utils.CreateText(originalText, val2); val2.SetActive(true); val2.transform.position = ((Bounds)(ref val)).center; ((TMP_Text)obj).text = mapCache.Key; } } } } private void ResetHoveredVanillaPinScale() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_lastHoveredPin)) { _lastHoveredPin.localScale = _lastHoveredScale; _lastHoveredPin = null; } } private void ShowTextForNearestPoint() { //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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: 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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_011e: 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_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: 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_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0232: 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_0269: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_027c: 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_0283: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0256: 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) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_holder)) { RecreateResources(); } _holder.SetActive(false); ResetHoveredVanillaPinScale(); if (!Utils.IsMapOpen() || !MapPatches.CanShowCursor) { return; } (Camera, Transform, Camera) mapCamera = MapUtils.GetMapCamera(); Vector3 mousePosition = ActionHelpers.GetMousePosition(); KeyValuePair<IMapIcon, MapMarkerRenderer.VisibleMapEntry>? closestEntry = null; float num = 500f / mapCamera.Item1.orthographicSize; foreach (KeyValuePair<IMapIcon, MapMarkerRenderer.VisibleMapEntry> marker in Renderer.Markers) { if (marker.Value.Root.activeSelf) { Vector2 val = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(marker.Value.Root.transform.position), mapCamera); Vector3 val2 = mousePosition - Vector2.op_Implicit(val); float magnitude = ((Vector3)(ref val2)).magnitude; if (!(num <= magnitude)) { num = magnitude; closestEntry = marker; } } } Transform val3 = null; foreach (Transform vanillaPin in Renderer.VanillaPins) { if (((Component)vanillaPin).gameObject.activeSelf) { Vector2 val4 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(vanillaPin.position), mapCamera); Vector3 val5 = mousePosition - Vector2.op_Implicit(val4); float magnitude2 = ((Vector3)(ref val5)).magnitude; if (!(num <= magnitude2)) { num = magnitude2; closestEntry = null; val3 = vanillaPin; } } } bool flag = closestEntry.HasValue || Object.op_Implicit((Object)(object)val3); GameMapScene val6 = null; _ = Vector2.zero; if (Utils.TryGetMap(out var map)) { Bounds val7 = default(Bounds); foreach (KeyValuePair<string, List<MapCache>> mapCache in map.mapCaches) { foreach (MapCache item in mapCache.Value) { if (!Object.op_Implicit((Object)(object)item.gameMapScene) || !item.gameMapScene.TryGetSpriteBounds(ref val7)) { continue; } Vector2 val8 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(((Bounds)(ref val7)).min), mapCamera); Vector2 val9 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(((Bounds)(ref val7)).max), mapCamera); bool flag2 = mousePosition.x >= val8.x && mousePosition.y >= val8.y && mousePosition.x <= val9.x && mousePosition.y <= val9.y; Vector2 val10 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(((Bounds)(ref val7)).center), mapCamera); Vector3 val11 = mousePosition - Vector2.op_Implicit(val10); float magnitude3 = ((Vector3)(ref val11)).magnitude; if (flag) { if (num <= magnitude3) { continue; } } else if (!flag2) { continue; } closestEntry = null; val3 = null; _ = mapCache.Key; num = magnitude3; val6 = item.gameMapScene; Vector2.op_Implicit(((Bounds)(ref val7)).center); } } } if (closestEntry.HasValue) { DisplayTextFor(closestEntry); } else if (Object.op_Implicit((Object)(object)val3)) { DisplayTextFor(val3); } else if (Object.op_Implicit((Object)(object)val6)) { TryDisplayingSceneName(mapCamera, mousePosition); } } private void TryDisplayingSceneName((Camera mapCamera, Transform mapFilter, Camera hudCamera) set, Vector3 mousePosition) { //IL_0064: 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_006f: 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_0078: 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_0083: 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_008a: 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_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_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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) if (!Utils.TryGetMap(out var map)) { return; } Bounds val = default(Bounds); foreach (KeyValuePair<string, List<MapCache>> mapCache in map.mapCaches) { foreach (MapCache item in mapCache.Value) { if (!Object.op_Implicit((Object)(object)item.gameMapScene) || !item.gameMapScene.TryGetSpriteBounds(ref val)) { continue; } Vector2 val2 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(((Bounds)(ref val)).min), set); Vector2 val3 = MapUtils.MapCameraToScreenSpace(Vector2.op_Implicit(((Bounds)(ref val)).max), set); if (mousePosition.x >= val2.x && mousePosition.y >= val2.y && mousePosition.x <= val3.x && mousePosition.y <= val3.y) { UpdateTextFor(((Bounds)(ref val)).center, mapCache.Key, default(Vector3)); if (ClickedTeleportKey()) { Object.FindAnyObjectByType<MapTeleportMenu>().TryTeleportingTo(item.gameMapScene, ((Bounds)(ref val)).center, withPreciseTeleport: false); } return; } } } } private void DisplayTextFor(Transform closestVanillaEntry) { //IL_000e: 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_001f: 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) _lastHoveredPin = closestVanillaEntry; _lastHoveredScale = _lastHoveredPin.localScale; Transform lastHoveredPin = _lastHoveredPin; lastHoveredPin.localScale *= 1.5f; UpdateTextFor(closestVanillaEntry, ((Object)closestVanillaEntry).name); if (ClickedTeleportKey()) { Object.FindAnyObjectByType<MapTeleportMenu>().TryTeleportingTo(closestVanillaEntry); } } private void UpdateTextFor(Transform entry, string text) { //IL_001e: 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_0037: Unknown result type (might be due to invalid IL or missing references) TextMeshPro tempText = _tempText; _holder.SetActive(true); _holder.transform.position = entry.position + new Vector3(0f, -0.3f, 0f); ((TMP_Text)tempText).text = text; } private void UpdateTextFor(Vector3 position, string text, Vector3 offset) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) TextMeshPro tempText = _tempText; _holder.SetActive(true); _holder.transform.position = position + offset; ((TMP_Text)tempText).text = text; } private void DisplayTextFor(KeyValuePair<IMapIcon, MapMarkerRenderer.VisibleMapEntry>? closestEntry) { //IL_004f: 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_0060: 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) MapMarkerRenderer.VisibleMapEntry value = closestEntry.Value.Value; IMapIcon key = closestEntry.Value.Key; MarkerAnimation markerAnimation = default(MarkerAnimation); if (value.Root.TryGetComponent<MarkerAnimation>(ref markerAnimation)) { markerAnimation.ClearAnimation(); } _lastHoveredPin = value.Root.transform; _lastHoveredScale = _lastHoveredPin.localScale; Transform lastHoveredPin = _lastHoveredPin; lastHoveredPin.localScale *= 1.5f; IKeyboardProvider keyboardProvider = InputManager.KeyboardProvider; bool num = keyboardProvider != null && keyboardProvider.GetKeyIsPressed((Key)5); string text = key.Id; if (num) { text = key.Hierarchy.ActualScenePath + "\n" + key.Hierarchy.CleanScenePath + "\n" + key.Id + "\n" + key.Details + "\n" + key.Localized; } else if (!string.IsNullOrEmpty(key.Localized)) { text = key.Localized; } else if (!string.IsNullOrEmpty(key.Details)) { text = key.Details; } UpdateTextFor(value.Root.transform, text); if (ClickedTeleportKey()) { Object.FindAnyObjectByType<MapTeleportMenu>().TryTeleportingTo(key); } } private bool ClickedTeleportKey() { if (Object.op_Implicit((Object)(object)EventSystem.current) && EventSystem.current.IsPointerOverGameObject()) { return false; } ConfigEntry<bool> allowTeleports = ModOptions.AllowTeleports; if (allowTeleports == null || !allowTeleports.Value) { return false; } IMouseProvider mouseProvider = InputManager.MouseProvider; if (mouseProvider != null && mouseProvider.GetButtonIsPressed((Mouse)2)) { IMouseProvider mouseProvider2 = InputManager.MouseProvider; if (mouseProvider2 == null) { return false; } return !mouseProvider2.GetButtonWasPressed((Mouse)2); } return false; } } public class MapMarkerRenderer : MonoBehaviour { public struct VisibleMapEntry { public GameObject Root; public Vector3 OriginalWorldPosition; } [CompilerGenerated] private sealed class <Start>d__16 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public MapMarkerRenderer <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Start>d__16(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; MapMarkerRenderer mapMarkerRenderer = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (!ModMapData.Ready) { <>2__current = null; <>1__state = 1; return true; } mapMarkerRenderer.DoSetup(); ModOptions.SceneMapMarkersEnabled.SettingChanged += mapMarkerRenderer.WipeSceneMapMarkers; ModOptions.SizeForMapPins.SettingChanged += mapMarkerRenderer.ResizePins; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public MapScanner Scanner; public List<IMapIcon> Rendered = new List<IMapIcon>(); public Dictionary<IMapIcon, VisibleMapEntry> Markers = new Dictionary<IMapIcon, VisibleMapEntry>(); public List<Transform> VanillaPins = new List<Transform>(); private Sprite _whiteSprite; private int _lastScanVersion; private List<Transform> _benchPins = new List<Transform>(); private List<Transform> _shopPins = new List<Transform>(); private List<Transform> _tubePins = new List<Transform>(); private List<Transform> _bellwayPins = new List<Transform>(); private List<Transform> _fleaPins = new List<Transform>(); private Transform _markersRoot; private bool _lastMapIsOpen; private int _lastFastScanVersion; private List<GameObject> _arrows = new List<GameObject>(); private string _lastSceneName; private GameObject _markerTemplateRoot; private int _timesTriedToOpenMap; private int _lastTimesTriedToOpenMap; [IteratorStateMachine(typeof(<Start>d__16))] private IEnumerator Start() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Start>d__16(0) { <>4__this = this }; } private void OnDestroy() { ModOptions.SizeForMapPins.SettingChanged -= ResizePins; ModOptions.SceneMapMarkersEnabled.SettingChanged -= WipeSceneMapMarkers; ClearDisplayedMarkers(); ClearSceneArrows(); Object.Destroy((Object)(object)_whiteSprite); } public void RequestInSceneMapIcons() { _timesTriedToOpenMap++; } private void Update() { bool flag = Utils.IsMapOpen(); if ((Object)(object)InteractManager.BlockingInteractable != (Object)null) { ClearSceneArrows(); } if (_lastFastScanVersion != Scanner.Version || (flag && !_lastMapIsOpen) || _timesTriedToOpenMap != _lastTimesTriedToOpenMap) { _lastFastScanVersion = Scanner.Version; _lastTimesTriedToOpenMap = _timesTriedToOpenMap; string sceneName = GameManager.instance.sceneName; bool num = !ModOptions.SceneMapMarkersWhenEnteringScene.Value && sceneName != _lastSceneName; _lastSceneName = sceneName; if (!num) { TryCreatingArrows(); } } if (_lastScanVersion != Scanner.Version && flag) { Stopwatch stopwatch = Stopwatch.StartNew(); stopwatch.Start(); UpdateMarkers(); stopwatch.Stop(); } _lastMapIsOpen = flag; } private void TryCreatingArrows() { if (!ModOptions.SceneMapMarkersEnabled.Value || !PlayerData.HasInstance || !PlayerData.instance.HasAnyMap) { return; } ClearSceneArrows(); foreach (IMapIcon fastScanEntry in Scanner.FastScanEntries) { if (Scanner.Visible.Contains(fastScanEntry)) { _arrows.Add(SceneMapMarker.Create(fastScanEntry, _markerTemplateRoot)); } } } private void WipeSceneMapMarkers(object sender, EventArgs e) { ClearSceneArrows(); } private void ClearSceneArrows() { foreach (GameObject arrow in _arrows) { Object.Destroy((Object)(object)arrow); } _arrows.Clear(); } private void UpdateMarkers() { if (!Utils.TryGetMap(out var map)) { ClearDisplayedMarkers(); return; } Rendered.Clear(); _lastScanVersion = Scanner.Version; if (!Object.op_Implicit((Object)(object)map.mapMarkerTemplates[0])) { Mod.Log.LogError((object)"Can't create map markers, as there's no base markers!"); return; } foreach (KeyValuePair<IMapIcon, VisibleMapEntry> marker in Markers) { bool flag = Scanner.Visible.Contains(marker.Key); marker.Value.Root.SetActive(flag); if (flag) { Rendered.Add(marker.Key); } } PushOverlappingMarkers(); } public void PushOverlappingMarkers(bool doAllMarkers = false) { //IL_00eb: 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_0107: 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_011e: Unknown result type (might be due to invalid IL or missing references) IEnumerable<IMapIcon> source = Rendered; if (doAllMarkers) { source = Markers.Keys; } foreach (IGrouping<(string, string, Type, Vector2), IMapIcon> item in from x in source group x by (x.Id, x.Hierarchy.CleanScenePath, x.GetType(), x.WorldPosition())) { List<IMapIcon> list = item.ToList(); float num = (float)(list.Count - 1) / 2f; int num2 = 0; float num3 = 0.2f; if (item.Key.Item3 == typeof(QuestMapIcon)) { num3 = 0f; } bool flag = num3 == 0f; bool flag2 = true; foreach (IMapIcon item2 in list) { if (Markers.TryGetValue(item2, out var value)) { if (!flag2 && flag) { value.Root.SetActive(false); continue; } value.Root.transform.localPosition = value.OriginalWorldPosition; Transform transform = value.Root.transform; transform.localPosition += Vector3.right * (((float)num2++ - num) * num3); flag2 = false; } } } } private void DoSetup() { //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) if (Utils.TryGetMap(out var map)) { ClearDisplayedMarkers(); _whiteSprite = Sprite.Create(Texture2D.whiteTexture, new Rect(0f, 0f, 4f, 4f), new Vector2(0.5f, 0.5f)); GameObject originalTemplateMarker = map.mapMarkerTemplates[0]; PrepareMarkerTemplate(originalTemplateMarker); BuildAllMarkers(); HuntVanillaPins(); } } private void ResizePins(object sender, EventArgs e) { MarkerAnimation markerAnimation = default(MarkerAnimation); foreach (KeyValuePair<IMapIcon, VisibleMapEntry> marker in Markers) { if (marker.Value.Root.TryGetComponent<MarkerAnimation>(ref markerAnimation)) { markerAnimation.ClearAnimation(); } } } private void HuntVanillaPins() { _benchPins.Clear(); _shopPins.Clear(); _tubePins.Clear(); _bellwayPins.Clear(); _fleaPins.Clear(); if (Utils.TryGetMap(out var map)) { FindVanillaPinsIn(((Component)map).transform); VanillaPins.Clear(); VanillaPins.AddRange(_benchPins); VanillaPins.AddRange(_tubePins); VanillaPins.AddRange(_shopPins); VanillaPins.AddRange(_bellwayPins); VanillaPins.AddRange(_fleaPins); } } private void FindVanillaPinsIn(Transform current) { //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown if (((Object)current).name.Contains("Bench Pin", StringComparison.InvariantCultureIgnoreCase)) { _benchPins.Add(current); } if (((Object)current).name.Contains("Shop Pin", StringComparison.InvariantCultureIgnoreCase)) { _shopPins.Add(current); } if (((Object)current).name.Contains("Tube Pin", StringComparison.InvariantCultureIgnoreCase)) { _tubePins.Add(current); } if (((Object)current).name.Contains("Bellway Pin", StringComparison.InvariantCultureIgnoreCase)) { _bellwayPins.Add(current); } if (((Object)current).name.Contains("SavedFlea_", StringComparison.InvariantCultureIgnoreCase)) { _fleaPins.Add(current); } foreach (Transform item in current) { Transform current2 = item; FindVanillaPinsIn(current2); } } private void PrepareMarkerTemplate(GameObject originalTemplateMarker) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0013: 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) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("Holder"); val.transform.SetLocalPositionAndRotation(default(Vector3), Quaternion.identity); Object.DontDestroyOnLoad((Object)(object)val); val.SetActive(false); GameObject obj = Object.Instantiate<GameObject>(originalTemplateMarker, val.transform); obj.transform.SetLocalPositionAndRotation(default(Vector3), Quaternion.identity); obj.SetActive(true); Transform transform = obj.transform; transform.localScale *= 2f; Object.Destroy((Object)(object)obj.GetComponent<InvMarkerCollide>()); Object.Destroy((Object)(object)obj.GetComponent<InvMarker>()); Object.DestroyImmediate((Object)(object)((Component)obj.transform.GetChild(0)).gameObject); obj.GetComponent<SpriteRenderer>().sprite = _whiteSprite; val.gameObject.AddComponent<MarkerAnimation>(); _markerTemplateRoot = val; } private void BuildAllMarkers() { if (!Utils.TryGetMap(out var map)) { return; } _markersRoot = map.spawnedMapMarkers[0, 0].transform.parent; foreach (IMapIcon icon in ModMapData.Icons) { TryCreateMarker(icon); } Mod.Log.LogInfo((object)$"Prepared {Markers.Count} markers!"); } private void TryCreateMarker(IMapIcon coord) { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) if (coord.HidesSelf) { return; } IHaveHierarchy haveHierarchy = coord; if (!MapUtils.TryGetMapPoint(coord, out var mapCache, out var mappedScene)) { bool flag = false; Serialized.TransitionPointData oneCloserToRoot; int jumpsDistanceFromRoot; while (ModMapData.Navigator.TryGetOnePointCloserToRoot(haveHierarchy.Hierarchy.CleanScenePath, out oneCloserToRoot, out jumpsDistanceFromRoot)) { haveHierarchy = oneCloserToRoot; if (MapUtils.TryGetMapPoint(haveHierarchy, out mapCache, out mappedScene)) { flag = true; break; } } if (!flag) { Mod.Log.LogWarning((object)("Failed TryGetMapPoint - " + coord.Id + " | " + coord.Hierarchy.CleanScenePath)); return; } } if (!MapUtils.TryGetPosition(haveHierarchy, mapCache, mappedScene, out var mapPosition)) { Mod.Log.LogWarning((object)("Failed TryGetPosition - " + coord.Id + " | " + coord.Hierarchy.CleanScenePath)); return; } Rendered.Add(coord); GameObject val = Object.Instantiate<GameObject>(_markerTemplateRoot, default(Vector3), Quaternion.identity, _markersRoot); val.transform.SetLocalPositionAndRotation(Vector2.op_Implicit(mapPosition), Quaternion.identity); SpriteRenderer componentInChildren = val.GetComponentInChildren<SpriteRenderer>(); coord.Stylize(((Component)componentInChildren).gameObject, componentInChildren); Markers.Add(coord, new VisibleMapEntry { Root = val, OriginalWorldPosition = Vector2.op_Implicit(mapPosition) }); } public void ClearDisplayedMarkers() { Object.Destroy((Object)(object)_markerTemplateRoot); foreach (KeyValuePair<IMapIcon, VisibleMapEntry> marker in Markers) { Object.Destroy((Object)(object)marker.Value.Root); } Rendered.Clear(); Markers.Clear(); } } public class MapMovement : MonoBehaviour { private static class FocusedZoomUtils { public static Vector3 GetDeltaForFocusedZoom(Camera cam, Transform movingTransform, float newOrthoSize, Vector2 mouseScreenPos) { //IL_0001: 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_0024: 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_002e: 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) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0042: 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) float z = movingTransform.position.z - ((Component)cam).transform.position.z; Vector3 val = ScreenToWorldOrtho(cam, cam.orthographicSize, mouseScreenPos, z); Vector3 val2 = ScreenToWorldOrtho(cam, newOrthoSize, mouseScreenPos, z) - val; return new Vector3(val2.x, val2.y, 0f); } private static Vector3 ScreenToWorldOrtho(Camera cam, float orthoSize, Vector2 screen, float z) { //IL_0002: 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_0042: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0059: 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_006b: 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) Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(screen.x - 0.5f * (float)Screen.width, screen.y - 0.5f * (float)Screen.height); float num = orthoSize * 2f / (float)Screen.height; Vector2 val2 = Vector2.op_Implicit(((Component)cam).transform.position) + val * num; return new Vector3(val2.x, val2.y, ((Component)cam).transform.position.z + z); } } private class VerybadOldSmoothMapDraggingUtils { private readonly bool _invertX = true; private readonly bool _invertY = true; private readonly bool _compensateForMapScale = true; private Vector2? _lastMouse; private Vector3 _lastDelta; private bool _lastHolding; public void DragMapExact(Transform gameMapTransform) { //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) //IL_0036: 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_006f: 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_0080: 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) //IL_008f: 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_00c7: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: 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_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: 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_0120: 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_0124: 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_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_014e: 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_015d: 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_0170: 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_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: 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_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_019f: 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_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: 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_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_022c: 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_0245: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_0292: 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) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) (Camera mapCamera, Transform mapFilter, Camera hudCamera) mapCamera = MapUtils.GetMapCamera(); Camera item = mapCamera.mapCamera; Transform item2 = mapCamera.mapFilter; Camera item3 = mapCamera.hudCamera; IMouseProvider mouseProvider = InputManager.MouseProvider; bool flag = mouseProvider != null && mouseProvider.GetButtonIsPressed((Mouse)1); Vector2 val = Vector2.op_Implicit(ActionHelpers.GetMousePosition()); if (flag && !_lastHolding && EventSystem.current.IsPointerOverGameObject()) { flag = false; } if (!flag) { _lastHolding = false; _lastMouse = null; gameMapTransform.position -= _lastDelta; _lastDelta *= 0.96f; } else if (!_lastHolding) { _lastHolding = true; _lastMouse = val; } else if (_lastMouse.HasValue) { Ray val2 = item3.ScreenPointToRay(new Vector3(_lastMouse.Value.x, _lastMouse.Value.y, 0f)); Ray val3 = item3.ScreenPointToRay(new Vector3(val.x, val.y, 0f)); Vector3 forward = item2.forward; Vector3 position = item2.position; float num = Vector3.Dot(forward, position - ((Ray)(ref val2)).origin) / Vector3.Dot(forward, ((Ray)(ref val2)).direction); float num2 = Vector3.Dot(forward, position - ((Ray)(ref val3)).origin) / Vector3.Dot(forward, ((Ray)(ref val3)).direction); Vector3 val4 = ((Ray)(ref val2)).origin + ((Ray)(ref val2)).direction * num; Vector3 val5 = ((Ray)(ref val3)).origin + ((Ray)(ref val3)).direction * num2; Vector3 val6 = item2.InverseTransformPoint(val4); Vector3 val7 = item2.InverseTransformPoint(val5); MeshFilter component = ((Component)item2).GetComponent<MeshFilter>(); Mesh val8 = (Object.op_Implicit((Object)(object)component) ? component.sharedMesh : null); ? val9; if (!Object.op_Implicit((Object)(object)val8)) { val9 = new Vector3(1f, 1f, 1f); } else { Bounds bounds = val8.bounds; val9 = ((Bounds)(ref bounds)).size; } Vector3 val10 = (Vector3)val9; Vector3 val11 = val7 - val6; Vector2 val12 = new Vector2(val11.x / Mathf.Max(0.0001f, val10.x), val11.y / Mathf.Max(0.0001f, val10.y)); float num3 = 2f * item.orthographicSize * item.aspect; float num4 = 2f * item.orthographicSize; float num5 = 1f; float num6 = 1f; if (_compensateForMapScale) { num5 = 1f / Mathf.Max(0.0001f, gameMapTransform.lossyScale.x); num6 = 1f / Mathf.Max(0.0001f, gameMapTransform.lossyScale.y); } float num7 = val12.x * num3 * (_invertX ? (-1f) : 1f) * num5; float num8 = val12.y * num4 * (_invertY ? (-1f) : 1f) * num6; _lastDelta = new Vector3(num7, num8, 0f); gameMapTransform.position -= _lastDelta; _lastMouse = val; } } } private VerybadOldSmoothMapDraggingUtils _smoothDragging = new VerybadOldSmoothMapDraggingUtils(); private const float _defaultZoom = 8.7f; private float _zoomMomentum; private void Update() { //IL_0030: 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 (Utils.TryGetMap(out var map) && Utils.IsMapOpen()) { AllowZoomScrolling(); _smoothDragging.DragMapExact(((Component)map).transform); map.UpdateMapPosition(Vector2.op_Implicit(GetGameMapTransform().localPosition)); } } private void AllowZoomScrolling() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008f: 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_0096: 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_009f: 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) (Camera mapCamera, Transform mapFilter, Camera hudCamera) mapCamera = MapUtils.GetMapCamera(); (Camera, Transform, Camera) decoratorCamera = MapUtils.GetDecoratorCamera(); float num = 8.7f; num = mapCamera.mapCamera.orthographicSize; float num2 = 0f - Utils.Scroll(); if (EventSystem.current.IsPointerOverGameObject()) { num2 = 0f; } _zoomMomentum += num2; num *= 1f + 0.025f * _zoomMomentum; _zoomMomentum *= 0.94f; Transform transform = GameObject.Find("/_GameCameras/HudCamera/In-game/Game Map Rendering/Game_Map_Hornet(Clone)").transform; Camera item = mapCamera.mapCamera; Vector2 mouseScreenPos = Vector2.op_Implicit(ActionHelpers.GetMousePosition()); Vector3 deltaForFocusedZoom = FocusedZoomUtils.GetDeltaForFocusedZoom(item, transform, num, mouseScreenPos); transform.localPosition += deltaForFocusedZoom; mapCamera.mapCamera.orthographicSize = num; decoratorCamera.Item1.orthographicSize = num; } private Transform GetGameMapTransform() { return GameObject.Find("/_GameCameras/HudCamera/In-game/Game Map Rendering/Game_Map_Hornet(Clone)").transform; } } public class MapScanner : MonoBehaviour { private static class ReasonedResults { public static ReasonedResult FilterIsDisabled = new ReasonedResult(passes: false, "Filter is disabled"); public static ReasonedResult CoordinateIsCleared = new ReasonedResult(passes: false, "Coordinate is cleared"); public static ReasonedResult DebugIgnoreHide = new ReasonedResult(passes: true, "Debug ignore hide"); public static ReasonedResult PreferencesPrevented = new ReasonedResult(passes: false, "Preferences Prevented"); public static ReasonedResult HidesSelf = new ReasonedResult(passes: false, "Hides Self"); public static ReasonedResult AnyFsmFlagsTriggered = new ReasonedResult(passes: false, "Fsm flags triggered"); public static ReasonedResult HierarchyHides = new ReasonedResult(passes: false, "Hierarchy hides"); public static ReasonedResult ReasonToHide = new ReasonedResult(passes: false, "Reason to hide"); public static ReasonedResult QuickMapDoesntAllow = new ReasonedResult(passes: false, "Quick map doesn't allow"); public static ReasonedResult Success = new ReasonedResult(passes: true, "Incomplete Entry"); } [CompilerGenerated] private sealed class <Start>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public MapScanner <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Start>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; MapScanner mapScanner = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (!ModMapData.Ready) { <>2__current = null; <>1__state = 1; return true; } ModOptions.JournalEntryDisplayMode.SettingChanged += mapScanner.ForceUpdate; ModOptions.JournalEntryCompletionMode.SettingChanged += mapScanner.ForceUpdate; ModOptions.AreaDisplayLimitation.SettingChanged += mapScanner.ForceUpdate; ModOptions.AreaDisplayTiming.SettingChanged += mapScanner.ForceUpdate; foreach (KeyValuePair<string, ConfigEntry<bool>> toggle in ModOptions.Toggles) { toggle.Value.SettingChanged += mapScanner.ForceUpdate; } mapScanner.TryScan(forced: true); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public List<IMapIcon> Visible = new List<IMapIcon>(); public List<IMapIcon> FastScanEntries = new List<IMapIcon>(); private bool _forceUpdate; private string _lastSceneName; private MapZone? _lastMapZone; private bool _respectMinimap; public int Version { get; private set; } [IteratorStateMachine(typeof(<Start>d__10))] private IEnumerator Start() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Start>d__10(0) { <>4__this = this }; } private void OnDestroy() { ModOptions.JournalEntryDisplayMode.SettingChanged -= ForceUpdate; ModOptions.JournalEntryCompletionMode.SettingChanged -= ForceUpdate; ModOptions.AreaDisplayLimitation.SettingChanged -= ForceUpdate; ModOptions.AreaDisplayTiming.SettingChanged -= ForceUpdate; foreach (KeyValuePair<string, ConfigEntry<bool>> toggle in ModOptions.Toggles) { toggle.Value.SettingChanged -= ForceUpdate; } } private void ForceUpdate(object sender, EventArgs e) { _forceUpdate = true; } private void Update() { if (Object.op_Implicit((Object)(object)GameManager.UnsafeInstance) && GameManager.instance.HasFinishedEnteringScene) { if (GameManager.instance.IsMenuScene()) { _lastSceneName = null; return; } TryScan(); ScanFastEntries(); } } private void TryScan(bool forced = false) { //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) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) string sceneName = GameManager.instance.sceneName; MapZone? latestDisplayedMapZone = MapPatches.LatestDisplayedMapZone; if (_lastSceneName != sceneName || _forceUpdate || _lastMapZone != latestDisplayedMapZone || forced) { _respectMinimap = _lastMapZone != latestDisplayedMapZone; _lastSceneName = sceneName; _forceUpdate = false; _lastMapZone = latestDisplayedMapZone; Scan(); } } private void ScanFastEntries() { for (int num = FastScanEntries.Count - 1; num >= 0; num--) { IMapIcon mapIcon = FastScanEntries[num]; if (mapIcon.FastScanWhetherCoordinateIsComplete()) { Visible.Remove(mapIcon); FastScanEntries.RemoveAt(num); Version++; } else if (mapIcon.CoordinateIsCleared()) { Visible.Remove(mapIcon); FastScanEntries.RemoveAt(num); Version++; } } } public void Scan() { if (!ModMapData.Ready || !Utils.TryGetMap(out var _) || !Object.op_Implicit((Object)(object)GameManager.UnsafeInstance)) { return; } Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Visible.Clear(); FastScanEntries.Clear(); foreach (IMapIcon icon in ModMapData.Icons) { if (DisplayableLocation(icon, checkSelf: true)) { Visible.Add(icon); if (icon.Hierarchy.CleanScenePath == GameManager.instance.sceneName) { FastScanEntries.Add(icon); } } } stopwatch.Stop(); Mod.Log.LogInfo((object)$"Scanned coordinates, {Visible.Count} visible, took {stopwatch.ElapsedMilliseconds}ms"); Version++; } public bool DisplayableLocation(IMapIcon coord, bool checkSelf, bool checkClear = true) { return DisplayableLocationVerbose(coord, checkSelf, checkClear).Passes; } public ReasonedResult DisplayableLocationVerbose(IMapIcon coord, bool checkSelf, bool checkClear = true) { if (coord.Filter != null && ModOptions.Toggles.TryGetValue(coord.Filter.NameKey, out var value) && !value.Value) { return ReasonedResults.FilterIsDisabled; } if (checkClear && coord.CoordinateIsCleared()) { return ReasonedResults.CoordinateIsCleared; } if (ModOptions.DebugIgnoreHide.Value) { return ReasonedResults.DebugIgnoreHide; } if (!CanPreferencesDisplay(coord)) { return ReasonedResults.PreferencesPrevented; } if (checkSelf && coord.HidesSelf) { return ReasonedResults.HidesSelf; } if (AnyFsmFlagsTriggered(coord)) { return ReasonedResults.AnyFsmFlagsTriggered; } if (DoesHierarchyHaveReasonToHide(coord)) { return ReasonedResults.HierarchyHides; } if (coord.HasReasonToHide()) { return ReasonedResults.ReasonToHide; } if (!QuickMapAllows(coord)) { return ReasonedResults.QuickMapDoesntAllow; } return ReasonedResults.Success; } private bool QuickMapAllows(IMapIcon coord) { if (!_respectMinimap) { return true; } if (_lastMapZone.HasValue && MapUtils.TryGetMapCache(coord, out var mapCache) && !mapCache[0].mapParent.Parent.activeSelf) { return false; } return true; } private bool CanPreferencesDisplay(IMapIcon coord) { Preferences.AreaDisplayTimingPreference value = ModOptions.AreaDisplayTiming.Value; bool flag = GameManager.UnsafeInstance.sceneName == coord.Hierarchy.CleanScenePath; bool flag2 = flag; switch (value) { case Preferences.AreaDisplayTimingPreference.Mapped: if (!flag2 && !PlayerData._instance.scenesMapped.Contains(coord.Hierarchy.CleanScenePath)) { return false; } break; case Preferences.AreaDisplayTimingPreference.Sketched: if (!flag2 && !PlayerData._instance.scenesVisited.Contains(coord.Hierarchy.CleanScenePath)) { return false; } break; } if (ModOptions.AreaDisplayLimitation.Value == Preferences.AreaDisplayLimitationPreference.CurrentArea && !flag) { return false; } return true; } private static bool AnyFsmFlagsTriggered(IMapIcon coord) { foreach (Serialized.FsmFlag flag2 in coord.Flags) { if (flag2.IsBool) { bool @bool = PlayerData.instance.GetBool(flag2.DataKey); bool flag = flag2.DataValue == "true"; if (@bool == flag) { return true; } } } return false; } public bool DoHierarchyParentsHideIcon(IMapIcon coord, Serialized.Hierarchy hierarchy) { if (hierarchy.Transforms[0].Controls.Name == coord.Id) { foreach (IMapIcon relevantParent in coord.RelevantParents) { if (!DisplayableLocation(relevantParent, checkSelf: false)) { return true; } } } return false; } public bool DoesHierarchyHaveReasonToHide(IMapIcon icon) { Serialized.Hierarchy hierarchy = icon.Hierarchy; bool checksSelfEnabled = icon.ChecksSelfEnabled; for (int num = hierarchy.Transforms.Count - 1; num >= 0; num--) { Serialized.Controls controls = hierarchy.Transforms[num].Controls; if (ActivatorHidesThis(hierarchy.Transforms, num)) { return true; } if (!string.IsNullOrEmpty(controls.CustomIntFlag) && PlayerData.instance.GetInt(controls.CustomIntFlag) >= controls.CustomIntValue) { return true; } if (!string.IsNullOrEmpty(controls.DisableIfFalse) && !PlayerData.instance.GetBool(controls.DisableIfFalse)) { return true; } if (!string.IsNullOrEmpty(controls.DisableIfTrue) && PlayerData.instance.GetBool(controls.DisableIfTrue)) { return true; } if (!string.IsNullOrEmpty(controls.CustomBoolFlag) && PlayerData.instance.GetBool(controls.CustomBoolFlag)) { return true; } if (checksSelfEnabled && !controls.Enabled) { return true; } } if (DoHierarchyParentsHideIcon(icon, hierarchy)) { return true; } return false; } private bool ActivatorHidesThis(List<Serialized.TransformData> transforms, int startIndex) { Serialized.TransformData transformData = transforms[startIndex]; for (int num = transforms.Count - 1; num >= startIndex; num--) { Serialized.Controls controls = transforms[num].Controls; foreach (Serialized.QuestTestData item in controls.Quest) { if (item.SetOff == transformData.Controls.Name && item.IsFulfilled) { return true; } if (item.SetOn == transformData.Controls.Name && !item.IsFulfilled) { return true; } } foreach (Serialized.PlayerDataTest playerDataTest in controls.PlayerDataTests) { if (playerDataTest.SetOff == transformData.Controls.Name && playerDataTest.IsFulfilled) { return true; } if (playerDataTest.SetOn == transformData.Controls.Name && !playerDataTest.IsFulfilled) { return true; } } foreach (Serialized.ToolTestData item2 in controls.Tool) { if (item2.SetOff == transformData.Controls.Name && item2.IsFulfilled) { return true; } if (item2.SetOn == transformData.Controls.Name && !item2.IsFulfilled) { return true; } } } return false; } } public class MapTeleportMenu : MonoBehaviour { [CompilerGenerated] private sealed class <SetPositionAfterSceneLoadFinishes>d__13 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public MapTeleportMenu <>4__this; public Vector2 positionInScene; public object sourceObject; private CameraController <cameraController>5__2; private int <i>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SetPositionAfterSceneLoadFinishes>d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <cameraController>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_007e: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: 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_010b: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: 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_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) //IL_0173: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: 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_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; MapTeleportMenu mapTeleportMenu = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; goto IL_0046; case 1: <>1__state = -1; goto IL_0046; case 2: <>1__state = -1; goto IL_0067; case 3: { <>1__state = -1; <i>5__3++; goto IL_0286; } IL_0046: if (mapTeleportMenu.IsTeleporting) { <>2__current = null; <>1__state = 1; return true; } goto IL_0067; IL_0067: if (!GameManager.instance.HasFinishedEnteringScene) { <>2__current = null; <>1__state = 2; return true; } Extensions.SetPosition2D(HeroController.instance.transform, positionInScene + new Vector2(0f, 2.5f)); if (sourceObject is IMapIcon hierarchyHolder) { Vector2 targetPosition = positionInScene; GameObject val = GameObject.Find(hierarchyHolder.FullPath()); if ((Object)(object)val != (Object)null) { GameObject val2 = val; Transform val3 = val.transform.Find("Solid"); if (Object.op_Implicit((Object)(object)val3)) { val2 = ((Component)val3).gameObject; } BoxCollider2D val4 = default(BoxCollider2D); Bounds bounds; if (val2.TryGetComponent<BoxCollider2D>(ref val4)) { bounds = ((Collider2D)val4).bounds; targetPosition = Vector2.op_Implicit(((Bounds)(ref bounds)).center); } Collider2D val5 = default(Collider2D); if (Object.op_Implicit((Object)(object)val.GetComponentInChildren<ReceivedDamageProxy>()) && val.TryGetComponent<Collider2D>(ref val5)) { bounds = val5.bounds; targetPosition = Vector2.op_Implicit(((Bounds)(ref bounds)).center); } Transform val6 = val.transform.Find("explode rock"); if (Object.op_Implicit((Object)(object)val6)) { targetPosition = Vector2.op_Implicit(val6.position); } Lever componentInChildren = val.GetComponentInChildren<Lever>(); if (Object.op_Implicit((Object)(object)componentInChildren) && ((Component)componentInChildren).TryGetComponent<Collider2D>(ref val5)) { bounds = val5.bounds; targetPosition = Vector2.op_Implicit(((Bounds)(ref bounds)).center); } } Teleport2D.TeleportToNearestClearSpot(((Component)HeroController.instance).gameObject, targetPosition); if ((Object)(object)val != (Object)null) { Transform val7 = val.transform.Find("Dir Check"); if ((Object)(object)val7 != (Object)null) { Transform transform = ((Component)HeroController.instance).gameObject.transform; transform.position += ((Component)val7).transform.localPosition; } } } <cameraController>5__2 = Object.FindFirstObjectByType<CameraController>(); if (!Object.op_Implicit((Object)(object)<cameraController>5__2)) { break; } <i>5__3 = 0; goto IL_0286; IL_0286: if (<i>5__3 < 10) { <cameraController>5__2.PositionToHeroInstant(true); Extensions.SetPosition2D(((Component)<cameraController>5__2).transform, Vector2.op_Implicit(HeroController.instance.transform.position)); <>2__current = null; <>1__state = 3; return true; } break; } HeroController.instance.RegainControl(true); HeroController.instance.ResetVelocity(); InventoryMapManager val8 = Object.FindFirstObjectByType<InventoryMapManager>((FindObjectsInactive)1); if (Object.op_Implicit((Object)(object)val8)) { val8.LockedZoomUndo(); } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <StartRoutine_SwitchMap>d__9 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public MapTeleportMenu <>4__this; public GameMap map; public string scenePath; public SceneInfo sceneInfo; private InventoryPaneList <inventory>5__2; private PlayMakerFSM <inventoryFsm>5__3; private InventoryMapManager <mapManager>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StartRoutine_SwitchMap>d__9(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <inventory>5__2 = null; <inventoryFsm>5__3 = null; <mapManager>5__4 = null; <>1__state = -2; } private bool MoveNext() { //IL_0143: 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_0154: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0176: 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_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Expected O, but got Unknown int num = <>1__state; MapTeleportMenu mapTeleportMenu = <>4__this; switch (num) { default: return false; case 0: { <>1__state = -1; mapTeleportMenu.IsTeleporting = true; <inventory>5__2 = Object.FindFirstObjectByType<InventoryPaneList>(); <inventoryFsm>5__3 = PlayMakerFSM.FindFsmOnGameObject(((Component)<inventory>5__2).gameObject, "Inventory Control"); InventoryMapManager obj = Object.FindFirstObjectByType<InventoryMapManager>(); PlayMakerFSM.FindFsmOnGameObject(((Component)obj).gameObject, "Inventory Proxy"); PlayMakerFSM.FindFsmOnGameObject(((Component)obj).gameObject, "UI Control").SetState("Zoom Out"); <mapManager>5__4 = Object.FindFirstObjectByType<InventoryMapManager>((FindObjectsInactive)1); goto IL_00aa; } case 1: <>1__state = -1; goto IL_00aa; case 2: { <>1__state = -1; break; } IL_00aa: if (<mapManager>5__4.isZoomed) { <>2__current = null; <>1__state = 1; return true; } if (!Object.op_Implicit((Object)(object)<inventoryFsm>5__3)) { Mod.Log.LogError((object)"Didn't find inventory?!"); } <inventoryFsm>5__3.SetState("Close"); map.CloseQuickMap(); break; } if (Extensions.GetFsmBoolIfExists(<inventoryFsm>5__3, "Open")) { <>2__current = null; <>1__state = 2; return true; } Mod.Log.LogInfo((object)("Teleporting!: " + scenePath)); GameManager.instance.SetPausedState(false); GameManager.instance.BeginSceneTransition(new SceneLoadInfo { SceneName = scenePath, EntryGateName = sceneInfo.TransitionGates[0], EntryDelay = 0f, PreventCameraFadeOut = true, WaitForSceneTransitionCameraFade = false, EntrySkip = true, IsFirstLevelForPlayer = false }); GameManager.instance.SetPausedState(false); <inventory>5__2.allowSwapping = FsmBool.op_Implicit(true); <inventory>5__2.CloseBlocked = false; mapTeleportMenu.IsTeleporting = false; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static bool ShowTeleportationMenu; public MapMarkerRenderer _mapMarkerRenderer; private Rect _windowSize = new Rect(0f, 0f, 500f, 1080f); private Vector2 _debugScrollPosition; public bool IsTeleporting; private IMapIcon _latestCoord; private void Update() { if (Object.op_Implicit((Object)(object)GameManager.UnsafeInstance)) { ConfigEntry<bool> allowTeleports = ModOptions.AllowTeleports; if (allowTeleports == null || !allowTeleports.Value) { ShowTeleportationMenu = false; } else if (Utils.JustPressed((Key)15)) { ShowTeleportationMenu = !ShowTeleportationMenu; } } } private void OnGUI() { //IL_0029: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) if (!ShowTeleportationMenu) { return; } List<IMapIcon> rendered = _mapMarkerRenderer.Rendered; Dictionary<string, ModMapData.MappedScene> scenes = ModMapData.Scenes; int num = 23; float num2 = rendered.Count * num; _debugScrollPosition = GUI.BeginScrollView(_windowSize, _debugScrollPosition, new Rect(0f, 0f, ((Rect)(ref _windowSize)).width + 30f, num2)); int num3 = 0; if (!Utils.TryGetMap(out var map) || SceneData.instance == null) { GUI.EndScrollView(); return; } GUIStyle val = new GUIStyle(GUI.skin.button); val.fontSize = 20; val.alignment = (TextAnchor)3; GameMapScene val3 = default(GameMapScene); GameObject val4 = default(GameObject); Vector2 val5 = default(Vector2); foreach (IMapIcon item in from x in rendered orderby x.Hierarchy.CleanScenePath, x.Id, x.Details select x) { if (GUI.Button(new Rect(0f, (float)(num3++ * num), ((Rect)(ref _windowSize)).width - 20f, (float)num), item.Hierarchy.CleanScenePath + " - " + item.Id, val) && MapUtils.TryGetMapCache(item, out var mapCache)) { MapCache val2 = mapCache[0]; map.GetSceneInfo(val2.sceneName, map.GetMapZoneFromSceneName(val2.sceneName), ref val3, ref val4, ref val5); if (scenes.TryGetValue(item.Hierarchy.MapScenePath ?? item.Hierarchy.ActualScenePath, out var value)) { map.GetMapPosition(item.WorldPosition(), val3, val4, val5, value.Size); TryTeleportingTo(item); } } } GUI.EndScrollView(); } public void TryTeleportingTo(IMapIcon coord) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (TryTeleportingToScene(coord.Hierarchy.CleanScenePath)) { _latestCoord = coord; ((MonoBehaviour)this).StartCoroutine(SetPositionAfterSceneLoadFinishes(coord.WorldPosition(), coord)); } } public static bool TryTeleportingToScene(string scenePath) { if (!Utils.TryGetMap(out var map)) { return false; } if (!SceneTeleportMap.GetTeleportMap().TryGetValue(scenePath, out var value)) { Mod.Log.LogWarning((object)("Could not find scene: " + scenePath)); return false; } MapTeleportMenu mapTeleportMenu = Object.FindFirstObjectByType<MapTeleportMenu>(); ((MonoBehaviour)mapTeleportMenu).StartCoroutine(mapTeleportMenu.StartRoutine_SwitchMap(scenePath, map, value)); return true; } [IteratorStateMachine(typeof(<StartRoutine_SwitchMap>d__9))] private IEnumerator StartRoutine_SwitchMap(string scenePath, GameMap map, SceneInfo sceneInfo) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <StartRoutine_SwitchMap>d__9(0) { <>4__this = this, scenePath = scenePath, map = map, sceneInfo = sceneInfo }; } private bool TryGetInScenePosition(Vector3 mapPosition, string scenePath, out Vector2 posInScene) { //IL_0001: 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_004b: 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_007c: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) //IL_0097: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b8: 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) //IL_00d2: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) posInScene = default(Vector2); if (!Utils.TryGetMap(out var map)) { return false; } string key = "Assets/Scenes/Hornet/" + scenePath + ".unity"; if (!ModMapData.Scenes.TryGetValue(key, out var value)) { return false; } if (!SceneTeleportMap.GetTeleportMap().TryGetValue(scenePath, out var value2)) { return false; } MapZone mapZone = value2.MapZone; GameMapScene val = default(GameMapScene); GameObject val2 = default(GameObject); Vector2 val3 = default(Vector2); map.GetSceneInfo(scenePath, mapZone, ref val, ref val2, ref val3); if (!Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val.BoundsSprite)) { return false; } Vector3 val4 = ((Component)val).transform.InverseTransformPoint(mapPosition); Bounds bounds = val.BoundsSprite.bounds; Vector3 min = ((Bounds)(ref bounds)).min; Vector3 val5 = val4 - min; Vector2 val6 = default(Vector2); ((Vector2)(ref val6))..ctor(val5.x / ((Bounds)(ref bounds)).size.x, val5.y / ((Bounds)(ref bounds)).size.y); posInScene = Extensions.MultiplyElements(val6, value.Size); return true; } public void TryTeleportingTo(Transform mapPin) { //IL_003c: 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_0087: Unknown result type (might be due to invalid IL or missing references) if (!Utils.TryGetMap(out var _)) { return; } if (((Object)mapPin).name.StartsWith("SavedFlea_")) { string scenePath = ((Object)mapPin).name.Substring("SavedFlea_".Length); if (TryTeleportingToScene(scenePath) && TryGetInScenePosition(mapPin.position, scenePath, out var posInScene)) { ((MonoBehaviour)this).StartCoroutine(SetPositionAfterSceneLoadFinishes(posInScene)); } return; } GameMapScene val = null; Transform val2 = mapPin; while (Object.op_Implicit((Object)(object)val2) && !((Component)val2).TryGetComponent<GameMapScene>(ref val)) { val2 = val2.parent; } if (Object.op_Implicit((Object)(object)val)) { TryTeleportingTo(val, mapPin.position); } } public void TryTeleportingTo(GameMapScene mapScene, Vector3 mapPosition, bool withPreciseTeleport = true, object sourceObject = null) { //IL_0011: 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) //IL_0060: 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_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) if (TryTeleportingToScene(mapScene.Name)) { if (withPreciseTeleport && TryGetInScenePosition(mapPosition, mapScene.Name, out var posInScene)) { ((MonoBehaviour)this).StartCoroutine(SetPositionAfterSceneLoadFinishes(posInScene, sourceObject)); } return; } string name = mapScene.Name; int num = name.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase); if (num == -1) { return; } name = name.Substring(0, num); if (TryTeleportingToScene(name)) { if (withPreciseTeleport && TryGetInScenePosition(mapPosition, name, out var posInScene2)) { ((MonoBehaviour)this).StartCoroutine(SetPositionAfterSceneLoadFinishes(posInScene2, sourceObject)); } return; } num = name.LastIndexOf("_", StringComparison.InvariantCultureIgnoreCase); if (num != -1) { name = name.Substring(0, num); if (TryTeleportingToScene(name) && withPreciseTeleport && TryGetInScenePosition(mapPosition, name, out var posInScene3)) { ((MonoBehaviour)this).StartCoroutine(SetPositionAfterSceneLoadFinishes(posInScene3, sourceObject)); } } } [IteratorStateMachine(typeof(<SetPositionAfterSceneLoadFinishes>d__13))] private IEnumerator SetPositionAfterSceneLoadFinishes(Vector2 positionInScene, object sourceObject = null) { //IL_000e: 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) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SetPositionAfterSceneLoadFinishes>d__13(0) { <>4__this = this, positionInScene = positionInScene, sourceObject = sourceObject }; } private static bool TryGetClosestRespawnPoint(Vector2 positionInScene, out HazardRespawnMarker respawnPoint) { //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) respawnPoint = null; HazardRespawnMarker[] array = Object.FindObjectsByType<HazardRespawnMarker>((FindObjectsInactive)0, (FindObjectsSortMode)0); if (array.Length != 0) { respawnPoint = array.OrderBy((HazardRespawnMarker x) => Vector2.Distance(Vector2.op_Implicit(((Component)x).transform.position), positionInScene)).First(); return true; } return false; } } public static class Teleport2D { private static readonly Collider2D[] _overlapBuffer = (Collider2D[])(object)new Collider2D[64]; public static void TeleportToNearestClearSpot(GameObject myCharacter, Vector2 targetPosition) { //IL_0010: 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_002e: 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) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_00e7: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_010f: Unknown result type (might be due to invalid IL or missing references) Rigidbody2D rb2d = HeroController.instance.rb2d; Bounds bounds = HeroController.instance.Bounds; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0.02f, 0.02f, 0f); Vector2 size = Vector2.op_Implicit(((Bounds)(ref bounds)).size + val); float z = myCharacter.transform.eulerAngles.z; Collider2D[] selfColliders = (Collider2D[])(object)new Collider2D[1] { HeroController.instance.col2d }; if (IsClear(targetPosition, size, z, selfColliders)) { ApplyTeleport(rb2d, targetPosition); return; } float num = Mathf.Max(new float[1] { 0.2f }); int num2 = 50; int num3 = 0; for (int i = 1; i <= num2; i++) { float num4 = (float)i * num; int num5 = Mathf.Max(12, Mathf.CeilToInt(MathF.PI * 2f * num4 / num)); float num6 = MathF.PI * 2f / (float)num5; for (int j = 0; j < num5; j++) { float num7 = num6 * (float)j; Vector2 val2 = targetPosition + new Vector2(Mathf.Cos(num7), Mathf.Sin(num7)) * num4; num3++; if (IsClear(val2, size, z, selfColliders)) { ApplyTeleport(rb2d, val2); return; } } } static void ApplyTeleport(Rigidbody2D rigidbody, Vector2 target) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) Extensions.SetPosition2D(((Component)rigidbody).transform, target); } } private static bool IsClear(Vector2 position, Vector2 size, float angleZ, Collider2D[] selfColliders) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) int num = Physics2D.OverlapBoxNonAlloc(position, size, angleZ, _overlapBuffer); if (num == 0) { return true; } for (int i = 0; i < num; i++) { Collider2D val = _overlapBuffer[i]; if ((Object)(object)val == (Object)null || val.isTrigger) { continue; } bool flag = false; foreach (Collider2D val2 in selfColliders) { if ((Object)(object)val == (Object)(object)val2) { flag = true; break; } Rigidbody2D attachedRigidbody = val.attachedRigidbody; Rigidbody2D attachedRigidbody2 = val2.attachedRigidbody; if ((Object)(object)attachedRigidbody != (Object)null && (Object)(object)attachedRigidbody2 != (Object)null && (Object)(object)attachedRigidbody == (Object)(object)attachedRigidbody2) { flag = true; break; } if (((Component)val).transform.IsChildOf(((Component)val2).transform) || ((Component)val2).transform.IsChildOf(((Component)val).transform)) { flag = true; break; } } if (!flag) { return false; } } return true; } } public class MarkerAnimation : MonoBehaviour { [CompilerGenerated] private sealed class <DoAnimation>d__5 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public MarkerAnimation <>4__this; private float <duration1>5__2; private float <duration2>5__3; private float <time>5__4; private float <bigScale>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoAnimation>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_007d: 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_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; MarkerAnimation markerAnimation = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <duration1>5__2 = 0.7f; <duration2>5__3 = 0.7f; <time>5__4 = 0f; <bigScale>5__5 = 10f; goto IL_00bb; case 1: <>1__state = -1; goto IL_00bb; case 2: { <>1__state = -1; break; } IL_00bb: if (<time>5__4 < <duration1>5__2) { <time>5__4 += Time.unscaledDeltaTime; float t = <time>5__4 / <duration1>5__2; ((Component)markerAnimation).transform.localScale = Vector3.one * Mathf.Lerp(markerAnimation.GetDesiredScale(), <bigScale>5__5, markerAnimation.PunchyFallEase(t)); <>2__current = null; <>1__state = 1; return true; } <time>5__4 = 0f; break; } if (<time>5__4 < <duration2>5__3) { <time>5__4 += Time.unscaledDeltaTime; float t2 = <time>5__4 / <duration2>5__3; ((Component)markerAnimation).transform.localScale = Vector3.one * Mathf.Lerp(markerAnimation.GetDesiredScale(), <bigScale>5__5, 1f - markerAnimation.PunchyFallEase(t2)); <>2__current = null; <>1__state = 2; return true; } ((Component)markerAnimation).transform.localScale = Vector3.one * markerAnimation.GetDesiredScale(); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private Coroutine _activeAnimation; public bool IsHUDPin; private void OnEnable() { _activeAnimation = ((MonoBehaviour)this).StartCoroutine(DoAnimation()); } private void OnDisable() { if (_activeAnimation != null) { ((MonoBehaviour)this).StopCoroutine(_activeAnimation); } } public void DoAnimationRoutine() { if (_activeAnimation != null) { ((MonoBehaviour)this).StopCoroutine(_activeAnimation); } _activeAnimation = ((MonoBehaviour)this).StartCoroutine(DoAnimation()); } [IteratorStateMachine(typeof(<DoAnimation>d__5))] private IEnumerator DoAnimation() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DoAnimation>d__5(0) { <>4__this = this }; } private float PunchyFallEase(float t) { t = Mathf.Clamp01(t); return 1f - Mathf.Pow(1f - t, 5f); } public void ClearAnimation() { //IL_001a: 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) if (_activeAnimation != null) { ((MonoBehaviour)this).StopCoroutine(_activeAnimation); } ((Component)this).transform.localScale = Vector3.one * GetDesiredScale(); } private float GetDesiredScale() { if (IsHUDPin) { return 1f; } return ModOptions.SizeForMapPins.Value; } } public class SceneMapMarker : MonoBehaviour { public Vector3 InSceneMarkerPosition; public float RemainingTime; public static GameObject Create(IMapIcon icon, GameObject template) { //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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_006a: 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) GameObject obj = Object.Instantiate<GameObject>(template, Vector3.zero, Quaternion.identity); ((Object)obj).name = "Scene Map Marker Arrow"; obj.SetActive(true); SpriteRenderer componentInChildren = obj.GetComponentInChildren<SpriteRenderer>(); ((Component)componentInChildren).gameObject.layer = 0; icon.Stylize(((Component)componentInChildren).gameObject, componentInChildren); Transform transform = ((Component)componentInChildren).transform; transform.localScale *= 2f; SceneMapMarker sceneMapMarker = obj.AddComponent<SceneMapMarker>(); sceneMapMarker.InSceneMarkerPosition = Vector2.op_Implicit(icon.WorldPosition()); sceneMapMarker.RemainingTime = ModOptions.TimeForSceneMapMarkers.Value; MarkerAnimation markerAnimation = default(MarkerAnimation); if (obj.TryGetComponent<MarkerAnimation>(ref markerAnimation)) { markerAnimation.IsHUDPin = true; markerAnimation.ClearAnimation(); } return obj; } private void LateUpdate() { //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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_007d: 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_00a7: 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_00b3: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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) if (!Object.op_Implicit((Object)(object)HeroController.UnsafeInstance)) { return; } Vector3 position = HeroController.UnsafeInstance.transform.position; Vector3 val = position; val.z = InSceneMarkerPosition.z; float num = 2f; float num2 = 1.5f; float num3 = num + num2; float num4 = num + num2 * Mathf.Sin(Time.unscaledTime * 2f * MathF.PI); ConfigEntry<bool> sceneMapMarkersAnimate = ModOptions.SceneMapMarkersAnimate; if (sceneMapMarkersAnimate == null || !sceneMapMarkersAnimate.Value) { num4 = num; } float num5 = Vector3.Distance(InSceneMarkerPosition, position); float num6 = Mathf.InverseLerp(num3 * 3f, num3, num5); num4 = Mathf.Lerp(num4, num3, num6); Vector3 position2 = Vector3.MoveTowards(position, InSceneMarkerPosition, num4); position2.z = position.z; ((Component)this).transform.position = position2; if (RemainingTime > 0f && !Utils.IsMapOpen()) { RemainingTime -= Time.deltaTime; float num7 = RemainingTime / 2f; float num8 = Mathf.InverseLerp(0f, 0.3f, num7); ((Component)this).transform.localScale = Vector3.one * num8; if (RemainingTime <= 0f) { Object.Destroy((Object)(object)((Component)this).gameObject); } } } } public class MapFilters { public static IMapFilter Geo = new SimpleMapFilter("Geo") { DisplayNameSingle = "Rosaries", DisplayNameCategory = "Rosaries", Style = MapStyles.Geo }; public static IMapFilter MossBerry = new SimpleMapFilter("MossBerry") { DisplayNameSingle = "Moss berry", DisplayNameCategory = "Moss berries", Style = MapStyles.MossBerry, OverridesTexture = true }; public static IMapFilter PickupItem = new SimpleMapFilter("PickupItem") { DisplayNameSingle = "Item", DisplayNameCategory = "Items", Style = MapStyles.Keys }; public static IMapFilter PickupItem_ToolMetal = new SimpleMapFilter("PickupItemToolMetal") { DisplayNameSingle = "Craft metal", DisplayNameCategory = "Craft metal", Style = MapStyles.CraftMetal }; public static IMapFilter PickupItem_Relic = new SimpleMapFilter("PickupItemRelic") { DisplayNameSingle = "Relic", DisplayNameCategory = "Relics", Style = MapStyles.Relic }; public static IMapFilter PickupItem_Collectable = new SimpleMapFilter("PickupItemCollectable") { DisplayNameSingle = "Collectable", DisplayNameCategory = "Collectables", Style = MapStyles.Secret }; public static IMapFilter PickupItem_Lockets = new SimpleMapFilter("PickupItemLockets") { DisplayNameSingle = "Memory locket", DisplayNameCategory = "Memory lockets", Style = MapStyles.Locket }; public static IMapFilter PickupItem_ToolPouchUpgrades = new SimpleMapFilter("PickupItemToolkitUpgrades") { DisplayNameSingle = "Toolkit upgrade", DisplayNameCategory = "Toolkit upgrades", Style = MapStyles.Toolkit }; public static IMapFilter PickupItem_Tool = new SimpleMapFilter("PickupItemTool") { DisplayNameSingle = "Tool", DisplayNameCategory = "Tools", Style = MapStyles.Tools }; public static IMapFilter PickupItem_Memento = new SimpleMapFilter("PickupItemMemento") { DisplayNameSingle = "Memento", DisplayNameCategory = "Mementos", Style = MapStyles.Memento }; public static IMapFilter PickupItem_Materium = new SimpleMapFilter("PickupItemMaterium") { DisplayNameSingle = "Materium", DisplayNameCategory = "Materium", Style = MapStyles.Secret }; public static IMapFilter Secret = new SimpleMapFilter("Secret") { DisplayNameSingle = "Secret", DisplayNameCategory = "Secrets", Style = new EmbeddedResourceBasedIconStyle("Resources/Secret.png", 0.5f).Show }; public static IMapFilter HeartPiece = new SimpleMapFilter("HeartPiece") { DisplayNameSingle = "Mask piece", DisplayNameCategory = "Mask pieces", Style = MapStyles.HeartPiece, OverridesTexture = true }; public static IMapFilter BreakableWall = new SimpleMapFilter("BreakableWall") { DisplayNameSingle = "Breakable Wall", DisplayNameCategory = "Breakable wall", Style = new EmbeddedResourceBasedIconStyle("Resources/BreakableWall.png", 0.5f).Show }; public static IMapFilter Lock = new SimpleMapFilter("Lock") { DisplayNameSingle = "Lock", DisplayNameCategory = "Locks", Style = new EmbeddedResourceBasedIconStyle("Resources/Lock.png", 0.5f).Show }; public static IMapFilter Battle = new SimpleMapFilter("Battle") { DisplayNameSingle = "Battle", DisplayNameCategory = "Battles", Style = new EmbeddedResourceBasedIconStyle("Resources/Battle.png", 0.75f).Show }; public static IMapFilter ExplodeWall = new SimpleMapFilter("ExplodeWall") { DisplayNameSingle = "Explodable Wall", DisplayNameCategory = "Explodable walls", Style = new EmbeddedResourceBasedIconStyle("Resources/ExplodeWall.png", 0.5f).Show }; public static IMapFilter Collapser = new SimpleMapFilter("Collapser") { DisplayNameSingle = "Collapser", DisplayNameCategory = "Collapsers", Style = new EmbeddedResourceBasedIconStyle("Resources/Collapser.png", 0.5f).Show }; public static IMapFilter Misc = new SimpleMapFilter("Misc") { DisplayNameSingle = "Misc", DisplayNameCategory = "Misc", Style = new EmbeddedResourceBasedIconStyle("Resources/Misc.png", 0.75f).Show }; public static IMapFilter SpoolPiece = new SimpleMapFilter("SpoolPiece") { DisplayNameSingle = "Spool fragment", DisplayNameCategory = "Spool fragments", Style = MapStyles.SpoolPiece, OverridesTexture = true }; public static IMapFilter Lever = new SimpleMapFilter("Lever") { DisplayNameSingle = "Lever", DisplayNameCategory = "levers", Style = new EmbeddedResourceBasedIconStyle("Resources/Lever.png", 0.5f).Show }; public static IMapFilter PollipHeart = new SimpleMapFilter("PollipHeart") { DisplayNameSingle = "Pollip heart", DisplayNameCategory = "Pollip hearts", Style = new EmbeddedResourceBasedIconStyle("Resources/PollipHeart.png", 0.65f).Show }; public static IMapFilter ShellShard = new SimpleMapFilter("ShellShard") { DisplayNameSingle = "Shell shards", DisplayNameCategory = "Shell shards", Style = new AssetBundleBasedIconStyle("Shell_shard_icon", 1.5f).Show }; public static IMapFilter RingLineSwitch = new SimpleMapFilter("RingLineSwitch") { DisplayNameSingle = "Ring lever", DisplayNameCategory = "Ring