Decompiled source of InfernoMap v0.1.2

InfernoMap.dll

Decompiled 21 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("InfernoMap")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("InfernoMap")]
[assembly: AssemblyTitle("InfernoMap")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace InfernoMap;

public class MapOverlay : MonoBehaviour
{
	private readonly List<Vector2> _trail = new List<Vector2>();

	private Vector2 _playerPos;

	private Vector3 _worldPos;

	private float _headingDeg;

	private bool _hasPlayer;

	private bool _visible;

	private bool _initialised;

	private bool _inputErrorLogged;

	private string _lastScene = "";

	private string _camName = "none";

	private float _pixelsPerUnit;

	private float _nextLogTime;

	private int _updateCalls;

	private int _guiCalls;

	private bool _uguiTried;

	private bool _uguiOk;

	private bool _imguiBroken;

	private const int Res = 128;

	private GameObject _canvasGo;

	private Texture2D _tex;

	private Color32[] _px;

	private float _nextDraw;

	public MapOverlay(IntPtr ptr)
		: base(ptr)
	{
	}

	private static Camera FindCamera()
	{
		Camera main = Camera.main;
		if ((Object)(object)main != (Object)null)
		{
			return main;
		}
		Il2CppReferenceArray<Camera> allCameras = Camera.allCameras;
		Camera val = null;
		if (allCameras != null)
		{
			for (int i = 0; i < ((Il2CppArrayBase<Camera>)(object)allCameras).Length; i++)
			{
				Camera val2 = ((Il2CppArrayBase<Camera>)(object)allCameras)[i];
				if (!((Object)(object)val2 == (Object)null) && ((Behaviour)val2).enabled && !((Object)(object)val2.targetTexture != (Object)null) && ((Object)(object)val == (Object)null || val2.depth > val.depth))
				{
					val = val2;
				}
			}
		}
		return val;
	}

	private Vector2 Project(Vector3 p)
	{
		//IL_001e: 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_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		if (!Plugin.UseXZPlane.Value)
		{
			return new Vector2(p.x, p.y);
		}
		return new Vector2(p.x, p.z);
	}

	private void HandleHotkeys()
	{
		try
		{
			Keyboard current = Keyboard.current;
			if (current != null)
			{
				if (((ButtonControl)current.f6Key).wasPressedThisFrame)
				{
					_visible = !_visible;
				}
				if (((ButtonControl)current.f7Key).wasPressedThisFrame)
				{
					_trail.Clear();
				}
				if (((ButtonControl)current.equalsKey).wasPressedThisFrame || ((ButtonControl)current.numpadPlusKey).wasPressedThisFrame)
				{
					_pixelsPerUnit = Mathf.Min(_pixelsPerUnit * 1.25f, 60f);
				}
				if (((ButtonControl)current.minusKey).wasPressedThisFrame || ((ButtonControl)current.numpadMinusKey).wasPressedThisFrame)
				{
					_pixelsPerUnit = Mathf.Max(_pixelsPerUnit / 1.25f, 0.5f);
				}
			}
		}
		catch (Exception ex)
		{
			if (!_inputErrorLogged)
			{
				_inputErrorLogged = true;
				Plugin.Logger.LogWarning((object)("Hotkeys unavailable: " + ex.Message));
			}
		}
	}

	private void BuildUgui()
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Expected O, but got Unknown
		//IL_00d1: 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_00fb: 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_011c: Unknown result type (might be due to invalid IL or missing references)
		_uguiTried = true;
		try
		{
			_canvasGo = new GameObject("InfernoMapCanvas");
			Object.DontDestroyOnLoad((Object)(object)_canvasGo);
			Canvas obj = _canvasGo.AddComponent<Canvas>();
			obj.renderMode = (RenderMode)0;
			obj.sortingOrder = 32000;
			GameObject val = new GameObject("InfernoMapImage");
			val.transform.SetParent(_canvasGo.transform, false);
			RawImage obj2 = val.AddComponent<RawImage>();
			((Graphic)obj2).raycastTarget = false;
			_tex = new Texture2D(128, 128, (TextureFormat)4, false);
			((Texture)_tex).filterMode = (FilterMode)0;
			((Texture)_tex).wrapMode = (TextureWrapMode)1;
			_px = (Color32[])(object)new Color32[16384];
			obj2.texture = (Texture)(object)_tex;
			float value = Plugin.PanelSize.Value;
			RectTransform rectTransform = ((Graphic)obj2).rectTransform;
			rectTransform.anchorMin = new Vector2(1f, 1f);
			rectTransform.anchorMax = new Vector2(1f, 1f);
			rectTransform.pivot = new Vector2(1f, 1f);
			rectTransform.anchoredPosition = new Vector2(-16f, -16f);
			rectTransform.sizeDelta = new Vector2(value, value);
			_canvasGo.SetActive(_visible);
			_uguiOk = true;
			_nextDraw = 0f;
			Plugin.Logger.LogInfo((object)"uGUI overlay created.");
		}
		catch (Exception ex)
		{
			_uguiOk = false;
			Plugin.Logger.LogWarning((object)("uGUI overlay failed, falling back to IMGUI: " + ex));
		}
	}

	private void SetPx(int x, int y, Color32 c)
	{
		//IL_0028: 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)
		if (x >= 0 && y >= 0 && x < 128 && y < 128)
		{
			_px[y * 128 + x] = c;
		}
	}

	private void Block(int x, int y, int s, Color32 c)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		for (int i = 0; i < s; i++)
		{
			for (int j = 0; j < s; j++)
			{
				SetPx(x + j, y + i, c);
			}
		}
	}

	private void RedrawTexture()
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: 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_0065: 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_0077: 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_00e8: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0101: 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_0111: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: 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_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		Color32 val = default(Color32);
		((Color32)(ref val))..ctor((byte)0, (byte)0, (byte)0, (byte)140);
		for (int i = 0; i < _px.Length; i++)
		{
			_px[i] = val;
		}
		Color32 c = (_hasPlayer ? new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, (byte)170) : new Color32(byte.MaxValue, (byte)90, (byte)60, (byte)230));
		for (int j = 0; j < 128; j++)
		{
			SetPx(j, 0, c);
			SetPx(j, 127, c);
			SetPx(0, j, c);
			SetPx(127, j, c);
		}
		if (_hasPlayer)
		{
			float num = _pixelsPerUnit * 128f / Plugin.PanelSize.Value;
			float num2 = 61f;
			int num3 = 64;
			int count = _trail.Count;
			for (int k = 0; k < count; k++)
			{
				Vector2 val2 = (_trail[k] - _playerPos) * num;
				if (!(Mathf.Abs(val2.x) > num2) && !(Mathf.Abs(val2.y) > num2))
				{
					float num4 = ((count > 1) ? ((float)k / (float)(count - 1)) : 1f);
					byte b = (byte)Mathf.Clamp(64f + 153f * num4, 0f, 255f);
					Block(num3 + (int)val2.x - 1, num3 + (int)val2.y - 1, 2, new Color32((byte)76, (byte)204, byte.MaxValue, b));
				}
			}
			Block(num3 - 2, num3 - 2, 5, new Color32(byte.MaxValue, (byte)64, (byte)51, byte.MaxValue));
			float num5 = _headingDeg * ((float)Math.PI / 180f);
			Vector2 val3 = default(Vector2);
			((Vector2)(ref val3))..ctor(Mathf.Sin(num5), Mathf.Cos(num5));
			for (int l = 1; l <= 3; l++)
			{
				float num6 = 4f + (float)l * 3f;
				Block(num3 + (int)(val3.x * num6) - 1, num3 + (int)(val3.y * num6) - 1, 2, new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue));
			}
		}
		_tex.SetPixels32(new Il2CppStructArray<Color32>(_px));
		_tex.Apply(false);
	}

	public void Update()
	{
		//IL_0073: 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_00d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: 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_0141: 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_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Unknown result type (might be due to invalid IL or missing references)
		//IL_0123: 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_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c6: Expected O, but got Unknown
		_updateCalls++;
		if (!_initialised)
		{
			_visible = Plugin.StartVisible.Value;
			_pixelsPerUnit = Plugin.PixelsPerUnit.Value;
			_initialised = true;
		}
		HandleHotkeys();
		if (!_uguiTried || (_uguiOk && (Object)(object)_canvasGo == (Object)null))
		{
			BuildUgui();
		}
		if (Plugin.ClearOnSceneChange.Value)
		{
			Scene activeScene = SceneManager.GetActiveScene();
			string name = ((Scene)(ref activeScene)).name;
			if (name != _lastScene)
			{
				_lastScene = name;
				_trail.Clear();
			}
		}
		Camera val = FindCamera();
		if ((Object)(object)val == (Object)null)
		{
			_hasPlayer = false;
			_camName = "none";
		}
		else
		{
			Transform transform = ((Component)val).transform;
			_worldPos = transform.position;
			_headingDeg = transform.eulerAngles.y;
			_camName = ((Object)val).name;
			Vector2 val2 = Project(_worldPos);
			float value = Plugin.ClearOnJumpDistance.Value;
			if (value > 0f && _hasPlayer && Vector2.Distance(_playerPos, val2) > value)
			{
				_trail.Clear();
			}
			_playerPos = val2;
			_hasPlayer = true;
			if (_trail.Count == 0 || Vector2.Distance(_trail[_trail.Count - 1], val2) >= Plugin.BreadcrumbSpacing.Value)
			{
				_trail.Add(val2);
				int value2 = Plugin.MaxBreadcrumbs.Value;
				if (_trail.Count > value2)
				{
					_trail.RemoveRange(0, _trail.Count - value2);
				}
			}
		}
		if (_uguiOk && (Object)(object)_canvasGo != (Object)null)
		{
			try
			{
				if (_canvasGo.activeSelf != _visible)
				{
					_canvasGo.SetActive(_visible);
				}
				if (_visible && Time.unscaledTime >= _nextDraw)
				{
					_nextDraw = Time.unscaledTime + 0.1f;
					RedrawTexture();
				}
			}
			catch (Exception ex)
			{
				_uguiOk = false;
				Plugin.Logger.LogError((object)("uGUI redraw failed, falling back to IMGUI: " + ex));
			}
		}
		if (Plugin.DebugLog.Value && Time.unscaledTime >= _nextLogTime)
		{
			_nextLogTime = Time.unscaledTime + 5f;
			string text = (_uguiOk ? "uGUI" : (_imguiBroken ? "none" : "IMGUI"));
			ManualLogSource logger = Plugin.Logger;
			bool flag = default(bool);
			BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(72, 10, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[status] scene='");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(_lastScene);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("' camera='");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(_camName);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("' ");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("pos=(");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<float>(_worldPos.x, "F1");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(",");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<float>(_worldPos.y, "F1");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(",");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<float>(_worldPos.z, "F1");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(") trail=");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(_trail.Count);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" ");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("visible=");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<bool>(_visible);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" ui=");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(text);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" updates=");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(_updateCalls);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" onGUI=");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(_guiCalls);
			}
			logger.LogInfo(val3);
		}
	}

	public void OnGUI()
	{
		if (_uguiOk || _imguiBroken || !_visible)
		{
			return;
		}
		_guiCalls++;
		try
		{
			DrawImgui();
		}
		catch (Exception ex)
		{
			_imguiBroken = true;
			Plugin.Logger.LogError((object)("IMGUI drawing failed (this shows which Unity call is stripped): " + ex));
		}
	}

	private void DrawImgui()
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Invalid comparison between Unknown and I4
		//IL_005f: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_010d: 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_032e: Unknown result type (might be due to invalid IL or missing references)
		//IL_017c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_0192: Unknown result type (might be due to invalid IL or missing references)
		//IL_0197: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_025e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0268: 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_028a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0314: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_020e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0214: Unknown result type (might be due to invalid IL or missing references)
		//IL_022c: Unknown result type (might be due to invalid IL or missing references)
		Event current = Event.current;
		if (current == null || (int)current.type != 7)
		{
			return;
		}
		float value = Plugin.PanelSize.Value;
		Rect val = default(Rect);
		((Rect)(ref val))..ctor((float)Screen.width - value - 16f, 16f, value, value);
		Vector2 val2 = default(Vector2);
		((Vector2)(ref val2))..ctor(((Rect)(ref val)).x + value * 0.5f, ((Rect)(ref val)).y + value * 0.5f);
		Color color = GUI.color;
		GUI.color = new Color(0f, 0f, 0f, 0.55f);
		GUI.DrawTexture(val, (Texture)(object)Texture2D.whiteTexture);
		GUI.color = new Color(1f, 1f, 1f, 0.6f);
		GUI.DrawTexture(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, value, 2f), (Texture)(object)Texture2D.whiteTexture);
		GUI.DrawTexture(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).yMax - 2f, value, 2f), (Texture)(object)Texture2D.whiteTexture);
		GUI.DrawTexture(new Rect(((Rect)(ref val)).x, ((Rect)(ref val)).y, 2f, value), (Texture)(object)Texture2D.whiteTexture);
		GUI.DrawTexture(new Rect(((Rect)(ref val)).xMax - 2f, ((Rect)(ref val)).y, 2f, value), (Texture)(object)Texture2D.whiteTexture);
		if (_hasPlayer)
		{
			float num = value * 0.5f - 3f;
			int count = _trail.Count;
			for (int i = 0; i < count; i++)
			{
				Vector2 val3 = (_trail[i] - _playerPos) * _pixelsPerUnit;
				if (!(Mathf.Abs(val3.x) > num) && !(Mathf.Abs(val3.y) > num))
				{
					float num2 = ((count > 1) ? ((float)i / (float)(count - 1)) : 1f);
					GUI.color = new Color(0.3f, 0.8f, 1f, 0.25f + 0.6f * num2);
					GUI.DrawTexture(new Rect(val2.x + val3.x - 2f, val2.y - val3.y - 2f, 4f, 4f), (Texture)(object)Texture2D.whiteTexture);
				}
			}
			GUI.color = new Color(1f, 0.25f, 0.2f, 1f);
			GUI.DrawTexture(new Rect(val2.x - 4f, val2.y - 4f, 8f, 8f), (Texture)(object)Texture2D.whiteTexture);
			float num3 = _headingDeg * ((float)Math.PI / 180f);
			Vector2 val4 = default(Vector2);
			((Vector2)(ref val4))..ctor(Mathf.Sin(num3), Mathf.Cos(num3));
			GUI.color = Color.white;
			for (int j = 1; j <= 3; j++)
			{
				float num4 = 6f + (float)j * 4f;
				GUI.DrawTexture(new Rect(val2.x + val4.x * num4 - 2f, val2.y - val4.y * num4 - 2f, 4f, 4f), (Texture)(object)Texture2D.whiteTexture);
			}
		}
		GUI.color = color;
	}
}
[BepInPlugin("com.local.infernomap", "InfernoMap", "0.1.2")]
public class Plugin : BasePlugin
{
	internal static ManualLogSource Logger;

