using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("HTFMinimap")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("HTFMinimap")] [assembly: AssemblyTitle("HTFMinimap")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 HTFMinimap { public class Dial : MonoBehaviour { private static readonly Color Rule = new Color(1f, 1f, 1f, 0.92f); private static readonly Color Ink = Color.white; private static readonly Color Quiet = new Color(1f, 1f, 1f, 0.62f); private static readonly Color BoatMark = new Color(0.95f, 0.8f, 0.35f, 1f); private static readonly Color CrewMark = new Color(0.55f, 0.78f, 0.95f, 1f); private const float Rim = 0.9f; private float _next; private float _sayRangeUntil; private static float _saidFor = float.NaN; private static bool _noRounding; private static bool _lookedForChart; private static FieldInfo _chart; private static PropertyInfo _chartOpen; private void Update() { //IL_0005: 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_0052: Unknown result type (might be due to invalid IL or missing references) try { if (Input.GetKeyDown(MinimapPlugin.ToggleKey.Value)) { MinimapPlugin.ShowIt.Value = !MinimapPlugin.ShowIt.Value; } if (Wanted()) { if (Input.GetKeyDown(MinimapPlugin.CloserKey.Value)) { Zoom(0.7692308f); } if (Input.GetKeyDown(MinimapPlugin.WiderKey.Value)) { Zoom(1.3f); } Tick(); } } catch { } } private void Zoom(float by) { if (MinimapPlugin.AutoScale.Value) { MinimapPlugin.Fit.Value = Mathf.Clamp(MinimapPlugin.Fit.Value * by, 0.5f, 4f); } else { MinimapPlugin.Range.Value = Mathf.Clamp(MinimapPlugin.Range.Value * by, 25f, 400f); } _sayRangeUntil = Time.unscaledTime + 2f; } private void Tick() { //IL_0099: 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) float unscaledTime = Time.unscaledTime; if (unscaledTime < _next) { return; } _next = unscaledTime + 1f / (float)Mathf.Clamp(MinimapPlugin.Refresh.Value, 5, 60); Player localPlayer = Player.LocalPlayer; if ((Object)(object)localPlayer == (Object)null || (Object)(object)localPlayer.Transform == (Object)null) { return; } float yaw = 0f; if (MinimapPlugin.HeadingUp.Value) { Transform val = (((Object)(object)localPlayer.Camera != (Object)null) ? localPlayer.Camera.CamTransform : null); if ((Object)(object)val != (Object)null) { yaw = val.eulerAngles.y; } } Lens.Look(localPlayer.Transform.position, yaw, Reach(), MinimapPlugin.Detail.Value); } private static float Reach() { if (!MinimapPlugin.AutoScale.Value) { return MinimapPlugin.Range.Value; } float num = 0f; try { num = Island.IslandSize; } catch { } if (num < 5f || num > 2000f) { Said(num, MinimapPlugin.Range.Value, refused: true); return MinimapPlugin.Range.Value; } float num2 = Mathf.Clamp(num * MinimapPlugin.Fit.Value, 25f, 400f); Said(num, num2, refused: false); return num2; } private static void Said(float island, float reach, bool refused) { if (island != _saidFor) { _saidFor = island; if (refused) { MinimapPlugin.Log.LogWarning((object)("This island gives its size as " + island.ToString("0.#") + ", which is not a believable radius, so the minimap is using the fixed range of " + reach.ToString("0") + "m instead.")); } else { MinimapPlugin.Log.LogInfo((object)("This island gives its size as " + island.ToString("0.#") + "m, so the minimap reaches " + reach.ToString("0") + "m.")); } } } private void OnGUI() { //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) //IL_0080: 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_008b: 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_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: 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_0131: 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) try { if (Wanted() && Lens.Ready && !((Object)(object)Lens.Image == (Object)null)) { Skin.Ready(); float num = Mathf.Clamp(MinimapPlugin.Size.Value, 110, 460); float num2 = Mathf.Clamp(MinimapPlugin.Margin.Value, 0, 200); Rect face = default(Rect); ((Rect)(ref face))..ctor((float)Screen.width - num - num2, num2, num, num); Vector2 center = ((Rect)(ref face)).center; float num3 = ((Rect)(ref face)).width * 0.5f; Round(face, num3); Skin.Ring(center, num3, A(Rule)); if (MinimapPlugin.ShowCompass.Value) { DrawNorth(center, num3); } if (MinimapPlugin.MarkPlayers.Value) { DrawCrew(center, num3); } if (MinimapPlugin.MarkBoat.Value) { DrawBoat(center, num3); } DrawMe(center, num3); if (Time.unscaledTime < _sayRangeUntil) { Skin.Label(new Rect(((Rect)(ref face)).x, ((Rect)(ref face)).yMax - 30f, ((Rect)(ref face)).width, 18f), Mathf.RoundToInt(Reach()) + "m", A(Ink), (TextAnchor)4); } } } catch { } } private void Round(Rect face, float r) { //IL_0060: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Color val = default(Color); ((Color)(ref val))..ctor(1f, 1f, 1f, Alpha()); if (!_noRounding) { try { GUI.DrawTexture(face, Lens.Image, (ScaleMode)0, true, 0f, val, 0f, r); return; } catch (Exception ex) { _noRounding = true; MinimapPlugin.Log.LogWarning((object)("This Unity will not round the minimap's corners, so it will be square: " + ex.Message)); } } Color color = GUI.color; GUI.color = val; GUI.DrawTexture(face, Lens.Image, (ScaleMode)0, false); GUI.color = color; } private void DrawMe(Vector2 mid, float r) { //IL_0024: 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_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_006f: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: 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_00c2: 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_00d1: 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_00dd: 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_0094: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.LocalPlayer; if (!((Object)(object)localPlayer == (Object)null) && !((Object)(object)localPlayer.Transform == (Object)null) && Lens.ToDial(localPlayer.Transform.position, out var uv)) { Vector2 at = Place(mid, r, uv); Transform val = (((Object)(object)localPlayer.Camera != (Object)null) ? localPlayer.Camera.CamTransform : null); Vector3 val2 = (((Object)(object)val != (Object)null) ? val.forward : localPlayer.Transform.forward); val2.y = 0f; if (((Vector3)(ref val2)).sqrMagnitude < 0.0001f) { val2 = Vector3.forward; } Vector2 dir = Screenwise(Lens.Facing(((Vector3)(ref val2)).normalized)); Skin.Disc(at, 9f, A(new Color(0f, 0f, 0f, 0.6f))); Skin.Pointer(at, dir, 9f, A(Ink), solid: false); } } private void DrawBoat(Vector2 mid, float r) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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) //IL_008c: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0095: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_00d2: 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_00dd: 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_0126: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0152: 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_0155: 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) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: 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) Boat val = null; try { val = (((Object)(object)BoatManager.Instance != (Object)null) ? BoatManager.Boat : null); } catch { } if ((Object)(object)val == (Object)null) { return; } Vector3 val2 = (((Object)(object)val.VisualBoat != (Object)null) ? val.VisualBoat.position : ((!((Object)(object)val.HiddenPhysicsRig != (Object)null)) ? ((Component)val).transform.position : val.HiddenPhysicsRig.position)); if (Lens.ToDial(val2, out var uv) && !(((Vector2)(ref uv)).magnitude <= 0.9f)) { Vector2 val3 = Screenwise(((Vector2)(ref uv)).normalized); Vector2 at = mid + val3 * r * 0.9f; Skin.Disc(at, 7f, A(new Color(0f, 0f, 0f, 0.55f))); Skin.Pointer(at, val3, 7f, A(BoatMark), solid: true); Player localPlayer = Player.LocalPlayer; if (!((Object)(object)localPlayer == (Object)null) && !((Object)(object)localPlayer.Transform == (Object)null)) { float num = Vector3.Distance(new Vector3(localPlayer.Transform.position.x, 0f, localPlayer.Transform.position.z), new Vector3(val2.x, 0f, val2.z)); Vector2 val4 = mid + val3 * r * 0.7f; Skin.Label(new Rect(val4.x - 34f, val4.y - 8f, 68f, 16f), Mathf.RoundToInt(num) + "m", A(BoatMark), (TextAnchor)4); } } } private void DrawCrew(Vector2 mid, float r) { //IL_0043: 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_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_00b7: 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_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: 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_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) List list = null; try { list = PlayerManager.OtherPlayers; } catch { } if (list == null) { return; } for (int i = 0; i < list.Count; i++) { Player val = list[i]; if (!((Object)(object)val == (Object)null) && !((Object)(object)val.Transform == (Object)null) && Lens.ToDial(val.Transform.position, out var uv)) { if (((Vector2)(ref uv)).magnitude <= 0.9f) { Vector2 at = Place(mid, r, uv); Skin.Disc(at, 5f, A(new Color(0f, 0f, 0f, 0.55f))); Skin.Disc(at, 3.5f, A(CrewMark)); } else { Vector2 val2 = Screenwise(((Vector2)(ref uv)).normalized); Vector2 at2 = mid + val2 * r * 0.9f; Skin.Disc(at2, 6f, A(new Color(0f, 0f, 0f, 0.55f))); Skin.Pointer(at2, val2, 6f, A(CrewMark), solid: true); } } } } private void DrawNorth(Vector2 mid, float r) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_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) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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_0048: 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_005b: 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_007d: 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) //IL_008c: Unknown result type (might be due to invalid IL or missing references) Vector2 val = Screenwise(Lens.North()); Vector2 b = mid + val * (r - 3f); Skin.Line(mid + val * (r - 11f), b, A(Quiet), 2f); Vector2 val2 = mid + val * (r - 22f); Skin.Label(new Rect(val2.x - 14f, val2.y - 9f, 28f, 18f), "N", A(Quiet), (TextAnchor)4); } private static Vector2 Screenwise(Vector2 dial) { //IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references) return new Vector2(dial.x, 0f - dial.y); } private static Vector2 Place(Vector2 mid, float r, Vector2 uv) { //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) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return mid + Screenwise(uv) * r; } private static float Alpha() { return Mathf.Clamp01(MinimapPlugin.Opacity.Value); } private static Color A(Color c) { //IL_0000: 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_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_001e: Unknown result type (might be due to invalid IL or missing references) return new Color(c.r, c.g, c.b, c.a * Alpha()); } private static bool Wanted() { if (!MinimapPlugin.ShowIt.Value) { return false; } try { if (MainMenuManager.IsInMenu) { return false; } if (PauseManager.IsPaused) { return false; } if (LoadingManager.IsLoadingIn) { return false; } if (IslandManager.IsLoading) { return false; } if (!Player.LocalPlayerEnabled) { return false; } Player localPlayer = Player.LocalPlayer; if ((Object)(object)localPlayer == (Object)null || (Object)(object)localPlayer.Transform == (Object)null) { return false; } } catch { return false; } return !ChartIsOpen(); } private static bool ChartIsOpen() { if (!_lookedForChart) { _lookedForChart = true; try { Type type = AccessTools.TypeByName("ExtraIslands.WorldMap"); if (type != null) { _chart = AccessTools.Field(type, "Instance"); _chartOpen = AccessTools.Property(type, "IsOpen"); if (_chart != null && _chartOpen != null) { MinimapPlugin.Log.LogInfo((object)"The Custom Islands Loader is here, so the minimap will step aside while its chart is open."); } } } catch { } } if (_chart == null || _chartOpen == null) { return false; } try { object? value = _chart.GetValue(null); Object val = (Object)((value is Object) ? value : null); if (val == (Object)null) { return false; } return (bool)_chartOpen.GetValue(val, null); } catch { return false; } } } public static class Lens { private const float Above = 60f; private const float Below = 160f; private static Camera _cam; private static RenderTexture _rt; private static int _madeAt; public static Texture Image => (Texture)(object)_rt; public static bool Ready { get; private set; } public static bool Look(Vector3 centre, float yaw, float range, int detail) { //IL_0014: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) if (!Ensure(detail)) { return false; } ((Component)_cam).transform.position = new Vector3(centre.x, centre.y + 60f, centre.z); ((Component)_cam).transform.rotation = Quaternion.Euler(90f, yaw, 0f); _cam.orthographicSize = Mathf.Max(1f, range); _cam.nearClipPlane = 0.3f; _cam.farClipPlane = 220f; bool fog = RenderSettings.fog; try { RenderSettings.fog = false; _cam.Render(); Ready = true; return true; } catch (Exception ex) { MinimapPlugin.Log.LogWarning((object)("The minimap could not render: " + ex.Message)); Ready = false; return false; } finally { RenderSettings.fog = fog; } } public static bool ToDial(Vector3 world, out Vector2 uv) { //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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0050: 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_005d: Unknown result type (might be due to invalid IL or missing references) uv = Vector2.zero; if ((Object)(object)_cam == (Object)null || !Ready) { return false; } Vector3 val = ((Component)_cam).transform.InverseTransformPoint(world); float num = Mathf.Max(0.001f, _cam.orthographicSize); uv = new Vector2(val.x / num, val.y / num); return true; } public static Vector2 Facing(Vector3 worldDir) { //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_0023: 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_0047: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_cam == (Object)null) { return Vector2.up; } Vector3 val = ((Component)_cam).transform.InverseTransformDirection(worldDir); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(val.x, val.y); if (!(((Vector2)(ref val2)).sqrMagnitude < 0.0001f)) { return ((Vector2)(ref val2)).normalized; } return Vector2.up; } public static Vector2 North() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return Facing(Vector3.forward); } private static bool Ensure(int detail) { //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: 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_0090: 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_00a3: Expected O, but got Unknown //IL_00e5: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Expected O, but got Unknown //IL_00f8: 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_01bc: Expected O, but got Unknown detail = Mathf.Clamp(detail, 128, 512); if ((Object)(object)_rt != (Object)null && _madeAt != detail) { if ((Object)(object)_cam != (Object)null) { _cam.targetTexture = null; } _rt.Release(); Object.Destroy((Object)(object)_rt); _rt = null; Ready = false; } if ((Object)(object)_rt == (Object)null) { _rt = new RenderTexture(detail, detail, 16, (RenderTextureFormat)0) { name = "HTFMinimapView", hideFlags = (HideFlags)61, antiAliasing = 2, wrapMode = (TextureWrapMode)1, filterMode = (FilterMode)1 }; _rt.Create(); _madeAt = detail; if ((Object)(object)_cam != (Object)null) { _cam.targetTexture = _rt; } } if ((Object)(object)_cam != (Object)null) { return true; } try { GameObject val = new GameObject("HTFMinimapCamera") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)val); _cam = val.AddComponent(); ((Behaviour)_cam).enabled = false; _cam.orthographic = true; _cam.clearFlags = (CameraClearFlags)2; _cam.backgroundColor = new Color(0.05f, 0.13f, 0.18f, 1f); _cam.cullingMask = -1; Camera cam = _cam; cam.cullingMask &= -33; Camera cam2 = _cam; cam2.cullingMask &= -9; _cam.allowHDR = false; _cam.allowMSAA = true; _cam.useOcclusionCulling = false; _cam.depth = -100f; _cam.targetTexture = _rt; NoSky(val); return true; } catch (Exception ex) { MinimapPlugin.Log.LogError((object)("The minimap could not make its camera: " + ex.Message)); return false; } } private static void NoSky(GameObject go) { try { Type type = AccessTools.TypeByName("UnityEngine.Rendering.Universal.UniversalAdditionalCameraData"); if (!(type == null)) { Component obj = go.GetComponent(type) ?? go.AddComponent(type); PropertyInfo property = type.GetProperty("backgroundType"); if (property != null && property.CanWrite) { property.SetValue(obj, Enum.ToObject(property.PropertyType, 1), null); } PropertyInfo property2 = type.GetProperty("renderPostProcessing"); if (property2 != null && property2.CanWrite) { property2.SetValue(obj, false, null); } PropertyInfo property3 = type.GetProperty("renderShadows"); if (property3 != null && property3.CanWrite) { property3.SetValue(obj, false, null); } } } catch (Exception ex) { MinimapPlugin.Log.LogWarning((object)("Could not tell the minimap camera to leave the sky out: " + ex.Message)); } } } [BepInPlugin("yoxiui.htf.minimap", "HTF Minimap", "1.0.0")] [BepInProcess("How to Fish.exe")] public class MinimapPlugin : BaseUnityPlugin { public const string Id = "yoxiui.htf.minimap"; public static ManualLogSource Log; public static MinimapPlugin Self; public static ConfigEntry ShowIt; public static ConfigEntry ToggleKey; public static ConfigEntry Size; public static ConfigEntry Margin; public static ConfigEntry Opacity; public static ConfigEntry HeadingUp; public static ConfigEntry AutoScale; public static ConfigEntry Fit; public static ConfigEntry Range; public static ConfigEntry CloserKey; public static ConfigEntry WiderKey; public static ConfigEntry MarkBoat; public static ConfigEntry MarkPlayers; public static ConfigEntry ShowCompass; public static ConfigEntry Refresh; public static ConfigEntry Detail; public const float Closest = 25f; public const float Widest = 400f; private void Awake() { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Expected O, but got Unknown //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Expected O, but got Unknown //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Expected O, but got Unknown //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Expected O, but got Unknown //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Expected O, but got Unknown //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Expected O, but got Unknown //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_034f: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) Self = this; Log = ((BaseUnityPlugin)this).Logger; ShowIt = ((BaseUnityPlugin)this).Config.Bind("General", "Show the minimap", true, "Whether the minimap is on screen. The toggle key changes this while you play, and what you leave it on is what you get next time."); ToggleKey = ((BaseUnityPlugin)this).Config.Bind("General", "Toggle key", (KeyCode)110, "Shows and hides the minimap."); Size = ((BaseUnityPlugin)this).Config.Bind("Look", "Size", 200, new ConfigDescription("How big the minimap is on screen, in pixels.", (AcceptableValueBase)(object)new AcceptableValueRange(110, 460), Array.Empty())); Margin = ((BaseUnityPlugin)this).Config.Bind("Look", "Margin", 16, new ConfigDescription("The gap between the minimap and the corner of the screen.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 200), Array.Empty())); Opacity = ((BaseUnityPlugin)this).Config.Bind("Look", "Opacity", 1f, new ConfigDescription("How solid the minimap is. Lower it if it is in the way.", (AcceptableValueBase)(object)new AcceptableValueRange(0.25f, 1f), Array.Empty())); HeadingUp = ((BaseUnityPlugin)this).Config.Bind("Look", "Turn with me", true, "On, the map turns as you do and the way you are facing is always up. Off, north is always up and your arrow turns instead."); AutoScale = ((BaseUnityPlugin)this).Config.Bind("Zoom", "Scale to the island", true, "On, the minimap zooms itself to whatever island you are on, so a small island and a big one both fill it about the same amount. Off, it always shows the same number of metres whatever you are standing on."); Fit = ((BaseUnityPlugin)this).Config.Bind("Zoom", "How much island to show", 1.4f, new ConfigDescription("While scaling to the island, how far past its edge the minimap reaches. 1 stops at the shore, higher shows more of the sea around it. The zoom keys change this.", (AcceptableValueBase)(object)new AcceptableValueRange(0.5f, 4f), Array.Empty())); Range = ((BaseUnityPlugin)this).Config.Bind("Zoom", "Range", 70f, new ConfigDescription("How many metres from you the edge of the minimap is, when it is NOT scaling itself to the island.", (AcceptableValueBase)(object)new AcceptableValueRange(25f, 400f), Array.Empty())); CloserKey = ((BaseUnityPlugin)this).Config.Bind("Zoom", "Zoom in key", (KeyCode)273, "Brings the minimap in closer."); WiderKey = ((BaseUnityPlugin)this).Config.Bind("Zoom", "Zoom out key", (KeyCode)274, "Pulls the minimap back."); MarkBoat = ((BaseUnityPlugin)this).Config.Bind("Markers", "Show the boat", true, "Marks your boat, and pins the mark to the edge pointing the right way when the boat is further off than the minimap reaches."); MarkPlayers = ((BaseUnityPlugin)this).Config.Bind("Markers", "Show other players", true, "Marks everybody else in your game."); ShowCompass = ((BaseUnityPlugin)this).Config.Bind("Markers", "Show north", true, "Puts a mark on the rim for north."); Refresh = ((BaseUnityPlugin)this).Config.Bind("Performance", "Refreshes a second", 30, new ConfigDescription("How many times a second the view is re-rendered. This is the only thing here that costs anything, so it is the first thing to turn down if the game slows.", (AcceptableValueBase)(object)new AcceptableValueRange(5, 60), Array.Empty())); Detail = ((BaseUnityPlugin)this).Config.Bind("Performance", "Detail", 256, new ConfigDescription("How many pixels across the view is rendered at. Higher is sharper and costs more.", (AcceptableValueBase)(object)new AcceptableValueRange(128, 512), Array.Empty())); GameObject val = new GameObject("HTFMinimap") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)val); val.AddComponent(); Log.LogInfo((object)("Minimap ready. " + ((object)ToggleKey.Value/*cast due to .constrained prefix*/).ToString() + " shows and hides it, " + ((object)CloserKey.Value/*cast due to .constrained prefix*/).ToString() + " and " + ((object)WiderKey.Value/*cast due to .constrained prefix*/).ToString() + " zoom.")); } } public static class Skin { private static Texture2D _pix; private static Texture2D _disc; private static Texture2D _ring; private static GUIStyle _label; private static Font _font; private static bool _lookedForFont; private static readonly Vector2[] Around = (Vector2[])(object)new Vector2[4] { new Vector2(-1.3f, -1.3f), new Vector2(1.3f, -1.3f), new Vector2(-1.3f, 1.3f), new Vector2(1.3f, 1.3f) }; private static Font TheGamesFont() { if (_lookedForFont) { return _font; } _lookedForFont = true; string[] array = new string[3] { "Underdog", "Liberation", "Noto" }; try { Font[] array2 = Resources.FindObjectsOfTypeAll(); string[] array3 = array; foreach (string value in array3) { Font[] array4 = array2; foreach (Font val in array4) { if (!((Object)(object)val == (Object)null) && !string.IsNullOrEmpty(((Object)val).name) && ((Object)val).name.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0) { _font = val; MinimapPlugin.Log.LogInfo((object)("The minimap is set in the game's own font, " + ((Object)val).name + ".")); return _font; } } } } catch { } return null; } public static void Ready() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_002a: 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_0093: 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_00a6: Expected O, but got Unknown if ((Object)(object)_pix == (Object)null) { _pix = new Texture2D(1, 1, (TextureFormat)4, false) { hideFlags = (HideFlags)61 }; _pix.SetPixel(0, 0, Color.white); _pix.Apply(); } if ((Object)(object)_disc == (Object)null) { _disc = Circle(64, hollow: false); } if ((Object)(object)_ring == (Object)null) { _ring = Circle(256, hollow: true); } if (_label == null) { _label = new GUIStyle(GUI.skin.label) { fontSize = 13, richText = false, wordWrap = false }; Font val = TheGamesFont(); if ((Object)(object)val != (Object)null) { _label.font = val; } } } private static Texture2D Circle(int size, bool hollow) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0052: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(size, size, (TextureFormat)4, false) { hideFlags = (HideFlags)61, filterMode = (FilterMode)1, wrapMode = (TextureWrapMode)1 }; float num = (float)size * 0.5f; Color32[] array = (Color32[])(object)new Color32[size * size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { float num2 = Vector2.Distance(new Vector2((float)j + 0.5f, (float)i + 0.5f), new Vector2(num, num)); float num3 = (hollow ? (Mathf.Clamp01(num2 - (num - 4f) + 0.5f) * Mathf.Clamp01(num - num2 + 0.5f)) : Mathf.Clamp01(num - num2)); array[i * size + j] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, (byte)(num3 * 255f)); } } val.SetPixels32(array); val.Apply(false); return val; } public static void Fill(Rect r, Color c) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) Color color = GUI.color; GUI.color = c; GUI.DrawTexture(r, (Texture)(object)_pix); GUI.color = color; } public static void Tinted(Rect r, Texture tex, Color c) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)tex == (Object)null)) { Color color = GUI.color; GUI.color = c; GUI.DrawTexture(r, tex, (ScaleMode)0, true); GUI.color = color; } } public static void Ring(Vector2 at, float radius, Color c) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Tinted(new Rect(at.x - radius, at.y - radius, radius * 2f, radius * 2f), (Texture)(object)_ring, c); } public static void Disc(Vector2 at, float radius, Color c) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Tinted(new Rect(at.x - radius, at.y - radius, radius * 2f, radius * 2f), (Texture)(object)_disc, c); } public static void Line(Vector2 a, Vector2 b, Color c, float w) { //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) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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_0024: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) Vector2 val = b - a; float magnitude = ((Vector2)(ref val)).magnitude; if (!(magnitude < 0.01f)) { Matrix4x4 matrix = GUI.matrix; GUIUtility.RotateAroundPivot(Mathf.Atan2(val.y, val.x) * 57.29578f, a); Fill(new Rect(a.x, a.y - w * 0.5f, magnitude, w), c); GUI.matrix = matrix; } } public static void Pointer(Vector2 at, Vector2 dir, float size, Color c, bool solid) { //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_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_006c: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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_00d7: 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) if (((Vector2)(ref dir)).sqrMagnitude < 0.0001f) { dir = Vector2.up; } dir = ((Vector2)(ref dir)).normalized; Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0f - dir.y, dir.x); Vector2 a = at + dir * size; Vector2 val2 = at - dir * size * 0.55f + val * size * 0.62f; Vector2 b = at - dir * size * 0.55f - val * size * 0.62f; Line(a, val2, c, 2f); Line(a, b, c, 2f); Line(val2, b, c, 2f); if (solid) { Disc(at + dir * size * 0.1f, size * 0.45f, c); } } public static void Label(Rect r, string s, Color c, TextAnchor anchor) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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_005d: 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_007f: 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_0097: 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_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if (_label != null) { _label.alignment = anchor; float num = _label.CalcHeight(new GUIContent(s), ((Rect)(ref r)).width) + 2f; if (num > ((Rect)(ref r)).height) { ((Rect)(ref r)).height = num; } Color color = GUI.color; GUI.color = new Color(0f, 0f, 0f, 0.85f * c.a); Vector2[] around = Around; foreach (Vector2 val in around) { GUI.Label(new Rect(((Rect)(ref r)).x + val.x, ((Rect)(ref r)).y + val.y, ((Rect)(ref r)).width, ((Rect)(ref r)).height), s, _label); } GUI.color = c; GUI.Label(r, s, _label); GUI.color = color; } } } }