Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of JetpackHMD v1.2.1
JetpackHMD.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using Microsoft.CodeAnalysis; using TMPro; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Rumi")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+aa4ed3d2398535d4afad1f8a9f9a33ecf65dabfd")] [assembly: AssemblyProduct("JetpackHMD")] [assembly: AssemblyTitle("JetpackHMD")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace Rumi.JetpackHMD { [BepInPlugin("Rumi.JetpackHMD", "JetpackHMD", "1.2.1")] public class JetpackHMD : BaseUnityPlugin { public const string modGuid = "Rumi.JetpackHMD"; public const string modName = "JetpackHMD"; public const string modVersion = "1.2.1"; private static Assembly? _currentAssembly; private static string? _assemblyName; public const string mainAssetBundleName = "JetpackHMD"; public static Assembly currentAssembly => _currentAssembly ?? (_currentAssembly = Assembly.GetExecutingAssembly()); public static string assemblyName => _assemblyName ?? (_assemblyName = currentAssembly.FullName.Split(',')[0]); public static ManualLogSource? logger { get; private set; } public static ConfigFile? config { get; private set; } public static JetpackHMDConfig? uiConfig { get; private set; } public static Harmony harmony { get; } = new Harmony("Rumi.JetpackHMD"); public static JetpackHMDManager? manager { get; private set; } public static AssetBundle? mainAssetBundle { get; private set; } private void Awake() { logger = ((BaseUnityPlugin)this).Logger; config = ((BaseUnityPlugin)this).Config; ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)"Start loading plugin..."); } ManualLogSource? obj2 = logger; if (obj2 != null) { obj2.LogInfo((object)"Config Loading..."); } try { uiConfig = new JetpackHMDConfig(config); } catch (Exception ex) { uiConfig = null; ManualLogSource? obj3 = logger; if (obj3 != null) { obj3.LogWarning((object)ex); } ManualLogSource? obj4 = logger; if (obj4 != null) { obj4.LogWarning((object)"Failed to load config file\nSettings will be loaded with defaults!"); } } ManualLogSource? obj5 = logger; if (obj5 != null) { obj5.LogInfo((object)"Asset Bundle Loading..."); } if (mainAssetBundle == null) { mainAssetBundle = LoadMainAssetBundle(); } ManualLogSource? obj6 = logger; if (obj6 != null) { obj6.LogInfo((object)"PlayerControllerB Patch..."); } harmony.PatchAll(typeof(JetpackHMDPatches)); ManualLogSource? obj7 = logger; if (obj7 != null) { obj7.LogInfo((object)"OnSceneRelayLoaded Event registration..."); } SceneManager.sceneLoaded += OnSceneRelayLoaded; ManualLogSource? obj8 = logger; if (obj8 != null) { obj8.LogInfo((object)"Plugin JetpackHMD is loaded!"); } } private static void OnSceneRelayLoaded(Scene scene, LoadSceneMode loadMode) { if (((Scene)(ref scene)).name == "SampleSceneRelay") { UILoad(); } } public static void UILoad() { //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_00d6: Unknown result type (might be due to invalid IL or missing references) JetpackHMDManager.MetaData metaData = default(JetpackHMDManager.MetaData); metaData.getEnableEvent = delegate { if ((Object)(object)JetpackHMDPatches.playerControllerB != (Object)null && JetpackHMDPatches.playerControllerB.jetpackControls) { JetpackHMDConfig? jetpackHMDConfig = uiConfig; if (jetpackHMDConfig == null || jetpackHMDConfig.enableTulipSnakes) { return true; } if (JetpackHMDPatches.playerControllerB.isHoldingObject) { return JetpackHMDPatches.playerControllerB.currentlyHeldObjectServer is JetpackItem; } return false; } return false; }; metaData.getEnableWarningEvent = () => (Object)(object)JetpackHMDPatches.playerControllerB != (Object)null && JetpackHMDPatches.playerControllerB.jetpackControls && JetpackHMDPatches.playerControllerB.isHoldingObject && JetpackHMDPatches.playerControllerB.currentlyHeldObjectServer is JetpackItem; metaData.getScaleEvent = () => uiConfig?.scale ?? 1.5f; metaData.color = Color32.op_Implicit(new Color32((byte)(uiConfig?.colorR ?? 0), (byte)(uiConfig?.colorG ?? 255), (byte)(uiConfig?.colorB ?? 0), (byte)(uiConfig?.colorA ?? 255))); metaData.roll = new JetpackHMDRoll.MetaData { getTargetTransform = GetPlayerTransform }; metaData.pitchMeter = new JetpackHMDPitchMeter.MetaData { getTargetTransform = GetPlayerTransform, posSpacing = (uiConfig?.pitchMeterPosSpacing ?? 75f), numberSpacing = (uiConfig?.pitchMeterNumberSpacing ?? 10), minusPitchMeterPrefab = LoadPrefab("Minus Pitch Meter"), plusPitchMeterPrefab = LoadPrefab("Plus Pitch Meter") }; metaData.speedText = new JetpackHMDSpeedText.MetaData { getSpeedEvent = GetSpeed, multiplier = (uiConfig?.speedometerMultiplier ?? 1f) }; metaData.speedometer = new JetpackHMDSpeedometer.MetaData { getSpeedEvent = GetSpeed, multiplier = (uiConfig?.speedometerMultiplier ?? 1f), numberSpacing = (uiConfig?.speedometerNumberSpacing ?? 10), speedMeterPrefab = LoadPrefab("Speedometer") }; metaData.altitude = new JetpackHMDAltitude.MetaData { getTargetTransform = GetPlayerTransform, multiplier = (uiConfig?.altimeterMultiplier ?? 1f) }; metaData.altimeter = new JetpackHMDAltimeter.MetaData { getTargetTransform = GetPlayerTransform, multiplier = (uiConfig?.altimeterMultiplier ?? 1f), numberSpacing = (uiConfig?.altimeterNumberSpacing ?? 10), altimeterPrefab = LoadPrefab("Altimeter") }; metaData.headingIndicator = new JetpackHMDHeadingIndicator.MetaData { getTargetTransform = GetPlayerTransform }; metaData.accelerationIndicator = new JetpackHMDAccelerationIndicator.MetaData { getSpeedEvent = () => ((Object)(object)JetpackHMDPatches.playerControllerB != (Object)null) ? ((Vector3)(ref JetpackHMDPatches.playerControllerB.externalForces)).magnitude : 0f, multiplier = (uiConfig?.speedometerMultiplier ?? 1f) }; metaData.verticalSpeedIndicator = new JetpackHMDVerticalSpeedIndicator.MetaData { getSpeedEvent = () => ((Object)(object)JetpackHMDPatches.playerControllerB != (Object)null) ? JetpackHMDPatches.playerControllerB.thisController.velocity.y : 0f, multiplier = (uiConfig?.speedometerMultiplier ?? 1f) }; JetpackHMDManager.MetaData metaData2 = metaData; GameObject val = GameObject.Find("IngamePlayerHUD"); GameObject val2 = LoadPrefab("Jetpack HMD"); if ((Object)(object)val == (Object)null) { ManualLogSource? obj = logger; if (obj != null) { obj.LogFatal((object)"lethalHUD is null"); } } else if ((Object)(object)val2 == (Object)null) { ManualLogSource? obj2 = logger; if (obj2 != null) { obj2.LogFatal((object)"jetpackHMDGameObject == null"); } } else { if ((Object)(object)manager == (Object)null) { manager = Object.Instantiate<GameObject>(val2, val.transform).AddComponent<JetpackHMDManager>(); } manager.Init(metaData2); } static Transform? GetPlayerTransform() { if (!((Object)(object)JetpackHMDPatches.playerControllerB != (Object)null)) { return null; } return ((Component)JetpackHMDPatches.playerControllerB).transform; } static float GetSpeed() { //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) if ((Object)(object)JetpackHMDPatches.playerControllerB != (Object)null) { Vector3 velocity = JetpackHMDPatches.playerControllerB.thisController.velocity; return ((Vector3)(ref velocity)).magnitude; } return 0f; } } private static GameObject? LoadPrefab(string prefabName) { try { if ((Object)(object)mainAssetBundle == (Object)null) { ManualLogSource? obj = logger; if (obj != null) { obj.LogError((object)$"{mainAssetBundle} is null"); } return null; } return mainAssetBundle.LoadAsset<GameObject>(prefabName); } catch (Exception ex) { ManualLogSource? obj2 = logger; if (obj2 != null) { obj2.LogError((object)ex); } ManualLogSource? obj3 = logger; if (obj3 != null) { obj3.LogError((object)("\"" + prefabName + "\" Prefab load failure")); } return null; } } public static AssetBundle? LoadMainAssetBundle() { string text = "Rumi.JetpackHMD.JetpackHMD"; try { using Stream stream = currentAssembly.GetManifestResourceStream(text); return AssetBundle.LoadFromStream(stream); } catch (Exception ex) { ManualLogSource? obj = logger; if (obj != null) { obj.LogFatal((object)ex); } ManualLogSource? obj2 = logger; if (obj2 != null) { obj2.LogFatal((object)("Main Asset bundle loading failed (Path : " + text)); } return null; } } } public class JetpackHMDConfig { private readonly ConfigEntry<float> _scale; private readonly ConfigEntry<float> _pitchMeterPosSpacing; private readonly ConfigEntry<int> _pitchMeterNumberSpacing; private readonly ConfigEntry<float> _speedometerMultiplier; private readonly ConfigEntry<int> _speedometerNumberSpacing; private readonly ConfigEntry<float> _altimeterMultiplier; private readonly ConfigEntry<int> _altimeterNumberSpacing; private readonly ConfigEntry<int> _colorR; private readonly ConfigEntry<int> _colorG; private readonly ConfigEntry<int> _colorB; private readonly ConfigEntry<int> _colorA; private readonly ConfigEntry<bool> _enableTulipSnakes; public float scale { get { return _scale?.Value ?? 0.75f; } set { _scale.Value = value; } } public float pitchMeterPosSpacing { get { return _pitchMeterPosSpacing?.Value ?? 75f; } set { _pitchMeterPosSpacing.Value = value; } } public int pitchMeterNumberSpacing { get { return _pitchMeterNumberSpacing?.Value ?? 10; } set { _pitchMeterNumberSpacing.Value = value; } } public float speedometerMultiplier { get { return _speedometerMultiplier?.Value ?? 1f; } set { _speedometerMultiplier.Value = value; } } public int speedometerNumberSpacing { get { return _speedometerNumberSpacing?.Value ?? 10; } set { _speedometerNumberSpacing.Value = value; } } public float altimeterMultiplier { get { return _altimeterMultiplier?.Value ?? 1f; } set { _altimeterMultiplier.Value = value; } } public int altimeterNumberSpacing { get { return _altimeterNumberSpacing?.Value ?? 10; } set { _altimeterNumberSpacing.Value = value; } } public int colorR { get { return _colorR?.Value ?? 0; } set { _colorR.Value = value; } } public int colorG { get { return _colorG?.Value ?? 255; } set { _colorG.Value = value; } } public int colorB { get { return _colorB?.Value ?? 0; } set { _colorB.Value = value; } } public int colorA { get { return _colorA?.Value ?? 255; } set { _colorA.Value = value; } } public bool enableTulipSnakes { get { return _enableTulipSnakes?.Value ?? true; } set { _enableTulipSnakes.Value = value; } } public JetpackHMDConfig(ConfigFile config) { _scale = config.Bind<float>("General", "Scale", 1.5f, "Adjust the overall UI scale"); _colorR = config.Bind<int>("General", "R Color", 0, ""); _colorR.SettingChanged += delegate { JetpackHMD.UILoad(); }; _colorG = config.Bind<int>("General", "G Color", 255, ""); _colorG.SettingChanged += delegate { JetpackHMD.UILoad(); }; _colorB = config.Bind<int>("General", "B Color", 0, ""); _colorB.SettingChanged += delegate { JetpackHMD.UILoad(); }; _colorA = config.Bind<int>("General", "A Color", 255, ""); _colorA.SettingChanged += delegate { JetpackHMD.UILoad(); }; _enableTulipSnakes = config.Bind<bool>("General", "Tulip Snake Enable", true, "Displays UI even when flying as Tulip Snake"); _enableTulipSnakes.SettingChanged += delegate { JetpackHMD.UILoad(); }; _pitchMeterPosSpacing = config.Bind<float>("Pitch Meter", "Pos Spacing", 75f, (ConfigDescription)null); _pitchMeterPosSpacing.SettingChanged += delegate { JetpackHMD.UILoad(); }; _pitchMeterNumberSpacing = config.Bind<int>("Pitch Meter", "Number Spacing", 10, (ConfigDescription)null); _pitchMeterNumberSpacing.SettingChanged += delegate { JetpackHMD.UILoad(); }; _speedometerMultiplier = config.Bind<float>("Speedometer", "Multiplier", 1f, (ConfigDescription)null); _speedometerMultiplier.SettingChanged += delegate { JetpackHMD.UILoad(); }; _speedometerNumberSpacing = config.Bind<int>("Speedometer", "Number Spacing", 10, (ConfigDescription)null); _speedometerNumberSpacing.SettingChanged += delegate { JetpackHMD.UILoad(); }; _altimeterMultiplier = config.Bind<float>("Altimeter", "Multiplier", 1f, (ConfigDescription)null); _altimeterMultiplier.SettingChanged += delegate { JetpackHMD.UILoad(); }; _altimeterNumberSpacing = config.Bind<int>("Altimeter", "Number Spacing", 10, (ConfigDescription)null); _altimeterNumberSpacing.SettingChanged += delegate { JetpackHMD.UILoad(); }; try { LethalConfigPatch(); } catch (FileNotFoundException ex) { ManualLogSource? logger = JetpackHMD.logger; if (logger != null) { logger.LogError((object)ex); } ManualLogSource? logger2 = JetpackHMD.logger; if (logger2 != null) { logger2.LogWarning((object)"Lethal Config Patch Fail! (This is not a bug and occurs when LethalConfig is not present)"); } } catch (Exception ex2) { ManualLogSource? logger3 = JetpackHMD.logger; if (logger3 != null) { logger3.LogError((object)ex2); } ManualLogSource? logger4 = JetpackHMD.logger; if (logger4 != null) { logger4.LogError((object)"Lethal Config Patch Fail!"); } } } private void LethalConfigPatch() { //IL_0006: 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_0016: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_0066: 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_0072: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown //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_00ce: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Expected O, but got Unknown //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Expected O, but got Unknown //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Expected O, but got Unknown //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Expected O, but got Unknown //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Expected O, but got Unknown //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Expected O, but got Unknown //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Expected O, but got Unknown //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Expected O, but got Unknown //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Expected O, but got Unknown //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Expected O, but got Unknown //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Expected O, but got Unknown //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Expected O, but got Unknown //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Expected O, but got Unknown //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Expected O, but got Unknown //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Expected O, but got Unknown //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Expected O, but got Unknown //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Expected O, but got Unknown //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Expected O, but got Unknown ConfigEntry<float> obj = _scale; FloatSliderOptions val = new FloatSliderOptions(); ((BaseRangeOptions<float>)val).Min = 0.5f; ((BaseRangeOptions<float>)val).Max = 2f; ((BaseOptions)val).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(obj, val)); ConfigEntry<int> obj2 = _colorR; IntSliderOptions val2 = new IntSliderOptions(); ((BaseRangeOptions<int>)val2).Min = 0; ((BaseRangeOptions<int>)val2).Max = 255; ((BaseOptions)val2).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj2, val2)); ConfigEntry<int> obj3 = _colorG; IntSliderOptions val3 = new IntSliderOptions(); ((BaseRangeOptions<int>)val3).Min = 0; ((BaseRangeOptions<int>)val3).Max = 255; ((BaseOptions)val3).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj3, val3)); ConfigEntry<int> obj4 = _colorB; IntSliderOptions val4 = new IntSliderOptions(); ((BaseRangeOptions<int>)val4).Min = 0; ((BaseRangeOptions<int>)val4).Max = 255; ((BaseOptions)val4).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj4, val4)); ConfigEntry<int> obj5 = _colorA; IntSliderOptions val5 = new IntSliderOptions(); ((BaseRangeOptions<int>)val5).Min = 0; ((BaseRangeOptions<int>)val5).Max = 255; ((BaseOptions)val5).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj5, val5)); LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(_enableTulipSnakes, false)); ConfigEntry<float> obj6 = _pitchMeterPosSpacing; FloatSliderOptions val6 = new FloatSliderOptions(); ((BaseRangeOptions<float>)val6).Min = 10f; ((BaseRangeOptions<float>)val6).Max = 200f; ((BaseOptions)val6).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(obj6, val6)); ConfigEntry<int> obj7 = _pitchMeterNumberSpacing; IntSliderOptions val7 = new IntSliderOptions(); ((BaseRangeOptions<int>)val7).Min = 1; ((BaseRangeOptions<int>)val7).Max = 360; ((BaseOptions)val7).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj7, val7)); ConfigEntry<float> obj8 = _speedometerMultiplier; FloatSliderOptions val8 = new FloatSliderOptions(); ((BaseRangeOptions<float>)val8).Min = 0.125f; ((BaseRangeOptions<float>)val8).Max = 4f; ((BaseOptions)val8).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(obj8, val8)); ConfigEntry<int> obj9 = _speedometerNumberSpacing; IntSliderOptions val9 = new IntSliderOptions(); ((BaseRangeOptions<int>)val9).Min = 1; ((BaseRangeOptions<int>)val9).Max = 100; ((BaseOptions)val9).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj9, val9)); ConfigEntry<float> obj10 = _altimeterMultiplier; FloatSliderOptions val10 = new FloatSliderOptions(); ((BaseRangeOptions<float>)val10).Min = 0.125f; ((BaseRangeOptions<float>)val10).Max = 4f; ((BaseOptions)val10).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(obj10, val10)); ConfigEntry<int> obj11 = _altimeterNumberSpacing; IntSliderOptions val11 = new IntSliderOptions(); ((BaseRangeOptions<int>)val11).Min = 1; ((BaseRangeOptions<int>)val11).Max = 100; ((BaseOptions)val11).RequiresRestart = false; LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(obj11, val11)); } } internal class JetpackHMDPatches { public static PlayerControllerB? playerControllerB; [HarmonyPatch(typeof(PlayerControllerB), "Awake")] [HarmonyPostfix] private static void PlayerControllerB_Awake_Postfix(ref PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).IsOwner && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject) && __instance.isPlayerControlled && !__instance.isPlayerDead) { playerControllerB = __instance; } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPostfix] private static void PlayerControllerB_Update_Postfix(ref PlayerControllerB __instance) { if (((NetworkBehaviour)__instance).IsOwner && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject) && __instance.isPlayerControlled && !__instance.isPlayerDead) { playerControllerB = __instance; } } } public sealed class JetpackHMDAccelerationIndicator : MonoBehaviour { public struct MetaData { public Func<float> getSpeedEvent; public float multiplier; } private float multiplier = 1f; private TMP_Text? text; private float realSpeed; private event Func<float>? getSpeedEvent; public void Init(MetaData metaData) { this.getSpeedEvent = metaData.getSpeedEvent; multiplier = metaData.multiplier; text = ((Component)this).GetComponent<TMP_Text>(); } private void Update() { if (!((Object)(object)text == (Object)null)) { realSpeed = Mathf.Lerp(realSpeed, (this.getSpeedEvent?.Invoke() * multiplier).GetValueOrDefault(), 7.5f * Time.smoothDeltaTime); text.text = "<voffset=2.5><size=11>ACC</size></voffset> " + Mathf.Round(realSpeed); } } } public sealed class JetpackHMDAltimeter : MonoBehaviour { public struct MetaData { public Func<Transform?> getTargetTransform; public float multiplier; public int numberSpacing; public GameObject? altimeterPrefab; } private float multiplier; private const float posSpacing = 66f; private int numberSpacing; private float altitude; private event Func<Transform?>? getTargetTransform; public void Init(MetaData metaData) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)metaData.altimeterPrefab == (Object)null) { return; } Transform child = ((Component)this).transform.GetChild("Offset"); if ((Object)(object)child == (Object)null) { return; } this.getTargetTransform = metaData.getTargetTransform; multiplier = metaData.multiplier; numberSpacing = metaData.numberSpacing; for (int i = 1; i < child.childCount; i++) { Object.Destroy((Object)(object)((Component)child.GetChild(i)).gameObject); } if (numberSpacing > 0) { float num = 0f; for (int j = numberSpacing; j <= 500; j += numberSpacing) { RectTransform val = (RectTransform)Object.Instantiate<GameObject>(metaData.altimeterPrefab, child).transform; val.anchoredPosition = new Vector2(0f, num); ((Component)((Transform)val).GetChild(0)).GetComponent<TMP_Text>().text = j.ToString(); num += 66f; } } } private void LateUpdate() { //IL_0097: 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) Transform val = this.getTargetTransform?.Invoke(); if (!((Object)(object)val == (Object)null)) { altitude = Mathf.Lerp(altitude, Mathf.Clamp((val.GetAltitude() * multiplier) ?? 500f, 0f, 500f), 7.5f * Time.smoothDeltaTime); ((RectTransform)((Component)this).transform).anchoredPosition = new Vector2(0f, (0f - altitude) * 66f / (float)numberSpacing); } } } public sealed class JetpackHMDAltitude : MonoBehaviour { public struct MetaData { public Func<Transform?> getTargetTransform; public float multiplier; } private float multiplier = 1f; private Transform? digit100; private Transform? digit10; private Transform? digit1; private Transform? digit0_01; private float realAltitude; private event Func<Transform?>? getTargetTransform; public void Init(MetaData metaData) { Transform child = ((Component)this).transform.GetChild("Offset"); if (!((Object)(object)child == (Object)null)) { this.getTargetTransform = metaData.getTargetTransform; multiplier = metaData.multiplier; digit100 = child.GetChild(0); digit10 = child.GetChild(1); digit1 = child.GetChild(2); digit0_01 = child.GetChild(3); } } private void LateUpdate() { //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Expected O, but got Unknown //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_01e1: 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_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) Transform val = this.getTargetTransform?.Invoke(); if (!((Object)(object)val == (Object)null) && !((Object)(object)digit100 == (Object)null) && !((Object)(object)digit10 == (Object)null) && !((Object)(object)digit1 == (Object)null) && !((Object)(object)digit0_01 == (Object)null)) { realAltitude = Mathf.Lerp(realAltitude, Mathf.Clamp((val.GetAltitude() * multiplier) ?? 999f, 0f, 999f), 7.5f * Time.smoothDeltaTime); RectTransform val2 = (RectTransform)digit100; float num = realAltitude * 0.01f; num = Mathf.Floor(num) + Mathf.Clamp01((Mathf.Repeat(num, 1f) - 0.99f) * 100f); if (num >= 1f) { val2.anchoredPosition = new Vector2(-22f, (0f - (Mathf.Repeat(num, 10f) + 2f)) * 17.7f); } else { val2.anchoredPosition = new Vector2(-22f, (0f - num) * 17.7f); } RectTransform val3 = (RectTransform)digit10; float num2 = realAltitude * 0.1f; num2 = Mathf.Floor(num2) + Mathf.Clamp01((Mathf.Repeat(num2, 1f) - 0.9f) * 10f); if (num2 >= 1f) { val3.anchoredPosition = new Vector2(-11f, (0f - (Mathf.Repeat(num2, 10f) + 2f)) * 17.7f); } else { val3.anchoredPosition = new Vector2(-11f, (0f - num2) * 17.7f); } ((RectTransform)digit1).anchoredPosition = new Vector2(0f, (0f - Mathf.Repeat(Mathf.Clamp(realAltitude, 0f, float.MaxValue), 10f)) * 17.7f); RectTransform val4 = (RectTransform)digit0_01; float num3 = Mathf.Clamp(realAltitude * 5f, 0f, float.MaxValue); val4.anchoredPosition = new Vector2(11.5f, (0f - Mathf.Repeat(num3, 5f)) * 7.965f); } } } public sealed class JetpackHMDHeadingIndicator : MonoBehaviour { public struct MetaData { public Func<Transform?> getTargetTransform; } private float realYaw; private event Func<Transform?>? getTargetTransform; public void Init(MetaData metaData) { this.getTargetTransform = metaData.getTargetTransform; } private void Update() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0069: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) Transform val = this.getTargetTransform?.Invoke(); if (!((Object)(object)val == (Object)null)) { Quaternion val2 = val.rotation * Quaternion.Euler(-90f, 0f, 0f); if (val.eulerAngles.x <= 0.1f) { val2 *= Quaternion.Euler(0.01f, 0f, 0f); } else if (val.eulerAngles.x >= 359.9f) { val2 *= Quaternion.Euler(-0.01f, 0f, 0f); } if (val.eulerAngles.x >= 180f && val.eulerAngles.x <= 180.1f) { val2 *= Quaternion.Euler(0.01f, 0f, 0f); } else if (val.eulerAngles.x >= 179.9f && val.eulerAngles.x <= 180f) { val2 *= Quaternion.Euler(-0.01f, 0f, 0f); } realYaw = Mathf.LerpAngle(realYaw, Mathf.Atan2(2f * (val2.y * val2.w + val2.x * val2.z), 1f - 2f * (val2.x * val2.x + val2.y * val2.y)) * 57.29578f, 7.5f * Time.smoothDeltaTime); ((Component)this).transform.localEulerAngles = new Vector3(0f, 0f, realYaw); } } } public sealed class JetpackHMDManager : MonoBehaviour { public struct MetaData { public Func<bool> getEnableEvent; public Func<bool> getEnableWarningEvent; public Func<float> getScaleEvent; public JetpackHMDRoll.MetaData roll; public JetpackHMDPitchMeter.MetaData pitchMeter; public JetpackHMDSpeedText.MetaData speedText; public JetpackHMDSpeedometer.MetaData speedometer; public JetpackHMDAltitude.MetaData altitude; public JetpackHMDAltimeter.MetaData altimeter; public JetpackHMDAccelerationIndicator.MetaData accelerationIndicator; public JetpackHMDVerticalSpeedIndicator.MetaData verticalSpeedIndicator; public JetpackHMDHeadingIndicator.MetaData headingIndicator; public Color color; } private CanvasGroup? canvasGroup; private CanvasGroup? jetpackMeterContainer; private bool jetpackWarningCompatibleDisable = true; private MetaData metaData; private void OnEnable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Canvas.preWillRenderCanvases += new WillRenderCanvases(ScaleUpdate); } private void OnDisable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Canvas.preWillRenderCanvases -= new WillRenderCanvases(ScaleUpdate); } private void Update() { if ((Object)(object)canvasGroup == (Object)null) { return; } Func<bool> getEnableEvent = metaData.getEnableEvent; if (getEnableEvent != null && getEnableEvent()) { canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, 1f, 4f * Time.smoothDeltaTime); if (canvasGroup.alpha >= 0.99f) { canvasGroup.alpha = 1f; } Transform child = ((Component)this).transform.GetChild(0); if ((Object)(object)child != (Object)null && !((Component)child).gameObject.activeSelf) { ((Component)child).gameObject.SetActive(true); } } else { canvasGroup.alpha = Mathf.MoveTowards(canvasGroup.alpha, 0f, 4f * Time.smoothDeltaTime); Transform child2 = ((Component)this).transform.GetChild(0); if (canvasGroup.alpha <= 0f && (Object)(object)child2 != (Object)null && ((Component)child2).gameObject.activeSelf) { ((Component)child2).gameObject.SetActive(false); } } } private void LateUpdate() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_009d: 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_00b2: 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_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)canvasGroup == (Object)null) { return; } if (!jetpackWarningCompatibleDisable) { GameObject val = null; GameObject[] array = Object.FindObjectsByType<GameObject>((FindObjectsInactive)1, (FindObjectsSortMode)0); foreach (GameObject val2 in array) { if (((Object)val2).name == "jetpackMeterContainer") { val = val2; } } if ((Object)(object)val != (Object)null) { jetpackMeterContainer = val.GetComponent<CanvasGroup>(); if ((Object)(object)jetpackMeterContainer != (Object)null) { RectTransform val3 = (RectTransform)((Component)jetpackMeterContainer).transform; val3.anchorMin = new Vector2(0.59f, 0.5f); val3.anchorMax = new Vector2(0.59f, 0.5f); val3.sizeDelta = new Vector2(18f, 78.5f); val3.pivot = new Vector2(0f, 0.5f); } } jetpackWarningCompatibleDisable = true; } if (!((Object)(object)jetpackMeterContainer != (Object)null)) { return; } if (canvasGroup.alpha > 0f && !((Component)jetpackMeterContainer).gameObject.activeSelf) { ((Component)jetpackMeterContainer).gameObject.SetActive(true); } Func<bool> getEnableWarningEvent = metaData.getEnableWarningEvent; if (getEnableWarningEvent != null && getEnableWarningEvent()) { jetpackMeterContainer.alpha = Mathf.Lerp(jetpackMeterContainer.alpha, 1f, 4f * Time.smoothDeltaTime); if (jetpackMeterContainer.alpha >= 0.99f) { jetpackMeterContainer.alpha = 1f; } } else { jetpackMeterContainer.alpha = Mathf.MoveTowards(jetpackMeterContainer.alpha, 0f, 4f * Time.smoothDeltaTime); } float num = Mathf.Clamp(metaData.getScaleEvent?.Invoke() ?? 1f, 0.5f, 2f) * 0.5f; ((RectTransform)((Component)jetpackMeterContainer).transform).anchoredPosition = new Vector2(72f * num, 0f); } private void ScaleUpdate() { //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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_0066: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_007f: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Clamp(metaData.getScaleEvent?.Invoke() ?? 1f, 0.5f, 2f) * 0.5f; RectTransform val = (RectTransform)((Component)this).transform; ((Transform)val).localScale = Vector3.one * num; Rect rect = ((RectTransform)((Transform)val).parent).rect; Vector3 val2 = Vector2.op_Implicit(((Rect)(ref rect)).size / num); val.SetSizeWithCurrentAnchors((Axis)0, val2.x); val.SetSizeWithCurrentAnchors((Axis)1, val2.y); } public void Init(MetaData metaData) { //IL_0328: Unknown result type (might be due to invalid IL or missing references) this.metaData = metaData; canvasGroup = ((Component)this).GetComponent<CanvasGroup>(); jetpackWarningCompatibleDisable = false; ScaleUpdate(); Transform child = ((Component)this).transform.GetChild(0); if ((Object)(object)child != (Object)null) { Transform child2 = child.GetChild("Roll Mask"); if ((Object)(object)child2 != (Object)null) { Transform child3 = child2.GetChild("Roll"); if ((Object)(object)child3 != (Object)null) { JetpackHMDRoll jetpackHMDRoll = default(JetpackHMDRoll); if (!((Component)child3).gameObject.TryGetComponent<JetpackHMDRoll>(ref jetpackHMDRoll)) { jetpackHMDRoll = ((Component)child3).gameObject.AddComponent<JetpackHMDRoll>(); } jetpackHMDRoll.Init(metaData.roll); Transform child4 = child3.GetChild("Pitch Meter"); if ((Object)(object)child4 != (Object)null) { JetpackHMDPitchMeter jetpackHMDPitchMeter = default(JetpackHMDPitchMeter); if (!((Component)child4).gameObject.TryGetComponent<JetpackHMDPitchMeter>(ref jetpackHMDPitchMeter)) { jetpackHMDPitchMeter = ((Component)child4).gameObject.AddComponent<JetpackHMDPitchMeter>(); } jetpackHMDPitchMeter.Init(metaData.pitchMeter); } } } Transform child5 = child.GetChild("Speed Mask"); if ((Object)(object)child5 != (Object)null) { Transform child6 = child5.GetChild("Speed Text"); if ((Object)(object)child6 != (Object)null) { JetpackHMDSpeedText jetpackHMDSpeedText = default(JetpackHMDSpeedText); if (!((Component)child6).gameObject.TryGetComponent<JetpackHMDSpeedText>(ref jetpackHMDSpeedText)) { jetpackHMDSpeedText = ((Component)child6).gameObject.AddComponent<JetpackHMDSpeedText>(); } jetpackHMDSpeedText.Init(metaData.speedText); } Transform child7 = child5.GetChild("Speedometer Mask"); if ((Object)(object)child7 != (Object)null) { Transform child8 = child7.GetChild("Speedometer"); if ((Object)(object)child8 != (Object)null) { JetpackHMDSpeedometer jetpackHMDSpeedometer = default(JetpackHMDSpeedometer); if (!((Component)child8).gameObject.TryGetComponent<JetpackHMDSpeedometer>(ref jetpackHMDSpeedometer)) { jetpackHMDSpeedometer = ((Component)child8).gameObject.AddComponent<JetpackHMDSpeedometer>(); } jetpackHMDSpeedometer.Init(metaData.speedometer); } } } Transform child9 = child.GetChild("Altitude Mask"); if ((Object)(object)child9 != (Object)null) { Transform child10 = child9.GetChild("Altitude"); if ((Object)(object)child10 != (Object)null) { JetpackHMDAltitude jetpackHMDAltitude = default(JetpackHMDAltitude); if (!((Component)child10).gameObject.TryGetComponent<JetpackHMDAltitude>(ref jetpackHMDAltitude)) { jetpackHMDAltitude = ((Component)child10).gameObject.AddComponent<JetpackHMDAltitude>(); } jetpackHMDAltitude.Init(metaData.altitude); } Transform child11 = child9.GetChild("Altimeter Mask"); if ((Object)(object)child11 != (Object)null) { Transform child12 = child11.GetChild("Altimeter"); if ((Object)(object)child12 != (Object)null) { JetpackHMDAltimeter jetpackHMDAltimeter = default(JetpackHMDAltimeter); if (!((Component)child12).gameObject.TryGetComponent<JetpackHMDAltimeter>(ref jetpackHMDAltimeter)) { jetpackHMDAltimeter = ((Component)child12).gameObject.AddComponent<JetpackHMDAltimeter>(); } jetpackHMDAltimeter.Init(metaData.altimeter); } } } Transform child13 = child.GetChild("Acceleration Indicator"); if ((Object)(object)child13 != (Object)null) { JetpackHMDAccelerationIndicator jetpackHMDAccelerationIndicator = default(JetpackHMDAccelerationIndicator); if (!((Component)child13).TryGetComponent<JetpackHMDAccelerationIndicator>(ref jetpackHMDAccelerationIndicator)) { jetpackHMDAccelerationIndicator = ((Component)child13).gameObject.AddComponent<JetpackHMDAccelerationIndicator>(); } jetpackHMDAccelerationIndicator.Init(metaData.accelerationIndicator); } Transform child14 = child.GetChild("Vertical Speed Indicator"); if ((Object)(object)child14 != (Object)null) { JetpackHMDVerticalSpeedIndicator jetpackHMDVerticalSpeedIndicator = default(JetpackHMDVerticalSpeedIndicator); if (!((Component)child14).TryGetComponent<JetpackHMDVerticalSpeedIndicator>(ref jetpackHMDVerticalSpeedIndicator)) { jetpackHMDVerticalSpeedIndicator = ((Component)child14).gameObject.AddComponent<JetpackHMDVerticalSpeedIndicator>(); } jetpackHMDVerticalSpeedIndicator.Init(metaData.verticalSpeedIndicator); } Transform child15 = child.GetChild("Heading Indicator Mask"); if ((Object)(object)child15 != (Object)null) { Transform child16 = child15.GetChild("Heading Indicator"); if ((Object)(object)child16 != (Object)null) { JetpackHMDHeadingIndicator jetpackHMDHeadingIndicator = default(JetpackHMDHeadingIndicator); if (!((Component)child16).gameObject.TryGetComponent<JetpackHMDHeadingIndicator>(ref jetpackHMDHeadingIndicator)) { jetpackHMDHeadingIndicator = ((Component)child16).gameObject.AddComponent<JetpackHMDHeadingIndicator>(); } jetpackHMDHeadingIndicator.Init(metaData.headingIndicator); } } } Graphic[] componentsInChildren = ((Component)this).GetComponentsInChildren<Graphic>(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].color = metaData.color; } } } public sealed class JetpackHMDPitchMeter : MonoBehaviour { public struct MetaData { public Func<Transform?> getTargetTransform; public float posSpacing; public int numberSpacing; public GameObject? minusPitchMeterPrefab; public GameObject? plusPitchMeterPrefab; } private float posSpacing; private int numberSpacing; private float pitch; private event Func<Transform?>? getTargetTransform; public void Init(MetaData metaData) { //IL_00ad: 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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)metaData.minusPitchMeterPrefab == (Object)null || (Object)(object)metaData.plusPitchMeterPrefab == (Object)null) { return; } this.getTargetTransform = metaData.getTargetTransform; posSpacing = metaData.posSpacing; numberSpacing = metaData.numberSpacing; for (int i = 1; i < ((Component)this).transform.childCount; i++) { Object.Destroy((Object)(object)((Component)((Component)this).transform.GetChild(i)).gameObject); } if (metaData.numberSpacing > 0) { float num = 0f; int num2 = 0; while (num2 < 180) { num += posSpacing; num2 += numberSpacing; GameObject obj = Object.Instantiate<GameObject>(metaData.minusPitchMeterPrefab, ((Component)this).transform); ((RectTransform)obj.transform).anchoredPosition = new Vector2(0f, 0f - num); TMP_Text component = ((Component)obj.transform.GetChild(0)).GetComponent<TMP_Text>(); TMP_Text component2 = ((Component)obj.transform.GetChild(1)).GetComponent<TMP_Text>(); component.text = num2.ToString(); component2.text = num2.ToString(); GameObject obj2 = Object.Instantiate<GameObject>(metaData.plusPitchMeterPrefab, ((Component)this).transform); ((RectTransform)obj2.transform).anchoredPosition = new Vector2(0f, num); TMP_Text component3 = ((Component)obj2.transform.GetChild(0)).GetComponent<TMP_Text>(); TMP_Text component4 = ((Component)obj2.transform.GetChild(1)).GetComponent<TMP_Text>(); component3.text = num2.ToString(); component4.text = num2.ToString(); } } } private void LateUpdate() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) Transform val = this.getTargetTransform?.Invoke(); if (!((Object)(object)val == (Object)null)) { Quaternion val2 = val.rotation * Quaternion.Euler(-90f, 0f, 0f); if (val.eulerAngles.x <= 0.1f) { val2 *= Quaternion.Euler(0.04f, 0f, 0f); } else if (val.eulerAngles.x >= 359.9f) { val2 *= Quaternion.Euler(-0.04f, 0f, 0f); } float num = Mathf.Asin(2f * (val2.x * val2.w - val2.y * val2.z)) * 57.29578f; if ((num + 90f >= -0.08f && num + 90f <= 0.08f) || !float.IsNormal(pitch)) { pitch = Mathf.LerpAngle(pitch, -90f, 7.5f * Time.smoothDeltaTime); } else { pitch = Mathf.LerpAngle(pitch, num, 7.5f * Time.smoothDeltaTime); } ((RectTransform)((Component)this).transform).anchoredPosition = new Vector2(0f, pitch * posSpacing / (float)numberSpacing); } } } public sealed class JetpackHMDRoll : MonoBehaviour { public struct MetaData { public Func<Transform?> getTargetTransform; } private float roll; private event Func<Transform?>? getTargetTransform; public void Init(MetaData metaData) { this.getTargetTransform = metaData.getTargetTransform; } private void LateUpdate() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_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_0069: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) Transform val = this.getTargetTransform?.Invoke(); if (!((Object)(object)val == (Object)null)) { Quaternion val2 = val.rotation * Quaternion.Euler(-90f, 0f, 0f); if (val.eulerAngles.x <= 0.1f) { val2 *= Quaternion.Euler(0.01f, 0f, 0f); } else if (val.eulerAngles.x >= 359.9f) { val2 *= Quaternion.Euler(-0.01f, 0f, 0f); } if (val.eulerAngles.x >= 180f && val.eulerAngles.x <= 180.1f) { val2 *= Quaternion.Euler(0.01f, 0f, 0f); } else if (val.eulerAngles.x >= 179.9f && val.eulerAngles.x <= 180f) { val2 *= Quaternion.Euler(-0.01f, 0f, 0f); } roll = Mathf.LerpAngle(roll, (0f - Mathf.Atan2(2f * (val2.x * val2.y + val2.z * val2.w), 1f - 2f * (val2.x * val2.x + val2.z * val2.z))) * 57.29578f, 7.5f * Time.smoothDeltaTime); if ((roll >= 0.01f && roll <= 0.01f) || !float.IsNormal(roll)) { roll = 0f; } ((Component)this).transform.localEulerAngles = new Vector3(0f, 0f, roll); } } } public sealed class JetpackHMDSpeedometer : MonoBehaviour { public struct MetaData { public Func<float> getSpeedEvent; public float multiplier; public int numberSpacing; public GameObject? speedMeterPrefab; } private float multiplier; private const float posSpacing = 66f; private int numberSpacing; private float speed; private event Func<float>? getSpeedEvent; public void Init(MetaData metaData) { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)metaData.speedMeterPrefab == (Object)null) { return; } Transform child = ((Component)this).transform.GetChild("Offset"); if ((Object)(object)child == (Object)null) { return; } this.getSpeedEvent = metaData.getSpeedEvent; multiplier = metaData.multiplier; numberSpacing = metaData.numberSpacing; for (int i = 1; i < child.childCount; i++) { Object.Destroy((Object)(object)((Component)child.GetChild(i)).gameObject); } if (numberSpacing > 0) { float num = 0f; for (int j = numberSpacing; j <= 200; j += numberSpacing) { RectTransform val = (RectTransform)Object.Instantiate<GameObject>(metaData.speedMeterPrefab, child).transform; val.anchoredPosition = new Vector2(0f, num); ((Component)((Transform)val).GetChild(0)).GetComponent<TMP_Text>().text = j.ToString(); num += 66f; } } } private void LateUpdate() { //IL_0082: 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) speed = Mathf.Lerp(speed, Mathf.Clamp((this.getSpeedEvent?.Invoke() * multiplier).GetValueOrDefault(), 0f, 200f), 7.5f * Time.smoothDeltaTime); ((RectTransform)((Component)this).transform).anchoredPosition = new Vector2(0f, (0f - speed) * 66f / (float)numberSpacing); } } public sealed class JetpackHMDSpeedText : MonoBehaviour { public struct MetaData { public Func<float> getSpeedEvent; public float multiplier; } private float multiplier = 1f; private Transform? digit100; private Transform? digit10; private Transform? digit1; private float realSpeed; private event Func<float>? getSpeedEvent; public void Init(MetaData metaData) { Transform child = ((Component)this).transform.GetChild("Offset"); if (!((Object)(object)child == (Object)null)) { this.getSpeedEvent = metaData.getSpeedEvent; multiplier = metaData.multiplier; digit100 = child.GetChild(0); digit10 = child.GetChild(1); digit1 = child.GetChild(2); } } private void LateUpdate() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown //IL_012b: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: 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) if (!((Object)(object)digit100 == (Object)null) && !((Object)(object)digit10 == (Object)null) && !((Object)(object)digit1 == (Object)null)) { realSpeed = Mathf.Lerp(realSpeed, Mathf.Clamp((this.getSpeedEvent?.Invoke() * multiplier).GetValueOrDefault(), 0f, 999f), 7.5f * Time.smoothDeltaTime); RectTransform val = (RectTransform)digit100; float num = realSpeed * 0.01f; num = Mathf.Floor(num) + Mathf.Clamp01((Mathf.Repeat(num, 1f) - 0.99f) * 100f); if (num >= 1f) { val.anchoredPosition = new Vector2(-22f, (0f - (Mathf.Repeat(num, 10f) + 2f)) * 17.7f); } else { val.anchoredPosition = new Vector2(-22f, (0f - num) * 17.7f); } RectTransform val2 = (RectTransform)digit10; float num2 = realSpeed * 0.1f; num2 = Mathf.Floor(num2) + Mathf.Clamp01((Mathf.Repeat(num2, 1f) - 0.9f) * 10f); if (num2 >= 1f) { val2.anchoredPosition = new Vector2(-11f, (0f - (Mathf.Repeat(num2, 10f) + 2f)) * 17.7f); } else { val2.anchoredPosition = new Vector2(-11f, (0f - num2) * 17.7f); } ((RectTransform)digit1).anchoredPosition = new Vector2(0f, (0f - Mathf.Repeat(Mathf.Clamp(realSpeed, 0f, float.MaxValue), 10f)) * 17.7f); } } } public static class JetpackHMDUtility { public static Transform? GetChild(this Transform transform, string name) { for (int i = 0; i < transform.childCount; i++) { Transform child = transform.GetChild(i); if ((Object)(object)child != (Object)null && ((Object)child).name == name) { return child; } } return null; } public static float? GetAltitude(this Transform transform) { //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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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) RaycastHit[] array = Physics.RaycastAll(transform.position, Vector3.down, 1000f, ~LayerMask.GetMask(new string[6] { "Player", "Enemies", "LineOfSight", "PlaceableShipObjects", "PhysicsObject", "MapHazards" }), (QueryTriggerInteraction)1); if (array.Length != 0) { float y2 = transform.position.y; RaycastHit val = array.Aggregate((RaycastHit x, RaycastHit y) => (!(((RaycastHit)(ref x)).point.y > ((RaycastHit)(ref y)).point.y)) ? y : x); return y2 - ((RaycastHit)(ref val)).point.y; } return null; } } public sealed class JetpackHMDVerticalSpeedIndicator : MonoBehaviour { public struct MetaData { public Func<float> getSpeedEvent; public float multiplier; } private float multiplier = 1f; private TMP_Text? text; private float realSpeed; private event Func<float>? getSpeedEvent; public void Init(MetaData metaData) { this.getSpeedEvent = metaData.getSpeedEvent; multiplier = metaData.multiplier; text = ((Component)this).GetComponent<TMP_Text>(); } private void Update() { if (!((Object)(object)text == (Object)null)) { realSpeed = Mathf.Lerp(realSpeed, (this.getSpeedEvent?.Invoke() * multiplier).GetValueOrDefault(), 7.5f * Time.smoothDeltaTime); text.text = Mathf.Round(realSpeed) + " VS"; } } } }