	internal static ConfigEntry<bool> StartVisible;

	internal static ConfigEntry<bool> UseXZPlane;

	internal static ConfigEntry<float> BreadcrumbSpacing;

	internal static ConfigEntry<int> MaxBreadcrumbs;

	internal static ConfigEntry<float> PixelsPerUnit;

	internal static ConfigEntry<float> PanelSize;

	internal static ConfigEntry<float> ClearOnJumpDistance;

	internal static ConfigEntry<bool> ClearOnSceneChange;

	internal static ConfigEntry<bool> DebugLog;

	public override void Load()
	{
		//IL_0155: Unknown result type (might be due to invalid IL or missing references)
		//IL_015b: Expected O, but got Unknown
		Logger = ((BasePlugin)this).Log;
		StartVisible = ((BasePlugin)this).Config.Bind<bool>("Map", "StartVisible", true, "Show the map when the game starts.");
		UseXZPlane = ((BasePlugin)this).Config.Bind<bool>("Map", "UseXZPlane", true, "True: top-down uses world X/Z (Unity default, Y is up). False: uses X/Y.");
		BreadcrumbSpacing = ((BasePlugin)this).Config.Bind<float>("Map", "BreadcrumbSpacing", 1f, "World distance between trail points.");
		MaxBreadcrumbs = ((BasePlugin)this).Config.Bind<int>("Map", "MaxBreadcrumbs", 4000, "Oldest trail points are dropped past this count.");
		PixelsPerUnit = ((BasePlugin)this).Config.Bind<float>("Map", "PixelsPerUnit", 6f, "Zoom level in screen pixels per world unit.");
		PanelSize = ((BasePlugin)this).Config.Bind<float>("Map", "PanelSize", 260f, "Map panel width/height in pixels.");
		ClearOnJumpDistance = ((BasePlugin)this).Config.Bind<float>("Maze", "ClearOnJumpDistance", 0f, "If you move farther than this in one frame (teleport/maze shift), clear the trail. 0 = off.");
		ClearOnSceneChange = ((BasePlugin)this).Config.Bind<bool>("Maze", "ClearOnSceneChange", true, "Clear the trail when the active scene changes.");
		DebugLog = ((BasePlugin)this).Config.Bind<bool>("Debug", "DebugLog", true, "Write a status line to the BepInEx log every 5 seconds.");
		ClassInjector.RegisterTypeInIl2Cpp<MapOverlay>();
		((BasePlugin)this).AddComponent<MapOverlay>();
		ManualLogSource logger = Logger;
		bool flag = default(bool);
		BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(55, 2, ref flag);
		if (flag)
		{
			((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("InfernoMap");
			((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" ");
			((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("0.1.2");
			((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" loaded. Hotkeys: F6 toggle, F7 clear trail, =/- zoom.");
		}
		logger.LogInfo(val);
	}
}
internal static class PluginInfo
{
	public const string Guid = "com.local.infernomap";

	public const string Name = "InfernoMap";

	public const string Version = "0.1.2";
}