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 InsanityDisplay v1.3.3
plugins/InsanityDisplay/InsanityDisplay.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using LC_InsanityDisplay.ModCompatibility; using LC_InsanityDisplay.Plugin; using LC_InsanityDisplay.Plugin.ModCompatibility; using LC_InsanityDisplay.Plugin.UI; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using On; using On.GameNetcodeStuff; using TMPro; using Unity.Netcode; using UnityEngine; 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: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("InsanityDisplay.Confusified.com.GitHub")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.3.3.0")] [assembly: AssemblyInformationalVersion("1.3.3+61b604d108ae2104b6abcbcb5a8d9eefef2d1577")] [assembly: AssemblyProduct("Insanity Display")] [assembly: AssemblyTitle("InsanityDisplay.Confusified.com.GitHub")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.3.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.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; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LC_InsanityDisplay { public static class MyPluginInfo { public const string PLUGIN_GUID = "InsanityDisplay.Confusified.com.GitHub"; public const string PLUGIN_NAME = "Insanity Display"; public const string PLUGIN_VERSION = "1.3.3"; } } namespace LC_InsanityDisplay.ModCompatibility { public class InfectedCompanyCompatibility : MonoBehaviour { [CompilerGenerated] private static class <>O { public static hook_StartGame <0>__RoundStarted; public static EventHandler <1>__UpdateInfectedCompanyHUD; public static EventHandler <2>__ToggleInfectedOnly; } internal const string ModGUID = "InfectedCompany.InfectedCompany"; private static readonly WaitUntil WaitUntilSpawningEnemies = new WaitUntil((Func<bool>)(() => RoundManager.Instance.currentLevel.spawnEnemiesAndScrap)); private static readonly WaitForSeconds WaitSetSeconds = new WaitForSeconds(5f); public static GameObject InfectedMeter { get; private set; } = null; public static Slider InfectedMeterComponent { get; private set; } = null; public static bool IsPlayerInfected { get; internal set; } = false; public static bool IsInfectedCompanyEnabled { get; private set; } = false; public static bool OnlyUseInfectedCompany { get; private set; } = false; private static void Initialize() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__RoundStarted; if (obj == null) { hook_StartGame val = RoundStarted; <>O.<0>__RoundStarted = val; obj = (object)val; } StartOfRound.StartGame += (hook_StartGame)obj; IsInfectedCompanyEnabled = ConfigHandler.Compat.InfectedCompany.Value; OnlyUseInfectedCompany = ConfigHandler.Compat.InfectedCompany_InfectedOnly.Value; ConfigHandler.Compat.InfectedCompany.SettingChanged += UpdateInfectedCompanyHUD; ConfigHandler.Compat.InfectedCompany_InfectedOnly.SettingChanged += ToggleInfectedOnly; } private static void UpdateInfectedCompanyHUD(object sender, EventArgs e) { IsInfectedCompanyEnabled = ConfigHandler.Compat.InfectedCompany.Value; if (!IsInfectedCompanyEnabled) { if (IsPlayerInfected) { InfectedMeter.SetActive(true); } else if (!OnlyUseInfectedCompany) { HUDInjector.InsanityMeter.SetActive(true); } } else if (IsPlayerInfected) { InfectedMeter.SetActive(false); HUDInjector.InsanityMeter.SetActive(true); } else if (OnlyUseInfectedCompany) { HUDInjector.InsanityMeter.SetActive(false); } HUDBehaviour.UpdateMeter(settingChanged: true); } private static void ToggleInfectedOnly(object sender, EventArgs e) { OnlyUseInfectedCompany = ConfigHandler.Compat.InfectedCompany_InfectedOnly.Value; if (!IsInfectedCompanyEnabled) { if (IsPlayerInfected) { InfectedMeter.SetActive(true); } if (!OnlyUseInfectedCompany) { HUDInjector.InsanityMeter.SetActive(true); } } else if (OnlyUseInfectedCompany && !IsPlayerInfected) { HUDInjector.InsanityMeter.SetActive(false); } else { HUDInjector.InsanityMeter.SetActive(true); } HUDBehaviour.UpdateMeter(settingChanged: true); } private static void Start() { Slider[] array = Object.FindObjectsOfType<Slider>(true); Slider[] array2 = array; foreach (Slider val in array2) { if (((Object)((Component)val).gameObject).name == "InsanityMeter") { InfectedMeterComponent = val; InfectedMeter = ((Component)val).gameObject; break; } } if (Object.op_Implicit((Object)(object)InfectedMeter)) { IsPlayerInfected = false; } } private static void RoundStarted(orig_StartGame orig, StartOfRound self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)InfectedMeter)) { ((MonoBehaviour)Initialise.Instance).StartCoroutine(CheckIfInfectedOnStart()); } } private static IEnumerator CheckIfInfectedOnStart() { yield return WaitUntilSpawningEnemies; yield return WaitSetSeconds; if (InfectedMeter.activeSelf) { IsPlayerInfected = true; } else { IsPlayerInfected = false; } if (IsInfectedCompanyEnabled) { if (IsPlayerInfected) { InfectedMeter.SetActive(false); HUDInjector.InsanityMeter.SetActive(true); yield break; } InfectedMeter.SetActive(true); if (OnlyUseInfectedCompany && HUDInjector.InsanityMeter.activeSelf) { HUDInjector.InsanityMeter.SetActive(false); } } else if (!OnlyUseInfectedCompany) { HUDInjector.InsanityMeter.SetActive(true); } } } public class LethalCompanyVRCompatibility { internal const string ModGUID = "io.daxcess.lcvr"; private static void Initialize() { Chainloader.PluginInfos.TryGetValue("io.daxcess.lcvr", out var value); ConfigFile config = value.Instance.Config; ConfigEntry<bool> val = default(ConfigEntry<bool>); foreach (ConfigDefinition key in config.Keys) { if (key.Key == "DisableVR" && config.TryGetEntry<bool>(key, ref val)) { if (val.Value) { break; } CompatibleDependencyAttribute.IsLCVRPresent = true; } } } } } namespace LC_InsanityDisplay.Plugin { public class ConfigHandler { public enum CenteredIconSettings { Never, AvoidOverlap, Always } public class Compat { public static ConfigEntry<bool> LCCrouchHUD { get; internal set; } public static ConfigEntry<bool> An0nPatches { get; internal set; } public static ConfigEntry<bool> LethalCompanyPatched { get; internal set; } public static ConfigEntry<bool> EladsHUD { get; internal set; } public static ConfigEntry<bool> GeneralImprovements { get; internal set; } public static ConfigEntry<bool> HealthMetrics { get; internal set; } public static ConfigEntry<bool> DamageMetrics { get; internal set; } public static ConfigEntry<bool> LethalCompanyVR { get; internal set; } public static ConfigEntry<bool> InfectedCompany { get; internal set; } public static ConfigEntry<bool> InfectedCompany_InfectedOnly { get; internal set; } public static ConfigEntry<bool> ShyHUD { get; internal set; } } public static byte CurrentVersion = 3; public static ConfigEntry<bool> ModEnabled { get; internal set; } = null; public static ConfigEntry<string> MeterColor { get; internal set; } = null; public static ConfigEntry<bool> useAccurateDisplay { get; internal set; } = null; public static ConfigEntry<bool> enableReverse { get; internal set; } = null; public static ConfigEntry<bool> alwaysFull { get; internal set; } = null; public static ConfigEntry<CenteredIconSettings> iconAlwaysCentered { get; internal set; } = null; public static ConfigEntry<byte> ConfigVersion { get; internal set; } = null; public static void InitialiseConfig() { ModEnabled = Initialise.modConfig.Bind<bool>("Display Settings", "Meter enabled", true, "Add a meter which displays your current insanity level?"); MeterColor = Initialise.modConfig.Bind<string>("Display Settings", "Color of the Meter", "7300A6FF", "The colour that the insanity meter will have\n The colour value must be in HEX\nExample: FFFFFF(FF) (White)"); useAccurateDisplay = Initialise.modConfig.Bind<bool>("Display Settings", "Accurate meter", true, "Show your insanity value more accurately, instead of showing it in the vanilla way"); enableReverse = Initialise.modConfig.Bind<bool>("Display Settings", "Sanity Meter", false, "Turn the insanity meter into a sanity meter"); alwaysFull = Initialise.modConfig.Bind<bool>("Display Settings", "Always Show", false, "Always show the insanity meter, for aesthetic purposes"); iconAlwaysCentered = Initialise.modConfig.Bind<CenteredIconSettings>("Display Settings", "Center Player Icon", CenteredIconSettings.AvoidOverlap, "Always have the player icon centered, instead of it moving to it's vanilla position when the insanity meter is not visible"); Compat.LCCrouchHUD = Initialise.modConfig.Bind<bool>("CrouchHUD Compatibility Settings", "Enable CrouchHUD compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.An0nPatches = Initialise.modConfig.Bind<bool>("An0n Patches Compatibility Settings", "Enable An0n Patches compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.LethalCompanyPatched = Initialise.modConfig.Bind<bool>("LethalCompanyPatched Compatibility Settings", "Enable LethalCompanyPatched compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.EladsHUD = Initialise.modConfig.Bind<bool>("Elads HUD Compatibility Settings", "Enable Elads HUD compatibility", true, "Enabling this will add another bar above the stamina bar displaying your insanity level"); Compat.GeneralImprovements = Initialise.modConfig.Bind<bool>("GeneralImprovements Compatibility Settings", "Enable GeneralImprovements compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.HealthMetrics = Initialise.modConfig.Bind<bool>("HealthMetrics Compatibility Settings", "Enable HealthMetrics compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.DamageMetrics = Initialise.modConfig.Bind<bool>("DamageMetrics Compatibility Settings", "Enable DamageMetrics compatibility", true, "Enabling this will adjust the hud to avoid overlapping"); Compat.LethalCompanyVR = Initialise.modConfig.Bind<bool>("LethalCompanyVR Compatibility Settings", "Enable LethalCompanyVR compatibility", true, "Enabling this will add the insanity meter to the hud in VR"); Compat.InfectedCompany = Initialise.modConfig.Bind<bool>("InfectedCompany Compatibility Settings", "Enable InfectedCompany compatibility", true, "Enabling this will hide InfectedCompany's insanity meter and use this mod's insanity meter instead"); Compat.InfectedCompany_InfectedOnly = Initialise.modConfig.Bind<bool>("InfectedCompany Compatibility Settings", "Only show Insanity Meter when infected", false, "Enabling this will only show the insanity meter when you are the infected"); Compat.ShyHUD = Initialise.modConfig.Bind<bool>("ShyHUD Compatibility Settings", "Enable ShyHUD compatibility", true, "Enabling this will hide the insanity meter when it's full"); ConfigVersion = Initialise.modConfig.Bind<byte>("z Do Not Touch z", "Config Version", (byte)0, "The current version of your config file"); RemoveDeprecatedSettings(); FixColor(); } internal static void SettingChanged(object sender = null, EventArgs e = null) { if (Object.op_Implicit((Object)(object)HUDInjector.InsanityMeter)) { HUDBehaviour.UpdateMeter(settingChanged: true); } if (Object.op_Implicit((Object)(object)HUDBehaviour.PlayerIcon) && Object.op_Implicit((Object)(object)HUDBehaviour.PlayerRedIcon)) { HUDBehaviour.UpdateIconPosition(settingChanged: true); } } internal static void FixColor(object obj = null, EventArgs args = null) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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) if (MeterColor.Value.StartsWith("#")) { MeterColor.Value.Substring(1); } Color val = default(Color); ColorUtility.TryParseHtmlString("#" + MeterColor.Value, ref val); if (val.a != 1f) { val.a = 1f; } MeterColor.Value = ColorUtility.ToHtmlStringRGBA(val); HUDBehaviour.InsanityMeterColor = val; if (Object.op_Implicit((Object)(object)HUDInjector.InsanityMeter)) { HUDBehaviour.UpdateMeter(settingChanged: true); } } public static void RemoveDeprecatedSettings() { //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_03e7: Unknown result type (might be due to invalid IL or missing references) byte value = ConfigVersion.Value; if (value == CurrentVersion) { return; } if (value < 2) { ConfigEntry<bool> val = Initialise.modConfig.Bind<bool>("Display Settings", "Always Centered Player Icon", true, (ConfigDescription)null); if (val.Value) { iconAlwaysCentered.Value = CenteredIconSettings.Always; } else { iconAlwaysCentered.Value = CenteredIconSettings.AvoidOverlap; } Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable LCCrouchHUD compatibility", true, (ConfigDescription)null); Compat.LCCrouchHUD.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable An0n Patches compatibility", true, (ConfigDescription)null); Compat.An0nPatches.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable Elads HUD compatibility", true, (ConfigDescription)null); Compat.EladsHUD.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable GeneralImprovements compatibility", true, (ConfigDescription)null); Compat.GeneralImprovements.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable HealthMetrics compatibility", true, (ConfigDescription)null); Compat.HealthMetrics.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable DamgeMetrics compatibility", true, (ConfigDescription)null); Compat.DamageMetrics.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable LethalCompanyVR compatibility", true, (ConfigDescription)null); Compat.LethalCompanyVR.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Enable InfectedCompany compatibility", true, (ConfigDescription)null); Compat.InfectedCompany.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Mod Compatibility Settings", "Only show Insanity Meter when infected", true, (ConfigDescription)null); Compat.InfectedCompany_InfectedOnly.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); if (value < 1) { val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable LCCrouchHUD compatibility", true, (ConfigDescription)null); Compat.LCCrouchHUD.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable An0n Patches compatibility", true, (ConfigDescription)null); Compat.An0nPatches.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable Elads HUD compatibility", true, (ConfigDescription)null); Compat.EladsHUD.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable GeneralImprovements compatibility", true, (ConfigDescription)null); Compat.GeneralImprovements.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable HealthMetrics compatibility", true, (ConfigDescription)null); Compat.HealthMetrics.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); val = Initialise.modConfig.Bind<bool>("Compatibility Settings", "Enable DamageMetrics compatibility", true, (ConfigDescription)null); Compat.DamageMetrics.Value = val.Value; Initialise.modConfig.Remove(((ConfigEntryBase)val).Definition); ConfigEntry<Color> val2 = Initialise.modConfig.Bind<Color>("Display Settings", "Color of the meter", new Color(0.45f, 0f, 0.65f, 1f), (ConfigDescription)null); MeterColor.Value = ColorUtility.ToHtmlStringRGB(val2.Value); Initialise.modConfig.Remove(((ConfigEntryBase)val2).Definition); } } PropertyInfo property = ((object)Initialise.modConfig).GetType().GetProperty("OrphanedEntries", BindingFlags.Instance | BindingFlags.NonPublic); Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)property.GetValue(Initialise.modConfig, null); dictionary.Clear(); ConfigVersion.Value = CurrentVersion; Initialise.Logger.LogDebug((object)$"Succesfully updated config file version from {value} => {CurrentVersion}"); } } [CompatibleDependency("ainavt.lc.lethalconfig", typeof(LethalConfigCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("BMX.LobbyCompatibility", typeof(LobbyCompatibility_Compatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("LCCrouchHUD", typeof(CrouchHUDCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("ShaosilGaming.GeneralImprovements", typeof(GeneralImprovementsCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("com.an0n.patch", typeof(An0nPatchesCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("LethalCompanyPatched", typeof(An0nPatchesCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("me.eladnlg.customhud", typeof(EladsHUDCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("Matsuura.HealthMetrics", typeof(HealthMetricsCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("Matsuura.TestAccount666.DamageMetrics", typeof(DamageMetricsCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("io.daxcess.lcvr", typeof(LethalCompanyVRCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("InfectedCompany.InfectedCompany", typeof(InfectedCompanyCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [CompatibleDependency("ShyHUD", typeof(ShyHUDCompatibility))] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("InsanityDisplay.Confusified.com.GitHub", "Insanity Display", "1.3.3")] public class Initialise : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static hook_SetSavedValues <0>__InjectIntoHud; public static hook_SetPlayerSanityLevel <1>__InsanityValueChanged; } public static readonly string configLocation = Utility.CombinePaths(new string[1] { Paths.ConfigPath + "\\" + "InsanityDisplay.Confusified.com.GitHub".Substring(16, 12).Replace(".", "\\") + "InsanityDisplay.Confusified.com.GitHub".Substring(0, 15) }); public static ConfigFile modConfig = new ConfigFile(configLocation + ".cfg", false); internal static ManualLogSource Logger { get; private set; } = null; internal static Initialise Instance { get; private set; } = null; public void Awake() { Logger = Logger.CreateLogSource("InsanityDisplay.Confusified.com.GitHub"); Logger = Logger; Instance = this; ConfigHandler.InitialiseConfig(); if (!ConfigHandler.ModEnabled.Value) { Logger.LogInfo((object)"Stopped loading Insanity Display 1.3.3, as it is disabled through the config file"); Object.Destroy((Object)(object)this); return; } CompatibleDependencyAttribute.Init((BaseUnityPlugin)(object)this); Logger.LogDebug((object)"Checked for compatible mods"); Hook(); Logger.LogDebug((object)"Hooked"); Logger.LogInfo((object)"Insanity Display v1.3.3 loaded"); } private static void Hook() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_003f: 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_004a: Expected O, but got Unknown Logger.LogDebug((object)"Hooking..."); object obj = <>O.<0>__InjectIntoHud; if (obj == null) { hook_SetSavedValues val = HUDInjector.InjectIntoHud; <>O.<0>__InjectIntoHud = val; obj = (object)val; } HUDManager.SetSavedValues += (hook_SetSavedValues)obj; object obj2 = <>O.<1>__InsanityValueChanged; if (obj2 == null) { hook_SetPlayerSanityLevel val2 = HUDBehaviour.InsanityValueChanged; <>O.<1>__InsanityValueChanged = val2; obj2 = (object)val2; } PlayerControllerB.SetPlayerSanityLevel += (hook_SetPlayerSanityLevel)obj2; } } internal class CompatibleDependencyAttribute : BepInDependency { public static bool IsEladsHudPresent; public static bool IsLCVRPresent; public static bool ShyHUDPresent; public Type Handler; private const BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.NonPublic; private static IEnumerable<CompatibleDependencyAttribute> attributes; internal CompatibleDependencyAttribute(string guid, Type handlerType) : base(guid, (DependencyFlags)2) { Handler = handlerType; } internal static void Init(BaseUnityPlugin source) { attributes = ((MemberInfo)((object)source).GetType()).GetCustomAttributes<CompatibleDependencyAttribute>(); foreach (CompatibleDependencyAttribute attribute in attributes) { InvokeMethodIfFound(attribute, "Initialize"); } } internal static void Activate() { foreach (CompatibleDependencyAttribute attribute in attributes) { InvokeMethodIfFound(attribute, "Start"); } } private static void InvokeMethodIfFound(CompatibleDependencyAttribute attribute, string methodToRun) { if (attribute != null && IsModPresent(((BepInDependency)attribute).DependencyGUID)) { attribute.Handler.GetMethod(methodToRun, BindingFlags.Static | BindingFlags.NonPublic)?.Invoke(null, null); } } internal static bool IsModPresent(string ModGUID) { return Chainloader.PluginInfos.ContainsKey(ModGUID); } } } namespace LC_InsanityDisplay.Plugin.ModCompatibility { public class An0nPatchesCompatibility { internal const string ModGUID = "com.an0n.patch"; internal const string AlternateModGUID = "LethalCompanyPatched"; private static GameObject An0nTextHUD = null; private static Transform An0nTransform = null; private static Vector3 localPositionOffset = new Vector3(3f, 15f, 0f); private static Vector3 localPosition = Vector3.zero; private static bool DisableAn0nHud = false; private static void Initialize() { DisableAn0nHud = CompatibleDependencyAttribute.IsEladsHudPresent || CompatibleDependencyAttribute.IsLCVRPresent; if (!DisableAn0nHud) { ConfigHandler.Compat.An0nPatches.SettingChanged += UpdateAn0nDisplay; ConfigHandler.Compat.LethalCompanyPatched.SettingChanged += UpdateAn0nDisplay; } } private static void Start() { //IL_0063: 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_0079: 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) if (DisableAn0nHud) { return; } Animator[] componentsInChildren = HUDInjector.TopLeftHUD.GetComponentsInChildren<Animator>(true); Animator[] array = componentsInChildren; foreach (Animator val in array) { if (!(((Object)val).name != "HPSP")) { An0nTextHUD = ((Component)val).gameObject; break; } } if (Object.op_Implicit((Object)(object)An0nTextHUD)) { An0nTransform = An0nTextHUD.transform; if (localPosition == Vector3.zero) { localPosition = An0nTransform.localPosition; } UpdateAn0nDisplay(); } } private static void UpdateAn0nDisplay(object sender = null, EventArgs e = null) { //IL_001a: 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_0075: 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_006e: 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) if (!((Object)(object)An0nTextHUD == (Object)null) && !((Object)(object)An0nTransform == (Object)null) && !(localPosition == Vector3.zero)) { bool flag = (CompatibleDependencyAttribute.IsModPresent("com.an0n.patch") && ConfigHandler.Compat.An0nPatches.Value) || (CompatibleDependencyAttribute.IsModPresent("LethalCompanyPatched") && ConfigHandler.Compat.LethalCompanyPatched.Value); An0nTransform.SetLocalPositionAndRotation(flag ? (localPosition + localPositionOffset) : localPosition, An0nTransform.localRotation); } } } public class CrouchHUDCompatibility { internal const string ModGUID = "LCCrouchHUD"; private static GameObject CrouchHUD = null; private static Transform IconTransform = null; private static Vector3 positionToLocal = Vector3.zero; private static Vector3 localPositionOffset = new Vector3(3f, 7f, 0f); private static bool DisableCrouchHUD = false; private static void Initialize() { DisableCrouchHUD = CompatibleDependencyAttribute.IsEladsHudPresent || CompatibleDependencyAttribute.IsLCVRPresent; if (!DisableCrouchHUD) { ConfigHandler.Compat.LCCrouchHUD.SettingChanged += UpdateIconPosition; } } private static void Start() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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) if (DisableCrouchHUD) { return; } Transform transform = HUDBehaviour.PlayerIcon.transform; CrouchHUD = ((Component)transform.GetChild(transform.childCount - 1)).gameObject; if (Object.op_Implicit((Object)(object)CrouchHUD)) { IconTransform = CrouchHUD.transform; if (positionToLocal == Vector3.zero) { positionToLocal = IconTransform.localPosition; } UpdateIconPosition(); } } private static void UpdateIconPosition(object sender = null, EventArgs e = null) { //IL_001a: 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_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_004e: 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_0058: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)CrouchHUD == (Object)null) && !((Object)(object)IconTransform == (Object)null) && !(positionToLocal == Vector3.zero)) { IconTransform.SetLocalPositionAndRotation(ConfigHandler.Compat.LCCrouchHUD.Value ? (positionToLocal + localPositionOffset) : positionToLocal, IconTransform.localRotation); } } } public class DamageMetricsCompatibility { internal const string ModGUID = "Matsuura.TestAccount666.DamageMetrics"; private static GameObject DamageMeter = null; private static Transform MeterTransform = null; private static Vector3 localPositionOffset = new Vector3(-10f, 0f, 0f); private static Vector3 localPosition = Vector3.zero; private static bool DisableDamageMetrics; private static void Initialize() { DisableDamageMetrics = CompatibleDependencyAttribute.IsEladsHudPresent || CompatibleDependencyAttribute.IsLCVRPresent; if (!DisableDamageMetrics) { ConfigHandler.Compat.DamageMetrics.SettingChanged += UpdateHealthMeter; } } private static void Start() { //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) if (!DisableDamageMetrics) { DamageMeter = HealthMetricsCompatibility.Shared_FetchHUDDisplay(); if (Object.op_Implicit((Object)(object)DamageMeter)) { MeterTransform = DamageMeter.transform; localPosition = DamageMeter.transform.localPosition; UpdateHealthMeter(); } } } internal static void UpdateHealthMeter(object sender = null, EventArgs e = null) { //IL_001a: 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_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_004e: 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_0058: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)DamageMeter == (Object)null) && !((Object)(object)MeterTransform == (Object)null) && !(localPosition == Vector3.zero)) { MeterTransform.SetLocalPositionAndRotation(ConfigHandler.Compat.DamageMetrics.Value ? (localPosition + localPositionOffset) : localPosition, MeterTransform.localRotation); } } } public class EladsHUDCompatibility { internal const string ModGUID = "me.eladnlg.customhud"; internal const string OxygenGUID = "consequential.Oxygen"; private static bool EladsHUDEnabled; private static Vector3 InsanityBarOffset = new Vector3(0f, 8f, 0f); private static Vector3 PercentageObjectOffset = new Vector3(0f, 26.4f, 0f); private static Vector3 BatteryLayoutOffset = new Vector3(-16f, 4f, 0f); private static Vector3 PTTOffset = new Vector3(120f, 20f, 0f); private static int oldBarFill = -1; internal static GameObject InsanityPercentageObject { get; private set; } = null; private static GameObject EladsHUDObject { get; set; } = null; private static TextMeshProUGUI InsanityPercentageText { get; set; } = null; private static Transform BatteryLayoutTransform { get; set; } = null; private static GameObject InsanityMeterShadow { get; set; } = null; private static void Initialize() { if (CompatibleDependencyAttribute.IsLCVRPresent) { Initialise.Logger.LogDebug((object)"Elad's HUD and LCVR are both found, they are not compatible with each other"); return; } CompatibleDependencyAttribute.IsEladsHudPresent = true; ConfigHandler.Compat.EladsHUD.SettingChanged += UpdateVisibility; } private static void Start() { //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: 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_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_03b2: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) if (CompatibleDependencyAttribute.IsLCVRPresent || !ConfigHandler.Compat.EladsHUD.Value) { return; } GameObject val = null; CanvasGroup[] componentsInChildren = ((Component)HUDInjector.TopLeftHUD.transform.parent).GetComponentsInChildren<CanvasGroup>(true); foreach (CanvasGroup val2 in componentsInChildren) { if (((Object)val2).name == "PlayerInfo(Clone)") { val = ((Component)((Component)val2).transform.Find("Stamina")).gameObject; EladsHUDObject = ((Component)val2).gameObject; } if ((Object)(object)val != (Object)null) { break; } } if ((Object)(object)val == (Object)null) { Initialise.Logger.LogError((object)"Could not find Elad's Hud Stamina bar"); return; } BatteryLayoutTransform = EladsHUDObject.transform.GetChild(2); ((Component)val.transform.GetChild(1)).gameObject.SetActive(false); ((Component)val.transform.GetChild(2)).gameObject.SetActive(false); HUDInjector.InsanityMeter = Object.Instantiate<GameObject>(val, EladsHUDObject.transform); HUDInjector.InsanityMeter.SetActive(false); ((Object)HUDInjector.InsanityMeter).name = "InsanityMeter"; ((Component)val.transform.GetChild(1)).gameObject.SetActive(true); ((Component)val.transform.GetChild(2)).gameObject.SetActive(true); Initialise.Logger.LogDebug((object)"Created insanity bar"); InsanityMeterShadow = ((Component)HUDInjector.InsanityMeter.transform.GetChild(0)).gameObject; ((Object)InsanityMeterShadow).name = "Insanity BG"; GameObject gameObject = ((Component)HUDInjector.InsanityMeter.transform.GetChild(1)).gameObject; InsanityPercentageObject = ((Component)HUDInjector.InsanityMeter.transform.GetChild(2)).gameObject; ((Object)InsanityPercentageObject).name = "InsanityInfo"; if (CompatibleDependencyAttribute.IsModPresent("consequential.Oxygen")) { Transform transform = InsanityPercentageObject.transform; transform.localPosition += InsanityBarOffset; } InsanityPercentageText = InsanityPercentageObject.GetComponent<TextMeshProUGUI>(); ((TMP_Text)InsanityPercentageText).horizontalAlignment = (HorizontalAlignmentOptions)4; Image[] componentsInChildren2 = HUDInjector.InsanityMeter.gameObject.GetComponentsInChildren<Image>(); foreach (Image val3 in componentsInChildren2) { if (Object.op_Implicit((Object)(object)((Component)val3).gameObject.GetComponent<Mask>())) { HUDInjector.InsanityMeterComponent = val3; ((Object)((Component)val3).transform).name = "InsanityBar"; break; } } if ((Object)(object)HUDInjector.InsanityMeterComponent == (Object)null) { Initialise.Logger.LogError((object)"InsanityMeterComponent is null (BAD)"); return; } GameObject gameObject2 = ((Component)((Component)HUDInjector.InsanityMeterComponent).transform.parent.GetChild(1)).gameObject; Object.Destroy((Object)(object)gameObject); Object.Destroy((Object)(object)gameObject2); Transform transform2 = HUDInjector.InsanityMeter.transform; transform2.localPosition += InsanityBarOffset; Transform transform3 = InsanityPercentageObject.transform; transform3.localPosition += PercentageObjectOffset; Transform batteryLayoutTransform = BatteryLayoutTransform; batteryLayoutTransform.localPosition += BatteryLayoutOffset; Chainloader.PluginInfos.TryGetValue("me.eladnlg.customhud", out var value); ConfigFile config = value.Instance.Config; float num = 1f; ConfigEntry<float> val4 = default(ConfigEntry<float>); foreach (ConfigDefinition key in config.Keys) { if (key.Key == "HUDScale" && config.TryGetEntry<float>(key, ref val4)) { num = val4.Value; } } Transform transform4 = ((Component)HUDInjector.HUDManagerInstance.PTTIcon).transform; ((Component)transform4).gameObject.SetActive(false); Transform parent = transform4.parent; transform4.SetParent(InsanityPercentageObject.transform); transform4.position = InsanityPercentageObject.transform.position; transform4.localPosition += PTTOffset; transform4.localScale *= num; transform4.SetParent(parent, true); ((Component)transform4).gameObject.SetActive(true); oldBarFill = -1; InsanityPercentageObject.SetActive(true); HUDInjector.InsanityMeter.SetActive(true); } private static void UpdateVisibility(object sender = null, EventArgs e = null) { EladsHUDEnabled = ConfigHandler.Compat.EladsHUD.Value; _ = EladsHUDEnabled; } internal static void UpdatePercentageText() { int num = (int)MathF.Round(HUDInjector.InsanityMeterComponent.fillAmount * 100f); if (oldBarFill != num) { oldBarFill = num; ((TMP_Text)InsanityPercentageText).text = $"{num}%"; } } internal static void UpdateColour() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) ((Graphic)InsanityPercentageText).color = HUDBehaviour.InsanityMeterColor; } } public class GeneralImprovementsCompatibility { internal const string ModGUID = "ShaosilGaming.GeneralImprovements"; private static GameObject HitpointDisplay = null; private static Vector3 localPosition = Vector3.zero; private static Vector3 localPositionOffset = new Vector3(0f, 22f, 0f); public static bool HitpointDisplayActive = false; private static void Initialize() { ConfigFile config = Chainloader.PluginInfos["ShaosilGaming.GeneralImprovements"].Instance.Config; ConfigEntry<bool> val = default(ConfigEntry<bool>); foreach (ConfigDefinition key in config.Keys) { if (!(key.Key != "ShowHitPoints")) { config.TryGetEntry<bool>(key, ref val); HitpointDisplayActive = val.Value; break; } } if (HitpointDisplayActive) { Initialise.Logger.LogDebug((object)"GI's ShowHitPoints is enabled"); ConfigHandler.Compat.GeneralImprovements.SettingChanged += UpdateDisplayPosition; } } private static void Start() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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) if (!HitpointDisplayActive) { return; } HitpointDisplay = ((Component)HUDInjector.TopLeftHUD.transform.Find("HPUI")).gameObject; if (!Object.op_Implicit((Object)(object)HitpointDisplay)) { Initialise.Logger.LogError((object)"Could not find GI's HP display"); return; } if (localPosition == Vector3.zero) { localPosition = HitpointDisplay.transform.localPosition; } UpdateDisplayPosition(); } internal static void UpdateDisplayPosition(object sender = null, EventArgs e = null) { //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_003d: 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_0043: Unknown result type (might be due to invalid IL or missing references) if (HitpointDisplayActive && Object.op_Implicit((Object)(object)HitpointDisplay)) { Transform transform = HitpointDisplay.transform; transform.SetLocalPositionAndRotation(ConfigHandler.Compat.GeneralImprovements.Value ? (localPosition + localPositionOffset) : localPosition, transform.localRotation); Initialise.Logger.LogDebug((object)"Repositioned GI's HP UI"); } } } public class HealthMetricsCompatibility { internal const string ModGUID = "Matsuura.HealthMetrics"; private static GameObject HealthMeter = null; private static Transform MeterTransform = null; private static Vector3 localPositionOffset = new Vector3(-2f, 0f, 0f); private static Vector3 localPosition = Vector3.zero; private static bool DisableHealthMetrics; private static void Initialize() { DisableHealthMetrics = CompatibleDependencyAttribute.IsEladsHudPresent || CompatibleDependencyAttribute.IsLCVRPresent; if (!DisableHealthMetrics) { ConfigHandler.Compat.HealthMetrics.SettingChanged += UpdateHealthMeter; } } private static void Start() { //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) if (!DisableHealthMetrics) { HealthMeter = Shared_FetchHUDDisplay(); if (Object.op_Implicit((Object)(object)HealthMeter)) { MeterTransform = HealthMeter.transform; localPosition = HealthMeter.transform.localPosition; UpdateHealthMeter(); } } } internal static void UpdateHealthMeter(object sender = null, EventArgs e = null) { //IL_001a: 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_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_004e: 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_0058: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)HealthMeter == (Object)null) && !((Object)(object)MeterTransform == (Object)null) && !(localPosition == Vector3.zero)) { MeterTransform.SetLocalPositionAndRotation(ConfigHandler.Compat.HealthMetrics.Value ? (localPosition + localPositionOffset) : localPosition, MeterTransform.localRotation); } } internal static GameObject Shared_FetchHUDDisplay() { TextMeshProUGUI[] componentsInChildren = HUDInjector.TopLeftHUD.GetComponentsInChildren<TextMeshProUGUI>(true); TextMeshProUGUI[] array = componentsInChildren; foreach (TextMeshProUGUI val in array) { if (((Object)((Component)val).gameObject).name == "HealthHUDDisplay") { return ((Component)val).gameObject; } } return null; } } public class LethalConfigCompatibility { internal const string ModGUID = "ainavt.lc.lethalconfig"; private static void Initialize() { //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Expected O, but got Unknown LethalConfigManager.SkipAutoGen(); TextInputFieldConfigItem val = new TextInputFieldConfigItem(ConfigHandler.MeterColor, new TextInputFieldOptions { CharacterLimit = 9, RequiresRestart = false }); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val); BoolCheckBoxConfigItem val2 = new BoolCheckBoxConfigItem(ConfigHandler.useAccurateDisplay, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.enableReverse, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.alwaysFull, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); EnumDropDownConfigItem<ConfigHandler.CenteredIconSettings> val3 = new EnumDropDownConfigItem<ConfigHandler.CenteredIconSettings>(ConfigHandler.iconAlwaysCentered, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.LCCrouchHUD, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.An0nPatches, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.LethalCompanyPatched, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.EladsHUD, true); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.GeneralImprovements, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.HealthMetrics, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.DamageMetrics, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.InfectedCompany, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.InfectedCompany_InfectedOnly, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); val2 = new BoolCheckBoxConfigItem(ConfigHandler.Compat.ShyHUD, false); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2); LethalConfigManager.SetModDescription("Adds an insanity meter to the hud in vanilla style"); Initialise.Logger.LogDebug((object)"Added entries to LethalConfig"); ConfigHandler.MeterColor.SettingChanged += ConfigHandler.FixColor; ConfigHandler.alwaysFull.SettingChanged += ConfigHandler.SettingChanged; ConfigHandler.enableReverse.SettingChanged += ConfigHandler.SettingChanged; ConfigHandler.iconAlwaysCentered.SettingChanged += ConfigHandler.SettingChanged; } } public class LobbyCompatibility_Compatibility { internal const string ModGUID = "BMX.LobbyCompatibility"; private static void Initialize() { PluginHelper.RegisterPlugin("InsanityDisplay.Confusified.com.GitHub", Version.Parse("1.3.3"), (CompatibilityLevel)0, (VersionStrictness)0); } } public class ShyHUDCompatibility { [CompilerGenerated] private static class <>O { public static hook_LateUpdate <0>__UpdateMeterFade; public static EventHandler <1>__UpdateSetting; } internal const string ModGUID = "ShyHUD"; internal static float CurrentTransparency = 1f; internal static bool ShyHUDEnabled; private static bool FadeToZero = false; private static bool FadeToOne = false; private static CanvasRenderer InsanityMeterCanvasRenderer { get; set; } = null; private static void Initialize() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown CompatibleDependencyAttribute.ShyHUDPresent = true; if (!CompatibleDependencyAttribute.IsEladsHudPresent) { UpdateSetting(); object obj = <>O.<0>__UpdateMeterFade; if (obj == null) { hook_LateUpdate val = UpdateMeterFade; <>O.<0>__UpdateMeterFade = val; obj = (object)val; } PlayerControllerB.LateUpdate += (hook_LateUpdate)obj; ConfigHandler.Compat.ShyHUD.SettingChanged += UpdateSetting; } } private static void Start() { if (!CompatibleDependencyAttribute.IsEladsHudPresent) { CurrentTransparency = 1f; } } internal static void UpdateMeterFade(orig_LateUpdate orig, PlayerControllerB self) { orig.Invoke(self); if (!Object.op_Implicit((Object)(object)HUDInjector.InsanityMeter)) { return; } if (!Object.op_Implicit((Object)(object)InsanityMeterCanvasRenderer)) { InsanityMeterCanvasRenderer = HUDInjector.InsanityMeter.GetComponent<CanvasRenderer>(); } if (Object.op_Implicit((Object)(object)InsanityMeterCanvasRenderer) && ((NetworkBehaviour)self).IsOwner && (!((NetworkBehaviour)self).IsServer || self.isHostPlayerObject) && self.isPlayerControlled && !self.isPlayerDead) { float fillAmount = HUDInjector.InsanityMeterComponent.fillAmount; float alpha = InsanityMeterCanvasRenderer.GetAlpha(); if (ShyHUDEnabled && CurrentTransparency > 0f && !HUDBehaviour.SetAlwaysFull && (HUDBehaviour.CurrentMeterFill >= 0.9101f || HUDBehaviour.CurrentMeterFill <= 0.2976f) && !FadeToZero) { FadeToZero = true; FadeToOne = false; ((Graphic)HUDInjector.InsanityMeterComponent).CrossFadeAlpha(0f, 5f, false); CurrentTransparency = alpha; } else if ((HUDBehaviour.CurrentMeterFill > 0.2976f && HUDBehaviour.CurrentMeterFill < 0.9101f && !FadeToOne) || (HUDBehaviour.SetAlwaysFull && !FadeToOne)) { FadeToZero = false; FadeToOne = true; ((Graphic)HUDInjector.InsanityMeterComponent).CrossFadeAlpha(1f, 0.5f, false); CurrentTransparency = alpha; } if (alpha >= 0.9999f) { FadeToOne = false; InsanityMeterCanvasRenderer.SetAlpha(1f); CurrentTransparency = 1f; } else if (alpha < 0.0001f) { FadeToZero = false; InsanityMeterCanvasRenderer.SetAlpha(0f); CurrentTransparency = 0f; } } } private static void UpdateSetting(object sender = null, EventArgs e = null) { ShyHUDEnabled = ConfigHandler.Compat.ShyHUD.Value; } } } namespace LC_InsanityDisplay.Plugin.UI { public class HUDInjector { public const string ModName = "InsanityMeter"; public static Vector3 localPositionOffset = new Vector3(-3.4f, 3.7f, 0f); private const float localScaleMultiplier = 0.86f; internal static PlayerControllerB LocalPlayerInstance { get; private set; } = null; internal static HUDManager HUDManagerInstance { get; private set; } = null; internal static GameObject TopLeftHUD { get; private set; } = null; public static GameObject InsanityMeter { get; internal set; } = null; public static Image InsanityMeterComponent { get; internal set; } = null; private static GameObject VanillaSprintMeter { get; set; } = null; public static void InjectIntoHud(orig_SetSavedValues orig, HUDManager self, int playerObjectId = -1) { //IL_00ae: 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_00bd: 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_00cc: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, playerObjectId); if (playerObjectId == -1 || (playerObjectId != -1 && (Object)(object)self.localPlayer == (Object)(object)self.playersManager.allPlayerScripts[playerObjectId])) { HUDManagerInstance = self; LocalPlayerInstance = StartOfRound.Instance.localPlayerController; VanillaSprintMeter = ((Component)LocalPlayerInstance.sprintMeterUI).gameObject; TopLeftHUD = ((Component)VanillaSprintMeter.transform.parent).gameObject; HUDBehaviour.PlayerIcon = ((Component)TopLeftHUD.transform.Find("Self")).gameObject; HUDBehaviour.PlayerRedIcon = ((Component)HUDManagerInstance.selfRedCanvasGroup).gameObject; HUDBehaviour.VanillaIconPosition = HUDBehaviour.PlayerIcon.transform.localPosition; HUDBehaviour.CurrentPosition = HUDBehaviour.VanillaIconPosition; HUDBehaviour.CenteredIconPosition = HUDBehaviour.VanillaIconPosition + HUDBehaviour.IconPositionOffset; Initialise.Logger.LogDebug((object)"Activating compatibilities..."); CompatibleDependencyAttribute.Activate(); Initialise.Logger.LogDebug((object)"Activated all the compatibilities"); Initialise.Logger.LogDebug((object)"Setting up insanity meter..."); CreateMeter(); Initialise.Logger.LogDebug((object)"Finished setting up the insanity meter"); } } private static void CreateMeter() { //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_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_0078: 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_008a: 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) if (!Object.op_Implicit((Object)(object)InsanityMeter)) { InsanityMeter = Object.Instantiate<GameObject>(VanillaSprintMeter, TopLeftHUD.transform); InsanityMeter.SetActive(false); ((Object)InsanityMeter).name = "InsanityMeter"; InsanityMeterComponent = InsanityMeter.GetComponentInChildren<Image>(true); Transform transform = InsanityMeter.transform; transform.SetAsFirstSibling(); transform.SetLocalPositionAndRotation(VanillaSprintMeter.transform.localPosition + localPositionOffset, transform.localRotation); transform.localScale *= 0.86f; } HUDBehaviour.CurrentlySetColor = new Color(0f, 0f, 0f, 0f); HUDBehaviour.LastInsanityLevel = -1f; HUDBehaviour.LastIconPosition = HUDBehaviour.VanillaIconPosition; HUDBehaviour.UpdateMeter(settingChanged: true); if (!Object.op_Implicit((Object)(object)InfectedCompanyCompatibility.InfectedMeter) || !InfectedCompanyCompatibility.IsInfectedCompanyEnabled || !InfectedCompanyCompatibility.OnlyUseInfectedCompany) { InsanityMeter.SetActive(true); } HUDBehaviour.UpdateIconPosition(settingChanged: true); } } internal class HUDBehaviour { public const float accurate_MinValue = 0.2976f; public const float accurate_MaxValue = 0.9101f; public const float accurate_Diff = 0.61249995f; internal static bool SetAlwaysFull; internal static bool ReverseEnabled; internal static bool usingAccurateDisplay; internal static Vector3 CurrentPosition; private static ConfigHandler.CenteredIconSettings IconSetting; private static Vector3 NewPosition; private static bool NeverCenter; private static bool AlwaysCenter; internal static float CurrentMeterFill; private const float lerpNumber1 = 1.179f; private const float lerpNumber2 = 0.337f; private const float lerpNumber3 = 0.03f; public static Color InsanityMeterColor { get; internal set; } public static Color CurrentlySetColor { get; internal set; } public static GameObject PlayerIcon { get; internal set; } = null; public static GameObject PlayerRedIcon { get; internal set; } = null; internal static float LastInsanityLevel { get; set; } = -1f; internal static float InsanityLevel { get; set; } internal static Vector3 LastIconPosition { get; set; } internal static Vector3 IconPositionOffset { get; private set; } = new Vector3(-6.8f, 4f, 0f); internal static Vector3 VanillaIconPosition { get; set; } internal static Vector3 CenteredIconPosition { get; set; } internal static void UpdateMeter(bool settingChanged = false) { //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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)HUDInjector.LocalPlayerInstance) || !Object.op_Implicit((Object)(object)HUDInjector.InsanityMeterComponent)) { return; } if ((settingChanged || (!SetAlwaysFull && (LastInsanityLevel != HUDInjector.LocalPlayerInstance.insanityLevel || (CurrentMeterFill > 0.2976f && LastInsanityLevel == 0f) || (ReverseEnabled && LastInsanityLevel == 0f && CurrentMeterFill < 0.9101f))) || (SetAlwaysFull && CurrentMeterFill != 1f)) && ((!SetAlwaysFull && HUDInjector.InsanityMeter.activeSelf) || SetAlwaysFull)) { CurrentMeterFill = ReturnInsanityLevel(); HUDInjector.InsanityMeterComponent.fillAmount = CurrentMeterFill; if (Object.op_Implicit((Object)(object)EladsHUDCompatibility.InsanityPercentageObject)) { EladsHUDCompatibility.UpdatePercentageText(); } } if (CurrentlySetColor != InsanityMeterColor) { ((Graphic)HUDInjector.InsanityMeterComponent).color = InsanityMeterColor; CurrentlySetColor = InsanityMeterColor; if (Object.op_Implicit((Object)(object)EladsHUDCompatibility.InsanityPercentageObject)) { EladsHUDCompatibility.UpdateColour(); } } } private static float ReturnInsanityLevel() { if (SetAlwaysFull) { return 1f; } if (Object.op_Implicit((Object)(object)InfectedCompanyCompatibility.InfectedMeter) && InfectedCompanyCompatibility.IsInfectedCompanyEnabled && InfectedCompanyCompatibility.IsPlayerInfected) { InsanityLevel = InfectedCompanyCompatibility.InfectedMeterComponent.value; } else { InsanityLevel = HUDInjector.LocalPlayerInstance.insanityLevel / HUDInjector.LocalPlayerInstance.maxInsanityLevel; } if (usingAccurateDisplay != ConfigHandler.useAccurateDisplay.Value) { usingAccurateDisplay = ConfigHandler.useAccurateDisplay.Value; } if (ReverseEnabled != ConfigHandler.enableReverse.Value) { ReverseEnabled = ConfigHandler.enableReverse.Value; } if (usingAccurateDisplay && !Object.op_Implicit((Object)(object)EladsHUDCompatibility.InsanityPercentageObject)) { float num = InsanityLevel * 0.61249995f; if (ReverseEnabled) { return 0.9101f - num; } return 0.2976f + num; } if (ReverseEnabled) { return 1f - InsanityLevel; } return InsanityLevel; } internal static void InsanityValueChanged(orig_SetPlayerSanityLevel orig, PlayerControllerB self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)HUDInjector.InsanityMeterComponent) && !self.isPlayerDead && self.isPlayerControlled) { if (SetAlwaysFull != ConfigHandler.alwaysFull.Value) { SetAlwaysFull = ConfigHandler.alwaysFull.Value; } if (ReverseEnabled != ConfigHandler.enableReverse.Value) { ReverseEnabled = ConfigHandler.enableReverse.Value; } float fillAmount = HUDInjector.InsanityMeterComponent.fillAmount; float insanityLevel = self.insanityLevel; if (((CurrentMeterFill != InsanityLevel || LastInsanityLevel != insanityLevel || CurrentMeterFill != fillAmount) && !SetAlwaysFull) || (SetAlwaysFull && fillAmount != 1f) || (ReverseEnabled && fillAmount < 0.9101f && insanityLevel == 0f && HUDInjector.InsanityMeter.activeSelf)) { UpdateMeter(); } if (Object.op_Implicit((Object)(object)PlayerIcon) && Object.op_Implicit((Object)(object)PlayerRedIcon)) { UpdateIconPosition(); } if (LastInsanityLevel != insanityLevel) { LastInsanityLevel = insanityLevel; } } } internal static void UpdateIconPosition(bool settingChanged = false) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: 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_0140: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) if (CompatibleDependencyAttribute.IsEladsHudPresent) { return; } if (IconSetting != ConfigHandler.iconAlwaysCentered.Value) { IconSetting = ConfigHandler.iconAlwaysCentered.Value; } if (NeverCenter != (IconSetting == ConfigHandler.CenteredIconSettings.Never)) { NeverCenter = IconSetting == ConfigHandler.CenteredIconSettings.Never; } if (AlwaysCenter != (IconSetting == ConfigHandler.CenteredIconSettings.Always)) { AlwaysCenter = IconSetting == ConfigHandler.CenteredIconSettings.Always; } if (settingChanged) { CurrentMeterFill = ReturnInsanityLevel(); } if (((LastIconPosition == VanillaIconPosition && NeverCenter) || (LastIconPosition == CenteredIconPosition && AlwaysCenter) || (CurrentMeterFill >= 0.9101f && LastIconPosition == CenteredIconPosition && !NeverCenter) || (!usingAccurateDisplay && CurrentMeterFill < 0.2976f && LastIconPosition == VanillaIconPosition && !AlwaysCenter) || (usingAccurateDisplay && CurrentMeterFill <= 0.2976f && LastIconPosition == VanillaIconPosition && !AlwaysCenter) || (CurrentMeterFill < 0.9101f && CurrentMeterFill > 0.2976f && LastIconPosition == CenteredIconPosition) || (InfectedCompanyCompatibility.IsInfectedCompanyEnabled && Object.op_Implicit((Object)(object)InfectedCompanyCompatibility.InfectedMeter) && !HUDInjector.InsanityMeter.activeSelf && LastIconPosition != VanillaIconPosition)) && !settingChanged) { return; } if (NeverCenter || (CurrentMeterFill < 0.2976f && !AlwaysCenter)) { NewPosition = VanillaIconPosition; } else if (SetAlwaysFull || AlwaysCenter || (CurrentMeterFill > 0.9101f && !NeverCenter)) { NewPosition = CenteredIconPosition; } else { float num = 1.179f * (CurrentMeterFill * CurrentMeterFill) - 0.337f * CurrentMeterFill + 0.03f; Vector3 val = ((CurrentMeterFill > 0.2976f) ? CenteredIconPosition : VanillaIconPosition); if (!HUDInjector.InsanityMeter.activeSelf && val != VanillaIconPosition) { val = VanillaIconPosition; } if (Vector3.Distance(NewPosition, val) <= 0.05f) { NewPosition = val; } else { CurrentPosition = PlayerIcon.transform.localPosition; NewPosition = Vector3.Lerp(CurrentPosition, val, num); } } Transform transform = PlayerIcon.transform; Vector3 localPosition = (PlayerRedIcon.transform.localPosition = NewPosition); transform.localPosition = localPosition; LastIconPosition = NewPosition; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }