using System; using System.Collections; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using UnityEngine; using UnityEngine.SceneManagement; using cakeslice; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Inclinometer Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Inclinometer Mod")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("dda37b61-28b6-4e8e-9a39-1f1807261c65")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace KemyNavTools; public class CompassPhysics : MonoBehaviour { private ShipItem shipItem; private Transform compassCardTransform; private Transform sightingVaneTransform; [Header("Physics Smoothness")] public float cardSmoothness = 2.5f; public float vaneSmoothness = 5f; private readonly Vector3 vaneUpRotation = new Vector3(0f, 0f, 0f); private readonly Vector3 vaneFoldedRotation = new Vector3(270f, 0f, 0f); private float currentVanePitch = 270f; private void Start() { //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) shipItem = ((Component)this).GetComponent(); compassCardTransform = ((Component)this).transform.Find("CompassCard"); sightingVaneTransform = ((Component)this).transform.Find("SightingVane"); if ((Object)(object)sightingVaneTransform != (Object)null) { sightingVaneTransform.localRotation = Quaternion.Euler(vaneFoldedRotation); } } private void LateUpdate() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)shipItem == (Object)null)) { if ((Object)(object)compassCardTransform != (Object)null) { float y = ((Component)this).transform.eulerAngles.y; Quaternion val = Quaternion.Euler(0f, 0f - y, 0f); compassCardTransform.localRotation = Quaternion.Slerp(compassCardTransform.localRotation, val, Time.deltaTime * cardSmoothness); } if ((Object)(object)sightingVaneTransform != (Object)null) { float num = (Object.op_Implicit((Object)(object)((PickupableItem)shipItem).held) ? vaneUpRotation.x : vaneFoldedRotation.x); currentVanePitch = Mathf.MoveTowardsAngle(currentVanePitch, num, vaneSmoothness * 50f * Time.deltaTime); sightingVaneTransform.localRotation = Quaternion.Euler(currentVanePitch, 0f, 0f); } } } } public static class CompassSetup { public static void Configure(GameObject prefab) { //IL_0028: 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) if (!((Object)(object)prefab == (Object)null)) { prefab.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f); Rigidbody val = prefab.GetComponent() ?? prefab.AddComponent(); val.mass = 2f; val.isKinematic = true; SaveablePrefab val2 = prefab.GetComponent() ?? prefab.AddComponent(); val2.prefabIndex = 831; ShipItem val3 = prefab.GetComponent() ?? prefab.AddComponent(); val3.name = "bearing compass"; val3.value = 250; val3.mass = 2f; val3.category = (TransactionCategory)3; val3.wallAttachment = false; ((PickupableItem)val3).holdDistance = 0.4f; ((PickupableItem)val3).furniturePlaceHeight = 0.05f; if ((Object)(object)prefab.GetComponent() == (Object)null) { prefab.AddComponent(); } Outline[] componentsInChildren = prefab.GetComponentsInChildren(true); Outline[] array = componentsInChildren; foreach (Outline val4 in array) { Object.DestroyImmediate((Object)(object)val4, true); } MeshRenderer component = prefab.GetComponent(); if ((Object)(object)component != (Object)null) { typeof(ShipItem).GetField("renderer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.SetValue(val3, component); } } } } public class BinnaclePhysics : MonoBehaviour { private Component shipItemComponent; private Transform gimbalRing1; private Transform compassBody; private Transform compassFace; private Transform inclinometerArm; [Header("Gimbal Responsiveness")] public float gimbalSmoothness = 5f; public float compassSmoothness = 2.5f; public float inclinometerSmoothness = 18f; private void Start() { shipItemComponent = (Component)(((object)((Component)this).GetComponent()) ?? ((object)((Component)this).GetComponent())); inclinometerArm = ((Component)this).transform.Find("InclinometerArm"); gimbalRing1 = ((Component)this).transform.Find("GimbalRing1"); if ((Object)(object)gimbalRing1 != (Object)null) { compassBody = gimbalRing1.Find("CompassBody"); if ((Object)(object)compassBody != (Object)null) { compassFace = compassBody.Find("CompassFace"); } } if ((Object)(object)gimbalRing1 == (Object)null || (Object)(object)compassBody == (Object)null || (Object)(object)compassFace == (Object)null || (Object)(object)inclinometerArm == (Object)null) { InclinometerPlugin.DiagLogger.LogError((object)"[NAV SUITE] Binnacle is missing one or more required child transforms in its expanded hierarchy!"); } } private void LateUpdate() { //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_0037: 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_0040: 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_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_0058: 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_0073: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_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_00cc: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: 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_020f: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)shipItemComponent == (Object)null)) { Vector3 val; if ((Object)(object)gimbalRing1 != (Object)null) { val = Vector3.ProjectOnPlane(Vector3.up, ((Component)this).transform.right); Vector3 normalized = ((Vector3)(ref val)).normalized; float num = Vector3.SignedAngle(((Component)this).transform.up, normalized, ((Component)this).transform.right); Quaternion val2 = Quaternion.Euler(num, 0f, 0f); gimbalRing1.localRotation = Quaternion.Slerp(gimbalRing1.localRotation, val2, Time.deltaTime * gimbalSmoothness); } if ((Object)(object)compassBody != (Object)null) { val = Vector3.ProjectOnPlane(Vector3.up, gimbalRing1.forward); Vector3 normalized2 = ((Vector3)(ref val)).normalized; float num2 = Vector3.SignedAngle(gimbalRing1.up, normalized2, gimbalRing1.forward); Quaternion val3 = Quaternion.Euler(0f, 0f, num2); compassBody.localRotation = Quaternion.Slerp(compassBody.localRotation, val3, Time.deltaTime * gimbalSmoothness); } if ((Object)(object)compassFace != (Object)null) { float y = compassBody.eulerAngles.y; Quaternion val4 = Quaternion.Euler(0f, 0f - y, 0f); compassFace.localRotation = Quaternion.Slerp(compassFace.localRotation, val4, Time.deltaTime * compassSmoothness); } if ((Object)(object)inclinometerArm != (Object)null) { Vector3 right = ((Component)this).transform.right; float num3 = Mathf.Atan2(Vector3.Dot(Vector3.up, right), Vector3.Dot(Vector3.up, Vector3.up)) * 57.29578f; Quaternion val5 = Quaternion.Euler(0f, 0f, 0f - num3); inclinometerArm.localRotation = Quaternion.Slerp(inclinometerArm.localRotation, val5, Time.deltaTime * inclinometerSmoothness); } } } } public static class BinnacleSetup { public static void Configure(GameObject prefab) { //IL_0028: 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) if (!((Object)(object)prefab == (Object)null)) { prefab.transform.localScale = new Vector3(1f, 1f, 1f); Rigidbody val = prefab.GetComponent() ?? prefab.AddComponent(); val.mass = 15f; val.isKinematic = true; SaveablePrefab val2 = prefab.GetComponent() ?? prefab.AddComponent(); val2.prefabIndex = 832; ShipItem val3 = prefab.GetComponent() ?? prefab.AddComponent(); val3.name = "binnacle"; val3.value = 500; val3.mass = 15f; val3.category = (TransactionCategory)3; val3.wallAttachment = false; ((PickupableItem)val3).holdDistance = 0.7f; ((PickupableItem)val3).furniturePlaceHeight = 0.5f; if ((Object)(object)prefab.GetComponent() == (Object)null) { prefab.AddComponent(); } Outline[] componentsInChildren = prefab.GetComponentsInChildren(true); Outline[] array = componentsInChildren; foreach (Outline val4 in array) { Object.DestroyImmediate((Object)(object)val4, true); } MeshRenderer component = prefab.GetComponent(); if ((Object)(object)component != (Object)null) { typeof(ShipItem).GetField("renderer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.SetValue(val3, component); } } } } public static class InclinometerSetup { public static void Configure(GameObject prefab) { //IL_0028: 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) if (!((Object)(object)prefab == (Object)null)) { prefab.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); Rigidbody val = prefab.GetComponent() ?? prefab.AddComponent(); val.mass = 3f; val.isKinematic = true; SaveablePrefab val2 = prefab.GetComponent() ?? prefab.AddComponent(); val2.prefabIndex = 830; ShipItem val3 = prefab.GetComponent() ?? prefab.AddComponent(); val3.name = "inclinometer"; val3.value = 180; val3.mass = 3f; val3.category = (TransactionCategory)3; val3.wallAttachment = true; ((PickupableItem)val3).holdDistance = 0.5f; ((PickupableItem)val3).furniturePlaceHeight = 0.05f; if ((Object)(object)prefab.GetComponent() == (Object)null) { prefab.AddComponent(); } Outline[] componentsInChildren = prefab.GetComponentsInChildren(true); Outline[] array = componentsInChildren; foreach (Outline val4 in array) { Object.DestroyImmediate((Object)(object)val4, true); } MeshRenderer component = prefab.GetComponent(); if ((Object)(object)component != (Object)null) { typeof(ShipItem).GetField("renderer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.SetValue(val3, component); } } } } [BepInPlugin("com.larsonlogistics.sailwind.navsuite", "Navigation Suite Mod", "1.0.0")] public class InclinometerPlugin : BaseUnityPlugin { public static ManualLogSource DiagLogger; public static AssetBundle MainAssetBundle; private static readonly string assetBundleName = "navigation_suite_assets"; private void Awake() { //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown DiagLogger = ((BaseUnityPlugin)this).Logger; DiagLogger.LogInfo((object)"[NAV SUITE] Initialization lifecycle activated."); string location = Assembly.GetExecutingAssembly().Location; string directoryName = Path.GetDirectoryName(location); string text = Path.Combine(directoryName, assetBundleName); if (File.Exists(text)) { MainAssetBundle = AssetBundle.LoadFromFile(text); DiagLogger.LogInfo((object)"[NAV SUITE] Asset bundle successfully loaded."); } else { DiagLogger.LogError((object)("[NAV SUITE] Critical Error: Asset bundle missing at " + text)); } Harmony val = new Harmony("com.larsonlogistics.sailwind.navsuite"); val.PatchAll(); SceneManager.sceneLoaded += ShopInjection.OnSceneLoaded; } private void OnDestroy() { if ((Object)(object)MainAssetBundle != (Object)null) { MainAssetBundle.Unload(false); } } } [HarmonyPatch(typeof(GPButtonInventorySlot), "InsertItem")] public static class InventoryDisplayPatch { [HarmonyPostfix] public static void Postfix(ShipItem item) { //IL_004b: 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_0064: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)item == (Object)null)) { SaveablePrefab component = ((Component)item).GetComponent(); if (!((Object)(object)component == (Object)null) && (component.prefabIndex == 830 || component.prefabIndex == 831)) { Transform transform = ((Component)item).transform; transform.localRotation *= Quaternion.Euler(0f, 180f, 0f); } } } } [HarmonyPatch(typeof(PrefabsDirectory), "PopulateShipItems")] public static class PreloadDirectoryPatch { private const int INCLINOMETER_INDEX = 830; private const int COMPASS_INDEX = 831; private const int BINNACLE_INDEX = 832; private static GameObject inclinometerPrefab; private static GameObject compassPrefab; private static GameObject binnaclePrefab; public static GameObject InclinometerPrefabRef => inclinometerPrefab; public static GameObject CompassPrefabRef => compassPrefab; public static GameObject BinnaclePrefabRef => binnaclePrefab; [HarmonyPrefix] public static void Prefix(PrefabsDirectory __instance) { if (__instance.directory == null) { return; } try { if (__instance.directory.Length <= 832) { Array.Resize(ref __instance.directory, 842); } } catch (Exception arg) { InclinometerPlugin.DiagLogger.LogError((object)$"[NAV SUITE] Prefix array resize failed: {arg}"); } } [HarmonyPostfix] public static void Postfix(PrefabsDirectory __instance) { if ((Object)(object)InclinometerPlugin.MainAssetBundle == (Object)null) { return; } try { if ((Object)(object)inclinometerPrefab == (Object)null) { inclinometerPrefab = InclinometerPlugin.MainAssetBundle.LoadAsset("Inclinometer"); InclinometerSetup.Configure(inclinometerPrefab); } __instance.directory[830] = inclinometerPrefab; if ((Object)(object)compassPrefab == (Object)null) { compassPrefab = InclinometerPlugin.MainAssetBundle.LoadAsset("BearingCompass"); if ((Object)(object)compassPrefab != (Object)null) { CompassSetup.Configure(compassPrefab); } else { InclinometerPlugin.DiagLogger.LogError((object)"[NAV SUITE] Critical Error: BearingCompass prefab not found in bundle!"); } } __instance.directory[831] = compassPrefab; if ((Object)(object)binnaclePrefab == (Object)null) { binnaclePrefab = InclinometerPlugin.MainAssetBundle.LoadAsset("Binnacle"); if ((Object)(object)binnaclePrefab != (Object)null) { BinnacleSetup.Configure(binnaclePrefab); } else { InclinometerPlugin.DiagLogger.LogError((object)"[NAV SUITE] Critical Error: Binnacle prefab not found in bundle!"); } } __instance.directory[832] = binnaclePrefab; } catch (Exception arg) { InclinometerPlugin.DiagLogger.LogError((object)$"[NAV SUITE] Postfix directory mapping failed: {arg}"); } } } public static class ShopInjection { private static bool spawnedGRC; private static bool spawnedBinnacleGRC; private static bool spawnedAestrin; private static bool spawnedBinnacleAestrin; private static bool spawnedDragonCliffs; private static bool spawnedBinnacleDragonCliffs; public static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_0108: 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_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_021e: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0373: Unknown result type (might be due to invalid IL or missing references) string text = ((Scene)(ref scene)).name.ToLower(); if (text.Contains("main menu")) { spawnedGRC = false; spawnedBinnacleGRC = false; spawnedAestrin = false; spawnedBinnacleAestrin = false; spawnedDragonCliffs = false; spawnedBinnacleDragonCliffs = false; return; } GameObject val = GameObject.Find("ShopItemSpawnerRunner"); if ((Object)(object)val == (Object)null) { val = new GameObject("ShopItemSpawnerRunner"); Object.DontDestroyOnLoad((Object)(object)val); } CoroutineRunner coroutineRunner = val.GetComponent() ?? val.AddComponent(); if (text.Contains("gold rock")) { if (!spawnedGRC) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 1 A (gold rock) scenery", "GRC", new Vector3(1520f, 7.52f, -380.5f), Quaternion.Euler(77.5f, 241f, 0f), 830)); ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 1 A (gold rock) scenery", "GRC", new Vector3(1522.568f, 7.52f, -383.791f), Quaternion.Euler(343.5f, 237.5f, 0f), 831)); } if (!spawnedBinnacleGRC) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 1 A (gold rock) scenery", "GRC_BINNACLE", new Vector3(1521.5f, 5.55f, -378f), Quaternion.Euler(0f, -90f, 0f), 832)); } } if (text.Contains("island 15 m (fort)")) { if (!spawnedAestrin) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 15 M (Fort) scenery", "FA", new Vector3(-76.904f, 2.87f, 44.645f), Quaternion.Euler(271f, 180f, 0f), 831)); ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 15 M (Fort) scenery", "FA", new Vector3(-73.704f, 2.87f, 44.62f), Quaternion.Euler(0f, 180f, 0f), 830)); } if (!spawnedBinnacleAestrin) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 15 M (Fort) scenery", "FA_BINNACLE", new Vector3(-72.504f, 2.17f, 44.82f), Quaternion.Euler(0f, 135f, 0f), 832)); } } if (text.Contains("island 9 e dragon cliffs")) { if (!spawnedDragonCliffs) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 9 E (dragon cliffs) scenery", "DC", new Vector3(-91.312f, 5.272f, -541.35f), Quaternion.Euler(89f, 44.6f, 0f), 831)); ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 9 E (dragon cliffs) scenery", "DC", new Vector3(-91.329f, 4.762f, -541.365f), Quaternion.Euler(0f, 224.6f, 0f), 830)); } if (!spawnedBinnacleDragonCliffs) { ((MonoBehaviour)coroutineRunner).StartCoroutine(DelayedInjectionRoutine("island 9 E (dragon cliffs) scenery", "DC_BINNACLE", new Vector3(-91.729f, 3.662f, -541.765f), Quaternion.Euler(0f, 134.6f, 0f), 832)); } } } private static IEnumerator DelayedInjectionRoutine(string parentSceneryName, string regionKey, Vector3 localPos, Quaternion localRot, int itemIndex) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_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) yield return (object)new WaitForSeconds(3f); GameObject targetPrefab = null; switch (itemIndex) { case 830: targetPrefab = PreloadDirectoryPatch.InclinometerPrefabRef; break; case 831: targetPrefab = PreloadDirectoryPatch.CompassPrefabRef; break; case 832: targetPrefab = PreloadDirectoryPatch.BinnaclePrefabRef; break; } if ((Object)(object)targetPrefab == (Object)null || (regionKey == "GRC" && spawnedGRC) || (regionKey == "GRC_BINNACLE" && spawnedBinnacleGRC) || (regionKey == "FA" && spawnedAestrin) || (regionKey == "FA_BINNACLE" && spawnedBinnacleAestrin) || (regionKey == "DC" && spawnedDragonCliffs) || (regionKey == "DC_BINNACLE" && spawnedBinnacleDragonCliffs)) { yield break; } GameObject sceneryRoot = GameObject.Find(parentSceneryName); if ((Object)(object)sceneryRoot == (Object)null) { yield break; } try { string itemLabel = "tool"; switch (itemIndex) { case 830: itemLabel = "inclinometer"; break; case 831: itemLabel = "compass"; break; case 832: itemLabel = "binnacle"; break; } GameObject spawnerNode = new GameObject("shop item spawner (" + itemLabel + " " + regionKey + ")"); spawnerNode.transform.parent = sceneryRoot.transform; spawnerNode.transform.localPosition = localPos; spawnerNode.transform.localRotation = localRot; MeshFilter masterFilter = targetPrefab.GetComponent() ?? targetPrefab.GetComponentInChildren(); if ((Object)(object)masterFilter != (Object)null) { MeshFilter filter = spawnerNode.AddComponent(); filter.mesh = masterFilter.mesh; spawnerNode.AddComponent(); } ShopItemSpawner nativeSpawner = spawnerNode.AddComponent(); nativeSpawner.itemPrefab = targetPrefab; if (regionKey == "GRC" && itemIndex == 831) { spawnedGRC = true; } else if (regionKey == "GRC_BINNACLE") { spawnedBinnacleGRC = true; } else if (regionKey == "FA" && itemIndex == 830) { spawnedAestrin = true; } else if (regionKey == "FA_BINNACLE") { spawnedBinnacleAestrin = true; } else if (regionKey == "DC" && itemIndex == 830) { spawnedDragonCliffs = true; } else if (regionKey == "DC_BINNACLE") { spawnedBinnacleDragonCliffs = true; } InclinometerPlugin.DiagLogger.LogInfo((object)$"[NAV SUITE] {itemLabel} spawner cleanly deployed at {regionKey}: {localPos}"); } catch (Exception arg) { InclinometerPlugin.DiagLogger.LogError((object)$"[NAV SUITE] Failed injection for {regionKey} ({itemIndex}): {arg}"); } } } public class CoroutineRunner : MonoBehaviour { } public class InclinometerPhysics : MonoBehaviour { private ShipItem shipItem; private Transform indicatorArmTransform; [Header("Pendulum Smoothness")] public float swingSmoothness = 18f; private void Start() { shipItem = ((Component)this).GetComponent(); indicatorArmTransform = ((Component)this).transform.Find("Arm"); if ((Object)(object)indicatorArmTransform == (Object)null) { InclinometerPlugin.DiagLogger.LogError((object)"[NAV SUITE] Critical: Couldn't find the 'Arm' child component!"); } } private void LateUpdate() { //IL_002a: 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_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_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_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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)shipItem == (Object)null) && !((Object)(object)indicatorArmTransform == (Object)null)) { Vector3 right = ((Component)this).transform.right; float num = Mathf.Atan2(Vector3.Dot(Vector3.up, right), Vector3.Dot(Vector3.up, Vector3.up)) * 57.29578f; Quaternion val = Quaternion.Euler(0f, 0f, 0f - num); indicatorArmTransform.localRotation = Quaternion.Slerp(indicatorArmTransform.localRotation, val, Time.deltaTime * swingSmoothness); } } }