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 InfectionBar v1.1.2
BepInEx/plugins/InfectionBar/InfectionBar.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace IndependentCadaverInfectionBar { internal static class ModConfig { internal static ConfigEntry<bool> InfectionBarEnabled { get; private set; } internal static ConfigEntry<bool> InfectionBarAlwaysVisible { get; private set; } internal static ConfigEntry<bool> DebugLogging { get; private set; } internal static ConfigEntry<bool> DebugVanillaHudLiveLayoutRefresh { get; private set; } internal static ConfigEntry<string> HudStyleMode { get; private set; } internal static ConfigEntry<float> UiWidth { get; private set; } internal static ConfigEntry<float> UiHeight { get; private set; } internal static ConfigEntry<string> AnchorPreset { get; private set; } internal static ConfigEntry<float> PositionOffsetX { get; private set; } internal static ConfigEntry<float> PositionOffsetY { get; private set; } internal static ConfigEntry<float> TextOffsetX { get; private set; } internal static ConfigEntry<float> TextOffsetY { get; private set; } internal static ConfigEntry<int> TextFontSize { get; private set; } internal static ConfigEntry<bool> ShowPanelBackground { get; private set; } internal static ConfigEntry<float> PanelBackgroundAlpha { get; private set; } internal static ConfigEntry<float> TerminalFadeAlpha { get; private set; } internal static ConfigEntry<bool> ReduceAliasing { get; private set; } internal static ConfigEntry<int> SortingOrder { get; private set; } internal static ConfigEntry<float> VanillaRingScale { get; private set; } internal static ConfigEntry<float> VanillaRingOffsetX { get; private set; } internal static ConfigEntry<float> VanillaRingOffsetY { get; private set; } internal static ConfigEntry<bool> VanillaWarningTextOffsetEnabled { get; private set; } internal static ConfigEntry<float> VanillaWarningTextOffsetX { get; private set; } internal static ConfigEntry<float> VanillaWarningTextOffsetY { get; private set; } internal static ConfigEntry<string> LabelLanguageMode { get; private set; } internal static void Bind(ConfigFile config) { InfectionBarEnabled = config.Bind<bool>("General", "InfectionBarEnabled", true, "Whether to show the standalone Cadaver infection bar."); InfectionBarAlwaysVisible = config.Bind<bool>("General", "InfectionBarAlwaysVisible", false, "Whether the infection bar should stay visible even when infection is at 0%."); DebugLogging = config.Bind<bool>("General", "DebugLogging", false, "Whether to write diagnostic logs for infection bar lifecycle and native HUD attachment."); DebugVanillaHudLiveLayoutRefresh = config.Bind<bool>("Debug", "DebugVanillaHudLiveLayoutRefresh", false, "For layout validation only. When enabled, the vanilla HUD ring and curved text are force-resynced every frame, which costs more CPU."); HudStyleMode = config.Bind<string>("General", "HudStyleMode", "Auto", "HUD style mode for this isolated test. Supported values: Auto, CurrentStyle, VanillaStaminaRingStyle."); UiWidth = config.Bind<float>("Layout", "UiWidth", 215f, "Overall width of the full infection bar UI root."); UiHeight = config.Bind<float>("Layout", "UiHeight", 34f, "Overall height of the full infection bar UI root."); AnchorPreset = config.Bind<string>("Layout", "AnchorPreset", "TopLeft", "Anchor preset used inside the native HUD container. Supported values: BottomLeft, BottomCenter, BottomRight, Center, TopLeft, TopCenter, TopRight."); PositionOffsetX = config.Bind<float>("Layout", "PositionOffsetX", 30f, "Horizontal offset relative to the selected anchor preset."); PositionOffsetY = config.Bind<float>("Layout", "PositionOffsetY", -135f, "Vertical offset relative to the selected anchor preset."); TextOffsetX = config.Bind<float>("Layout", "TextOffsetX", 9f, "Horizontal offset of the infection label text inside the bar root."); TextOffsetY = config.Bind<float>("Layout", "TextOffsetY", 1f, "Vertical offset of the infection label text inside the bar root."); TextFontSize = config.Bind<int>("Layout", "TextFontSize", 13, "Font size of the infection label text."); ShowPanelBackground = config.Bind<bool>("Layout", "ShowPanelBackground", false, "Whether to show the faint panel background behind the infection bar."); PanelBackgroundAlpha = config.Bind<float>("Layout", "PanelBackgroundAlpha", 0.22f, "Alpha of the panel background when it is enabled."); TerminalFadeAlpha = config.Bind<float>("Layout", "TerminalFadeAlpha", 0.25f, "Alpha used while the in-game terminal is actively being used."); ReduceAliasing = config.Bind<bool>("Layout", "ReduceAliasing", true, "Uses more conservative UI alignment and minimum element thickness to reduce jagged edges and blur when the infection bar is slightly tilted."); SortingOrder = config.Bind<int>("Layout", "SortingOrder", 5, "Sorting order for the standalone overlay canvas."); VanillaRingScale = config.Bind<float>("VanillaHud", "VanillaRingScale", 1.3f, "Scale multiplier applied to the infection ring derived from the original sprint meter UI."); VanillaRingOffsetX = config.Bind<float>("VanillaHud", "VanillaRingOffsetX", -32.5f, "Additional horizontal fine-tune offset after the automatic outer-ring placement."); VanillaRingOffsetY = config.Bind<float>("VanillaHud", "VanillaRingOffsetY", 16f, "Additional vertical fine-tune offset after the automatic outer-ring placement."); VanillaWarningTextOffsetEnabled = config.Bind<bool>("VanillaHud", "VanillaWarningTextOffsetEnabled", true, "Whether vanilla HUD mode should move the original warning text right so it does not overlap the infection ring."); VanillaWarningTextOffsetX = config.Bind<float>("VanillaHud", "VanillaWarningTextOffsetX", 60f, "Horizontal offset applied to the original warning text root while vanilla HUD mode is active."); VanillaWarningTextOffsetY = config.Bind<float>("VanillaHud", "VanillaWarningTextOffsetY", 0f, "Vertical offset applied to the original warning text root while vanilla HUD mode is active."); LabelLanguageMode = config.Bind<string>("Language", "LabelLanguageMode", "Auto", "Auto, English, or Chinese."); } } internal static class InfectionBarCompatibility { [CompilerGenerated] private static class <>O { public static HandleNamedMessageDelegate <0>__OnClientHelloMessage; public static HandleNamedMessageDelegate <1>__OnHostStateMessage; } private const string ClientHelloMessageName = "InfectionBar_ClientHello_v1"; private const string HostStateMessageName = "InfectionBar_HostState_v1"; private const float MessageIntervalSeconds = 2f; private const float GracePeriodSeconds = 8f; private const string HostMissingReason = "host does not have InfectionBar installed"; private const string MissingClientsReason = "one or more clients do not have InfectionBar installed"; private static readonly InfectionBarCompatibilityState hostClientState = new InfectionBarCompatibilityState(); private static readonly List<ulong> hostStateRecipients = new List<ulong>(); private static ManualLogSource logger; private static CustomMessagingManager registeredMessagingManager; private static NetworkManager observedNetworkManager; private static ulong observedLocalClientId = ulong.MaxValue; private static bool observedIsServer; private static bool observedIsConnectedClient; private static bool hudAllowed = true; private static string disableReason = string.Empty; private static float nextClientHelloTime; private static float nextHostStateTime; private static float clientConnectionStartTime = -1f; private static float lastHostStateReceivedTime = -1f; private static bool receivedHostState; private static bool hostStateAllowed = true; private static int hostStateMissingClientCount; private static bool clientStoppedHelloForMissingHost; private static bool loggedHostMissingWarning; private static bool loggedMissingClientsWarning; private static bool loggedHandlerRegistrationWarning; internal static bool HudAllowed => hudAllowed; internal static string DisableReason => disableReason; internal static void Initialize(ManualLogSource pluginLogger) { logger = pluginLogger; SetHudAllowed(allowed: true, string.Empty); } internal static void Tick() { NetworkManager singleton = NetworkManager.Singleton; if ((Object)(object)singleton == (Object)null || singleton.ShutdownInProgress || !singleton.IsListening) { UnregisterHandlers(); ResetSessionState(0f); observedNetworkManager = null; return; } EnsureHandlers(singleton.CustomMessagingManager); float unscaledTime = Time.unscaledTime; ResetSessionIfNeeded(singleton, unscaledTime); if (singleton.IsServer) { TickHost(singleton, unscaledTime); } else if (singleton.IsClient && singleton.IsConnectedClient) { TickClient(singleton, unscaledTime); } else { SetHudAllowed(allowed: true, string.Empty); } } private static void ResetSessionIfNeeded(NetworkManager networkManager, float now) { ulong num = (networkManager.IsClient ? networkManager.LocalClientId : 0); if (!((Object)(object)observedNetworkManager == (Object)(object)networkManager) || observedLocalClientId != num || observedIsServer != networkManager.IsServer || observedIsConnectedClient != networkManager.IsConnectedClient) { observedNetworkManager = networkManager; observedLocalClientId = num; observedIsServer = networkManager.IsServer; observedIsConnectedClient = networkManager.IsConnectedClient; ResetSessionState(now); } } private static void ResetSessionState(float now) { hostClientState.Reset(); hostStateRecipients.Clear(); nextClientHelloTime = 0f; nextHostStateTime = 0f; clientConnectionStartTime = now; lastHostStateReceivedTime = -1f; receivedHostState = false; hostStateAllowed = true; hostStateMissingClientCount = 0; clientStoppedHelloForMissingHost = false; SetHudAllowed(allowed: true, string.Empty); } private static void TickHost(NetworkManager networkManager, float now) { IReadOnlyList<ulong> connectedClientsIds = networkManager.ConnectedClientsIds; hostClientState.UpdateConnectedClients(connectedClientsIds, 0uL, now); int num = hostClientState.CountMissingClients(now, 8f); if (num > 0) { SetHudAllowed(allowed: false, "one or more clients do not have InfectionBar installed"); LogMissingClientsWarningOnce(); } else { SetHudAllowed(allowed: true, string.Empty); } if (!(now < nextHostStateTime)) { nextHostStateTime = now + 2f; SendHostState(networkManager.CustomMessagingManager, connectedClientsIds, hudAllowed, num); } } private static void TickClient(NetworkManager networkManager, float now) { if (clientConnectionStartTime < 0f) { clientConnectionStartTime = now; } SendClientHelloIfNeeded(networkManager.CustomMessagingManager, now); if (!receivedHostState) { if (now - clientConnectionStartTime >= 8f) { clientStoppedHelloForMissingHost = true; SetHudAllowed(allowed: false, "host does not have InfectionBar installed"); LogHostMissingWarningOnce(); } else { SetHudAllowed(allowed: true, string.Empty); } } else if (lastHostStateReceivedTime >= 0f && now - lastHostStateReceivedTime >= 8f) { SetHudAllowed(allowed: false, "host does not have InfectionBar installed"); LogHostMissingWarningOnce(); } else if (hostStateAllowed) { SetHudAllowed(allowed: true, string.Empty); } else { SetHudAllowed(allowed: false, "one or more clients do not have InfectionBar installed"); if (hostStateMissingClientCount > 0) { LogMissingClientsWarningOnce(); } } } private static void SendClientHelloIfNeeded(CustomMessagingManager messagingManager, float now) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) if (clientStoppedHelloForMissingHost || messagingManager == null || now < nextClientHelloTime) { return; } nextClientHelloTime = now + 2f; try { FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(128, (Allocator)2, -1); try { ((FastBufferWriter)(ref val)).WriteValueSafe("1.1.2", false); messagingManager.SendNamedMessage("InfectionBar_ClientHello_v1", 0uL, val, (NetworkDelivery)2); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } catch (Exception ex) { LogHandlerWarningOnce("Failed to send InfectionBar ClientHello: " + ex.Message); } } private static void SendHostState(CustomMessagingManager messagingManager, IReadOnlyList<ulong> connectedClientIds, bool allowed, int missingClientCount) { //IL_0049: 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_005b: 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_0072: Unknown result type (might be due to invalid IL or missing references) if (messagingManager == null) { return; } hostClientState.CollectInstalledClientIds(connectedClientIds, 0uL, hostStateRecipients); if (hostStateRecipients.Count == 0) { return; } try { FastBufferWriter val = default(FastBufferWriter); ((FastBufferWriter)(ref val))..ctor(256, (Allocator)2, -1); try { bool flag = allowed; int num = missingClientCount; ((FastBufferWriter)(ref val)).WriteValueSafe("1.1.2", false); ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); ((FastBufferWriter)(ref val)).WriteValueSafe<int>(ref num, default(ForPrimitives)); messagingManager.SendNamedMessage("InfectionBar_HostState_v1", (IReadOnlyList<ulong>)hostStateRecipients, val, (NetworkDelivery)2); } finally { ((IDisposable)(FastBufferWriter)(ref val)).Dispose(); } } catch (Exception ex) { LogHandlerWarningOnce("Failed to send InfectionBar HostState: " + ex.Message); } } private static void EnsureHandlers(CustomMessagingManager messagingManager) { //IL_0027: 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_0032: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown if (messagingManager == null || registeredMessagingManager == messagingManager) { return; } UnregisterHandlers(); try { object obj = <>O.<0>__OnClientHelloMessage; if (obj == null) { HandleNamedMessageDelegate val = OnClientHelloMessage; <>O.<0>__OnClientHelloMessage = val; obj = (object)val; } messagingManager.RegisterNamedMessageHandler("InfectionBar_ClientHello_v1", (HandleNamedMessageDelegate)obj); object obj2 = <>O.<1>__OnHostStateMessage; if (obj2 == null) { HandleNamedMessageDelegate val2 = OnHostStateMessage; <>O.<1>__OnHostStateMessage = val2; obj2 = (object)val2; } messagingManager.RegisterNamedMessageHandler("InfectionBar_HostState_v1", (HandleNamedMessageDelegate)obj2); registeredMessagingManager = messagingManager; } catch (Exception ex) { try { messagingManager.UnregisterNamedMessageHandler("InfectionBar_ClientHello_v1"); messagingManager.UnregisterNamedMessageHandler("InfectionBar_HostState_v1"); } catch { } registeredMessagingManager = null; LogHandlerWarningOnce("Failed to register InfectionBar network handlers: " + ex.Message); } } private static void UnregisterHandlers() { if (registeredMessagingManager != null) { try { registeredMessagingManager.UnregisterNamedMessageHandler("InfectionBar_ClientHello_v1"); registeredMessagingManager.UnregisterNamedMessageHandler("InfectionBar_HostState_v1"); } catch { } registeredMessagingManager = null; } } private static void OnClientHelloMessage(ulong senderClientId, FastBufferReader reader) { NetworkManager singleton = NetworkManager.Singleton; if (!((Object)(object)singleton == (Object)null) && singleton.IsServer && senderClientId != 0L) { try { string empty = string.Empty; ((FastBufferReader)(ref reader)).ReadValueSafe(ref empty, false); } catch { } hostClientState.RecordClientHello(senderClientId); } } private static void OnHostStateMessage(ulong senderClientId, FastBufferReader reader) { //IL_0036: 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_0049: 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) NetworkManager singleton = NetworkManager.Singleton; if ((Object)(object)singleton == (Object)null || singleton.IsServer || senderClientId != 0L) { return; } try { string empty = string.Empty; bool flag = false; int num = 0; ((FastBufferReader)(ref reader)).ReadValueSafe(ref empty, false); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); ((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref num, default(ForPrimitives)); receivedHostState = true; lastHostStateReceivedTime = Time.unscaledTime; hostStateAllowed = flag; hostStateMissingClientCount = num; } catch (Exception ex) { LogHandlerWarningOnce("Failed to read InfectionBar HostState: " + ex.Message); } } private static void SetHudAllowed(bool allowed, string reason) { hudAllowed = allowed; disableReason = (allowed ? string.Empty : (reason ?? string.Empty)); } private static void LogHostMissingWarningOnce() { if (!loggedHostMissingWarning) { if (logger != null) { logger.LogWarning((object)"host does not have InfectionBar installed"); } loggedHostMissingWarning = true; } } private static void LogMissingClientsWarningOnce() { if (!loggedMissingClientsWarning) { if (logger != null) { logger.LogWarning((object)"one or more clients do not have InfectionBar installed"); } loggedMissingClientsWarning = true; } } private static void LogHandlerWarningOnce(string message) { if (!loggedHandlerRegistrationWarning) { if (logger != null) { logger.LogWarning((object)message); } loggedHandlerRegistrationWarning = true; } } } internal sealed class InfectionBarCompatibilityState { private readonly Dictionary<ulong, float> firstSeenTimes = new Dictionary<ulong, float>(); private readonly HashSet<ulong> installedClients = new HashSet<ulong>(); private readonly HashSet<ulong> connectedClientSet = new HashSet<ulong>(); private readonly List<ulong> idsToRemove = new List<ulong>(); internal void Reset() { firstSeenTimes.Clear(); installedClients.Clear(); connectedClientSet.Clear(); idsToRemove.Clear(); } internal void UpdateConnectedClients(IReadOnlyList<ulong> connectedClientIds, ulong serverClientId, float now) { connectedClientSet.Clear(); if (connectedClientIds != null) { for (int i = 0; i < connectedClientIds.Count; i++) { ulong num = connectedClientIds[i]; connectedClientSet.Add(num); if (num != serverClientId && !firstSeenTimes.ContainsKey(num)) { firstSeenTimes[num] = now; } } } PruneDisconnectedClients(firstSeenTimes, serverClientId); PruneDisconnectedClients(installedClients, serverClientId); } internal void RecordClientHello(ulong clientId) { installedClients.Add(clientId); } internal int CountMissingClients(float now, float gracePeriodSeconds) { int num = 0; foreach (KeyValuePair<ulong, float> firstSeenTime in firstSeenTimes) { if (!installedClients.Contains(firstSeenTime.Key) && now - firstSeenTime.Value >= gracePeriodSeconds) { num++; } } return num; } internal void CollectInstalledClientIds(IReadOnlyList<ulong> connectedClientIds, ulong serverClientId, List<ulong> results) { results.Clear(); if (connectedClientIds == null) { return; } for (int i = 0; i < connectedClientIds.Count; i++) { ulong num = connectedClientIds[i]; if (num != serverClientId && installedClients.Contains(num)) { results.Add(num); } } } private void PruneDisconnectedClients(Dictionary<ulong, float> clients, ulong serverClientId) { idsToRemove.Clear(); foreach (KeyValuePair<ulong, float> client in clients) { if (client.Key != serverClientId && !connectedClientSet.Contains(client.Key)) { idsToRemove.Add(client.Key); } } for (int i = 0; i < idsToRemove.Count; i++) { clients.Remove(idsToRemove[i]); } } private void PruneDisconnectedClients(HashSet<ulong> clients, ulong serverClientId) { idsToRemove.Clear(); foreach (ulong client in clients) { if (client != serverClientId && !connectedClientSet.Contains(client)) { idsToRemove.Add(client); } } for (int i = 0; i < idsToRemove.Count; i++) { clients.Remove(idsToRemove[i]); } } } internal sealed class InfectionBarController : MonoBehaviour { private enum HudStyle { Current, VanillaStaminaRing } private enum VanillaArcTextSlot { WeightStaminaUpper, WeightInfectionInner, InfectionOuter } private enum VanillaArcRadiusBand { Inner, Middle, Outer } private readonly struct NativeHudState { internal float Alpha { get; } internal bool IsValid { get; } internal NativeHudState(float alpha, bool isValid) { Alpha = alpha; IsValid = isValid; } } private const string EladsHudPluginGuid = "me.eladnlg.customhud"; private const string VanillaWarningRootPathSuffix = "IngamePlayerHUD/SpecialHUDGraphics/RadiationIncrease"; private const float NativeHudStateRefreshIntervalSeconds = 0.1f; private const float HudIntroAlphaSampleSeconds = 4f; private static Sprite pixelSprite; private static float nextTerminalLookupTime; private static float nextNativeHudElementLookupTime; private static float nextNativeHudParentFallbackLookupTime; private static float nextVanillaWarningRootLookupTime; private static float nextNativeHudStateRefreshTime; private static HUDManager cachedHudManagerInstance; private static StartOfRound cachedStartOfRoundInstance; private static Terminal cachedTerminal; private static NativeHudState cachedNativeHudState; private static Transform cachedNativeHudElementTransform; private static RectTransform cachedNativeHudParentFallback; private static RectTransform cachedVanillaWarningRoot; private static bool cachedEladsHudInstalled; private static bool hasCachedEladsHudInstalled; private static FieldInfo hudPlayerInfoField; private static FieldInfo hudContainerField; private static FieldInfo hudElementsField; private static FieldInfo hudHudHiddenField; private static FieldInfo hudTerminalScriptField; private static FieldInfo hudRadiationGraphicAnimatorField; private static FieldInfo terminalInUseField; private ManualLogSource logger; private InfectionDataProvider dataProvider; private InfectionLayout layout; private LanguageHelper languageHelper; private CanvasGroup canvasGroup; private RectTransform infectionRoot; private Image panelBackground; private Image topLine; private Image infectionBackground; private Image infectionBar; private Text infectionText; private Image vanillaSprintMeterReference; private RectTransform vanillaWeightTextRoot; private CanvasGroup vanillaWeightTextCanvasGroup; private RectTransform vanillaInfectionTextRoot; private CanvasGroup vanillaInfectionTextCanvasGroup; private RectTransform vanillaInfectionValueTextRoot; private CanvasGroup vanillaInfectionValueTextCanvasGroup; private TextMeshProUGUI hiddenWeightCounter; private bool hiddenWeightCounterWasEnabled; private string lastVanillaWeightText = string.Empty; private string lastVanillaInfectionText = string.Empty; private string lastAppliedVanillaWeightText = string.Empty; private string lastAppliedVanillaInfectionText = string.Empty; private bool hasAppliedVanillaWeightText; private bool hasAppliedVanillaInfectionText; private bool hasClearedVanillaInfectionValueText; private VanillaArcTextSlot lastAppliedVanillaWeightSlot; private Vector2 lastAppliedVanillaWeightRootSize; private Vector2 lastAppliedVanillaInfectionRootSize; private bool hasVanillaLayoutSignature; private Vector2 lastVanillaAnchorMin; private Vector2 lastVanillaAnchorMax; private Vector2 lastVanillaPivot; private Vector2 lastVanillaSizeDelta; private Vector2 lastVanillaAnchoredPosition; private Quaternion lastVanillaLocalRotation; private Vector3 lastVanillaLocalScale; private float lastVanillaRingScale; private float lastVanillaRingOffsetX; private float lastVanillaRingOffsetY; private RectTransform shiftedVanillaWarningRoot; private Vector2 originalVanillaWarningAnchoredPosition; private bool hasOriginalVanillaWarningAnchoredPosition; private bool loggedMissingVanillaWarningRoot; private string cachedInfectionLabel = "Infection"; private float nextInfectionLabelRefreshTime; private float lastRenderedInfectionFillAmount = -1f; private int lastRenderedInfectionPercent = -1; private string lastRenderedInfectionLabel = string.Empty; private bool lastVisibleState; private bool loggedMissingNativeHudParent; private bool loggedNativeHudParentFallback; private int lastTickFrame = -1; private float currentHudAlpha = 1f; private RectTransform hudIntroAlphaSampleSource; private float hudIntroAlphaSampleUntilTime; private bool hudIntroAlphaSamplingActive; private bool layoutDirty = true; private bool hudStyleDirty = true; private bool layoutConfigEventsSubscribed; private bool hasActiveHudStyle; private HudStyle activeHudStyle; private bool loggedMissingSprintMeter; private bool loggedVanillaSprintMeterDiagnostics; private const string VanillaArcCharacterPrefix = "VanillaArcChar_"; private const float SprintMeterSpriteSize = 326f; private static readonly float[] SprintMeterArcAngles = new float[43] { -162.5f, -157.5f, -152.5f, -147.5f, -142.5f, -137.5f, -132.5f, -127.5f, -122.5f, -117.5f, -112.5f, -107.5f, -102.5f, -97.5f, -92.5f, -87.5f, -82.5f, -77.5f, -72.5f, -67.5f, -62.5f, -57.5f, -52.5f, -47.5f, -42.5f, -37.5f, -32.5f, -27.5f, -22.5f, -17.5f, -12.5f, -7.5f, -2.5f, 2.5f, 7.5f, 17.5f, 22.5f, 27.5f, 32.5f, 37.5f, 42.5f, 47.5f, 52.5f }; private static readonly float[] SprintMeterArcInnerRadii = new float[43] { 148.3f, 146.4f, 155.9f, 153.8f, 159.1f, 157.7f, 154.7f, 144.9f, 145.9f, 140.7f, 134f, 125.9f, 122.8f, 118f, 115.8f, 108.8f, 106.8f, 104f, 97.1f, 100.4f, 98.6f, 97.8f, 97.4f, 97.7f, 98.4f, 96.5f, 100.6f, 102.2f, 104.1f, 107.9f, 111.2f, 114.8f, 119.9f, 125.5f, 129f, 144f, 150.1f, 155.9f, 158f, 165f, 165.2f, 166.8f, 164.5f }; private static readonly float[] SprintMeterArcMiddleRadii = new float[43] { 150.5f, 154.2f, 158.1f, 160.2f, 162.2f, 162f, 159.6f, 155.3f, 151.6f, 145.6f, 139.5f, 133.8f, 128.2f, 123.1f, 120.7f, 113.6f, 111f, 108.3f, 105.6f, 104.3f, 102.6f, 101.6f, 101.5f, 101.5f, 102.1f, 103f, 104.5f, 106.4f, 108.7f, 112.3f, 116.1f, 120.3f, 125.5f, 130.5f, 134.2f, 149.4f, 155.7f, 161.2f, 165.2f, 168.4f, 169.4f, 168.7f, 166.4f }; private static readonly float[] SprintMeterArcOuterRadii = new float[43] { 152.1f, 158.5f, 161.1f, 165.2f, 165.5f, 165.5f, 164.1f, 160.9f, 163.2f, 150.6f, 145.2f, 140.9f, 133.5f, 128.2f, 123.9f, 117.6f, 115.1f, 112.2f, 110.8f, 112.3f, 106.7f, 105.3f, 105.1f, 105.4f, 106.2f, 109.9f, 108.1f, 110.3f, 113f, 116.4f, 120.8f, 127.6f, 130.5f, 135.8f, 139.3f, 154.7f, 161f, 167.2f, 169.6f, 171.7f, 173.9f, 171.2f, 168.6f }; internal void Initialize(ManualLogSource logger, InfectionDataProvider dataProvider, InfectionLayout layout, LanguageHelper languageHelper) { this.logger = logger; this.dataProvider = dataProvider; this.layout = layout; this.languageHelper = languageHelper; SubscribeLayoutConfigEvents(); layoutDirty = true; } private void Update() { Tick(); } internal void Tick() { if (lastTickFrame != Time.frameCount) { lastTickFrame = Time.frameCount; InfectionBarCompatibility.Tick(); if (!InfectionBarCompatibility.HudAllowed) { HideForCompatibility(); return; } ResetSceneCachesIfHudManagerChanged(); PlayerControllerB localPlayer = dataProvider.GetLocalPlayer(); EnsureInfectionUI(localPlayer); UpdateInfection(localPlayer); } } internal void Shutdown() { DestroyInfectionUI(); ClearCachedSceneReferences(); cachedHudManagerInstance = null; cachedStartOfRoundInstance = null; UnsubscribeLayoutConfigEvents(); } private void OnDestroy() { Shutdown(); } private void EnsureInfectionUI(PlayerControllerB player) { //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: 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_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0220: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_0419: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_0434: Unknown result type (might be due to invalid IL or missing references) //IL_0443: Unknown result type (might be due to invalid IL or missing references) //IL_0451: Unknown result type (might be due to invalid IL or missing references) //IL_045d: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_0525: Unknown result type (might be due to invalid IL or missing references) //IL_0534: Unknown result type (might be due to invalid IL or missing references) //IL_0543: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056a: Unknown result type (might be due to invalid IL or missing references) //IL_0576: Unknown result type (might be due to invalid IL or missing references) //IL_05fa: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)infectionRoot != (Object)null && hasActiveHudStyle && !hudStyleDirty) { RefreshLayoutIfNeeded(player); return; } HudStyle hudStyle = ResolveHudStyle(); hudStyleDirty = false; if ((Object)(object)infectionRoot != (Object)null) { if (hasActiveHudStyle && activeHudStyle == hudStyle) { RefreshLayoutIfNeeded(player); return; } DestroyInfectionUI(); } if (hudStyle == HudStyle.VanillaStaminaRing) { TryCreateVanillaStaminaRingUI(player); return; } RectTransform nativeHudParentTransform = GetNativeHudParentTransform(); if ((Object)(object)nativeHudParentTransform == (Object)null) { if (ShouldLogDiagnostics() && !loggedMissingNativeHudParent) { logger.LogWarning((object)"Waiting for native HUD parent before creating infection bar UI."); loggedMissingNativeHudParent = true; } return; } loggedMissingNativeHudParent = false; GameObject val = new GameObject("IndependentCadaverInfectionBarRoot", new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val.transform.SetParent((Transform)(object)nativeHudParentTransform, false); NativeHudState nativeHudState = GetNativeHudState(); lastVisibleState = false; lastRenderedInfectionFillAmount = -1f; lastRenderedInfectionPercent = -1; lastRenderedInfectionLabel = string.Empty; currentHudAlpha = (nativeHudState.IsValid ? nativeHudState.Alpha : 1f); canvasGroup = val.GetComponent<CanvasGroup>(); canvasGroup.alpha = currentHudAlpha; canvasGroup.ignoreParentGroups = true; canvasGroup.interactable = false; canvasGroup.blocksRaycasts = false; Vector2 effectiveRootSize = GetEffectiveRootSize(); Vector2 effectiveBarSize = GetEffectiveBarSize(); infectionRoot = val.GetComponent<RectTransform>(); infectionRoot.anchorMin = layout.GetAnchorMin(); infectionRoot.anchorMax = layout.GetAnchorMax(); infectionRoot.pivot = layout.GetPivot(); infectionRoot.sizeDelta = effectiveRootSize; infectionRoot.anchoredPosition = AlignVector2(layout.GetAnchoredPosition()); ApplyNativeHudElementRotation(); RectTransform val2 = CreateRect("Panel", (Transform)(object)infectionRoot, effectiveRootSize, new Vector2(0f, 0f), new Vector2(0f, 0f), new Vector2(0f, 0f)); panelBackground = ((Component)val2).gameObject.AddComponent<Image>(); panelBackground.sprite = GetPixelSprite(); ((Graphic)panelBackground).color = new Color(0.1f, 0.02f, 0.02f, Mathf.Clamp01(ModConfig.PanelBackgroundAlpha.Value)); ((Behaviour)panelBackground).enabled = ModConfig.ShowPanelBackground.Value; RectTransform val3 = CreateRect("TopLine", (Transform)(object)infectionRoot, new Vector2(effectiveBarSize.x, effectiveBarSize.y), new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(0f, 1f)); val3.anchoredPosition = AlignVector2(new Vector2(8f, -6f)); topLine = ((Component)val3).gameObject.AddComponent<Image>(); topLine.sprite = GetPixelSprite(); ((Graphic)topLine).color = new Color(0.84f, 0.18f, 0.16f, 0.72f); RectTransform val4 = CreateRect("Background", (Transform)(object)infectionRoot, new Vector2(effectiveBarSize.x, effectiveBarSize.y), new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(0f, 1f)); val4.anchoredPosition = AlignVector2(new Vector2(8f, -6f)); infectionBackground = ((Component)val4).gameObject.AddComponent<Image>(); infectionBackground.sprite = GetPixelSprite(); infectionBackground.type = (Type)1; ((Graphic)infectionBackground).color = new Color(0.24f, 0.05f, 0.05f, 0.42f); RectTransform val5 = CreateRect("Fill", (Transform)(object)val4, effectiveBarSize, new Vector2(0f, 0f), new Vector2(1f, 1f), new Vector2(0f, 0f)); val5.anchoredPosition = Vector2.zero; val5.sizeDelta = Vector2.zero; val5.offsetMin = Vector2.zero; val5.offsetMax = Vector2.zero; infectionBar = ((Component)val5).gameObject.AddComponent<Image>(); infectionBar.sprite = GetPixelSprite(); infectionBar.type = (Type)3; infectionBar.fillMethod = (FillMethod)0; infectionBar.fillOrigin = 0; infectionBar.fillAmount = 0f; ((Graphic)infectionBar).color = new Color(0.91f, 0.23f, 0.19f, 0.98f); RectTransform val6 = CreateRect("Text", (Transform)(object)infectionRoot, new Vector2(effectiveRootSize.x - 16f, 18f), new Vector2(0f, 0f), new Vector2(0f, 0f), new Vector2(0f, 0f)); val6.anchoredPosition = AlignVector2(new Vector2(ModConfig.TextOffsetX.Value, ModConfig.TextOffsetY.Value)); ((Transform)val6).localRotation = Quaternion.identity; infectionText = ((Component)val6).gameObject.AddComponent<Text>(); infectionText.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); infectionText.fontSize = ModConfig.TextFontSize.Value; infectionText.alignment = (TextAnchor)3; infectionText.horizontalOverflow = (HorizontalWrapMode)1; infectionText.verticalOverflow = (VerticalWrapMode)1; ((Graphic)infectionText).color = new Color(0.97f, 0.95f, 0.92f, 0.94f); cachedInfectionLabel = DetermineInfectionLabel(); nextInfectionLabelRefreshTime = Time.unscaledTime + 5f; infectionText.text = cachedInfectionLabel + " 0%"; ((Component)infectionRoot).gameObject.SetActive(false); if (ShouldLogDiagnostics()) { logger.LogInfo((object)"Standalone infection bar UI created. style=Current"); } activeHudStyle = HudStyle.Current; hasActiveHudStyle = true; hudStyleDirty = false; Transform obj = ResolveNativeHudElementTransform(); StartHudIntroAlphaSampling((RectTransform)(((object)((obj is RectTransform) ? obj : null)) ?? ((object)nativeHudParentTransform))); ApplyHudAlpha(currentHudAlpha * GetHudIntroAlphaMultiplier(nativeHudState)); } private HudStyle ResolveHudStyle() { string a = (ModConfig.HudStyleMode?.Value ?? "Auto").Trim(); if (string.Equals(a, "Current", StringComparison.OrdinalIgnoreCase) || string.Equals(a, "CurrentStyle", StringComparison.OrdinalIgnoreCase)) { return HudStyle.Current; } if (string.Equals(a, "Vanilla", StringComparison.OrdinalIgnoreCase) || string.Equals(a, "VanillaStamina", StringComparison.OrdinalIgnoreCase) || string.Equals(a, "VanillaStaminaRing", StringComparison.OrdinalIgnoreCase) || string.Equals(a, "VanillaStaminaRingStyle", StringComparison.OrdinalIgnoreCase)) { return HudStyle.VanillaStaminaRing; } if (!IsEladsHudInstalled()) { return HudStyle.VanillaStaminaRing; } return HudStyle.Current; } private static bool IsEladsHudInstalled() { if (hasCachedEladsHudInstalled) { return cachedEladsHudInstalled; } cachedEladsHudInstalled = DetectEladsHudInstalled(); hasCachedEladsHudInstalled = true; return cachedEladsHudInstalled; } private static bool DetectEladsHudInstalled() { if (Chainloader.PluginInfos.ContainsKey("me.eladnlg.customhud")) { return true; } foreach (PluginInfo value in Chainloader.PluginInfos.Values) { object obj; if (value == null) { obj = null; } else { BepInPlugin metadata = value.Metadata; obj = ((metadata != null) ? metadata.GUID : null); } if (obj == null) { obj = string.Empty; } string text = (string)obj; object obj2; if (value == null) { obj2 = null; } else { BepInPlugin metadata2 = value.Metadata; obj2 = ((metadata2 != null) ? metadata2.Name : null); } if (obj2 == null) { obj2 = string.Empty; } string text2 = (string)obj2; bool flag = text.IndexOf("Elads", StringComparison.OrdinalIgnoreCase) >= 0 || text2.IndexOf("Elads", StringComparison.OrdinalIgnoreCase) >= 0; bool flag2 = text.IndexOf("HUD", StringComparison.OrdinalIgnoreCase) >= 0 || text2.IndexOf("HUD", StringComparison.OrdinalIgnoreCase) >= 0; if (flag && flag2) { return true; } } return false; } private bool TryCreateVanillaStaminaRingUI(PlayerControllerB player) { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_0166: 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_017f: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) if (!TryGetSprintMeter(player, out var sprintMeterImage, out var sprintMeterRect)) { if (ShouldLogDiagnostics() && !loggedMissingSprintMeter) { logger.LogWarning((object)"Waiting for original sprint meter UI before creating vanilla infection ring."); loggedMissingSprintMeter = true; } return false; } Transform parent = ((Transform)sprintMeterRect).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); if ((Object)(object)val == (Object)null) { if (ShouldLogDiagnostics() && !loggedMissingSprintMeter) { logger.LogWarning((object)"Original sprint meter UI has no RectTransform parent."); loggedMissingSprintMeter = true; } return false; } loggedMissingSprintMeter = false; LogVanillaSprintMeterDiagnostics(sprintMeterImage, sprintMeterRect); GameObject val2 = new GameObject("IndependentCadaverInfectionBarVanillaStaminaRingRoot", new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val2.transform.SetParent((Transform)(object)val, false); NativeHudState nativeHudState = GetNativeHudState(); lastVisibleState = false; lastRenderedInfectionFillAmount = -1f; lastRenderedInfectionPercent = -1; lastRenderedInfectionLabel = string.Empty; currentHudAlpha = (nativeHudState.IsValid ? nativeHudState.Alpha : 1f); canvasGroup = val2.GetComponent<CanvasGroup>(); canvasGroup.alpha = currentHudAlpha; canvasGroup.ignoreParentGroups = true; canvasGroup.interactable = false; canvasGroup.blocksRaycasts = false; infectionRoot = val2.GetComponent<RectTransform>(); vanillaSprintMeterReference = sprintMeterImage; ApplyVanillaStaminaRingTransform(sprintMeterRect); RectTransform val3 = CreateRect("VanillaRingBackground", (Transform)(object)infectionRoot, Vector2.zero, Vector2.zero, Vector2.one, new Vector2(0.5f, 0.5f)); StretchToParent(val3); infectionBackground = ((Component)val3).gameObject.AddComponent<Image>(); CopySprintMeterImageStyle(sprintMeterImage, infectionBackground, new Color(0.34f, 0.05f, 0.04f, 0.42f)); ApplyVanillaRingFillAmount(infectionBackground, 1f); RectTransform val4 = CreateRect("VanillaRingFill", (Transform)(object)infectionRoot, Vector2.zero, Vector2.zero, Vector2.one, new Vector2(0.5f, 0.5f)); StretchToParent(val4); infectionBar = ((Component)val4).gameObject.AddComponent<Image>(); CopySprintMeterImageStyle(sprintMeterImage, infectionBar, new Color(0.91f, 0.18f, 0.13f, 0.95f)); ApplyVanillaRingFillAmount(infectionBar, 0f); CreateVanillaArcTexts(sprintMeterRect); cachedInfectionLabel = DetermineInfectionLabel(); nextInfectionLabelRefreshTime = Time.unscaledTime + 5f; SetInfectionText(FormatInfectionText(cachedInfectionLabel, 0)); ((Component)infectionRoot).gameObject.SetActive(false); if ((Object)(object)vanillaWeightTextRoot != (Object)null) { ((Component)vanillaWeightTextRoot).gameObject.SetActive(false); } if ((Object)(object)vanillaInfectionTextRoot != (Object)null) { ((Component)vanillaInfectionTextRoot).gameObject.SetActive(false); } if ((Object)(object)vanillaInfectionValueTextRoot != (Object)null) { ((Component)vanillaInfectionValueTextRoot).gameObject.SetActive(false); } activeHudStyle = HudStyle.VanillaStaminaRing; hasActiveHudStyle = true; hudStyleDirty = false; layoutDirty = false; StartHudIntroAlphaSampling(sprintMeterRect); ApplyHudAlpha(currentHudAlpha * GetHudIntroAlphaMultiplier(nativeHudState)); if (ShouldLogDiagnostics()) { logger.LogInfo((object)"Standalone infection bar UI created. style=VanillaStaminaRing"); } return true; } private static bool TryGetSprintMeter(PlayerControllerB player, out Image sprintMeterImage, out RectTransform sprintMeterRect) { sprintMeterImage = player?.sprintMeterUI; sprintMeterRect = (((Object)(object)sprintMeterImage != (Object)null) ? ((Graphic)sprintMeterImage).rectTransform : null); if ((Object)(object)sprintMeterImage != (Object)null) { return (Object)(object)sprintMeterRect != (Object)null; } return false; } private void RefreshVanillaStaminaRingLayout(PlayerControllerB player) { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) if (!TryGetSprintMeter(player, out var sprintMeterImage, out var sprintMeterRect)) { return; } Transform parent = ((Transform)sprintMeterRect).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); int num; if ((Object)(object)val != (Object)null) { num = (((Object)(object)((Transform)infectionRoot).parent != (Object)(object)val) ? 1 : 0); if (num != 0) { ((Transform)infectionRoot).SetParent((Transform)(object)val, false); } } else { num = 0; } vanillaSprintMeterReference = sprintMeterImage; bool flag = ShouldForceVanillaHudLiveLayoutRefresh(); bool flag2 = ((uint)num | (flag ? 1u : 0u)) != 0 || layoutDirty || HasVanillaSprintMeterLayoutChanged(sprintMeterRect); if (flag2) { ApplyVanillaStaminaRingTransform(sprintMeterRect); RefreshVanillaArcTextLayout(sprintMeterRect, forceTextRefresh: true); CopySprintMeterImageStyle(sprintMeterImage, infectionBackground, new Color(0.34f, 0.05f, 0.04f, 0.42f)); CopySprintMeterImageStyle(sprintMeterImage, infectionBar, new Color(0.91f, 0.18f, 0.13f, 0.95f)); ApplyVanillaRingFillAmount(infectionBackground, 1f); ApplyVanillaRingFillAmount(infectionBar, (lastRenderedInfectionFillAmount >= 0f) ? VanillaRingFillMapping.MapInfectionToVisibleFill(lastRenderedInfectionFillAmount) : infectionBar.fillAmount); CaptureVanillaSprintMeterLayoutSignature(sprintMeterRect); layoutDirty = false; } SetOriginalWeightCounterHidden(ModConfig.InfectionBarEnabled.Value); UpdateVanillaWeightText(flag || flag2); ApplyVanillaInfectionTextSegments(flag || flag2); } private void CreateVanillaArcTexts(RectTransform sprintMeterRect) { Transform parent = ((Transform)sprintMeterRect).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); if (!((Object)(object)val == (Object)null)) { CreateVanillaArcTextRoot("IndependentCadaverInfectionBarVanillaWeightText", val, out vanillaWeightTextRoot, out vanillaWeightTextCanvasGroup); CreateVanillaArcTextRoot("IndependentCadaverInfectionBarVanillaInfectionText", val, out vanillaInfectionTextRoot, out vanillaInfectionTextCanvasGroup); CreateVanillaArcTextRoot("IndependentCadaverInfectionBarVanillaInfectionValueText", val, out vanillaInfectionValueTextRoot, out vanillaInfectionValueTextCanvasGroup); UpdateVanillaWeightText(force: true); RefreshVanillaArcTextLayout(sprintMeterRect, forceTextRefresh: true); } } private void CreateVanillaArcTextRoot(string name, RectTransform parent, out RectTransform root, out CanvasGroup group) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown GameObject val = new GameObject(name, new Type[2] { typeof(RectTransform), typeof(CanvasGroup) }); val.transform.SetParent((Transform)(object)parent, false); root = val.GetComponent<RectTransform>(); group = val.GetComponent<CanvasGroup>(); group.alpha = currentHudAlpha; group.ignoreParentGroups = true; group.interactable = false; group.blocksRaycasts = false; ((Component)root).gameObject.SetActive(false); } private void RefreshVanillaArcTextLayout(RectTransform sprintMeterRect, bool forceTextRefresh) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_011b: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)vanillaWeightTextRoot == (Object)null) && !((Object)(object)vanillaInfectionTextRoot == (Object)null) && !((Object)(object)vanillaInfectionValueTextRoot == (Object)null)) { Transform parent = ((Transform)sprintMeterRect).parent; RectTransform val = (RectTransform)(object)((parent is RectTransform) ? parent : null); if ((Object)(object)val != (Object)null && (Object)(object)((Transform)vanillaWeightTextRoot).parent != (Object)(object)val) { ((Transform)vanillaWeightTextRoot).SetParent((Transform)(object)val, false); ((Transform)vanillaInfectionTextRoot).SetParent((Transform)(object)val, false); ((Transform)vanillaInfectionValueTextRoot).SetParent((Transform)(object)val, false); } Vector2 val2 = sprintMeterRect.anchoredPosition + GetVanillaOuterRingOffset(sprintMeterRect) + new Vector2(ModConfig.VanillaRingOffsetX.Value, ModConfig.VanillaRingOffsetY.Value); Vector2 rectReferenceSize = GetRectReferenceSize(sprintMeterRect); float num = Mathf.Max(0.1f, ModConfig.VanillaRingScale.Value); Vector2 val3 = default(Vector2); ((Vector2)(ref val3))..ctor(Mathf.Abs(rectReferenceSize.x) * num, Mathf.Abs(rectReferenceSize.y) * num); bool num2 = lastVisibleState; ApplyVanillaTextRect(position: num2 ? val2 : sprintMeterRect.anchoredPosition, size: (Vector2)(num2 ? val3 : new Vector2(Mathf.Abs(rectReferenceSize.x), Mathf.Abs(rectReferenceSize.y))), rect: vanillaWeightTextRoot, anchorMin: sprintMeterRect.anchorMin, anchorMax: sprintMeterRect.anchorMax, pivot: new Vector2(0.5f, 0.5f), rotation: ((Transform)sprintMeterRect).localRotation, scale: ((Transform)sprintMeterRect).localScale); ApplyVanillaTextRect(vanillaInfectionTextRoot, sprintMeterRect.anchorMin, sprintMeterRect.anchorMax, new Vector2(0.5f, 0.5f), val3, val2, ((Transform)sprintMeterRect).localRotation, ((Transform)sprintMeterRect).localScale); ApplyVanillaTextRect(vanillaInfectionValueTextRoot, sprintMeterRect.anchorMin, sprintMeterRect.anchorMax, new Vector2(0.5f, 0.5f), val3, val2, ((Transform)sprintMeterRect).localRotation, ((Transform)sprintMeterRect).localScale); UpdateVanillaWeightText(forceTextRefresh); ApplyVanillaInfectionTextSegments(forceTextRefresh); } } private bool HasVanillaSprintMeterLayoutChanged(RectTransform sprintMeterRect) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_00a2: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) if (!hasVanillaLayoutSignature) { return true; } Vector2 val = lastVanillaAnchorMin - sprintMeterRect.anchorMin; if (!(((Vector2)(ref val)).sqrMagnitude > 0.0001f)) { val = lastVanillaAnchorMax - sprintMeterRect.anchorMax; if (!(((Vector2)(ref val)).sqrMagnitude > 0.0001f)) { val = lastVanillaPivot - sprintMeterRect.pivot; if (!(((Vector2)(ref val)).sqrMagnitude > 0.0001f)) { val = lastVanillaSizeDelta - sprintMeterRect.sizeDelta; if (!(((Vector2)(ref val)).sqrMagnitude > 0.0001f)) { val = lastVanillaAnchoredPosition - sprintMeterRect.anchoredPosition; if (!(((Vector2)(ref val)).sqrMagnitude > 0.0001f) && !(Quaternion.Angle(lastVanillaLocalRotation, ((Transform)sprintMeterRect).localRotation) > 0.01f)) { Vector3 val2 = lastVanillaLocalScale - ((Transform)sprintMeterRect).localScale; if (!(((Vector3)(ref val2)).sqrMagnitude > 0.0001f) && !(Mathf.Abs(lastVanillaRingScale - ModConfig.VanillaRingScale.Value) > 0.0001f) && !(Mathf.Abs(lastVanillaRingOffsetX - ModConfig.VanillaRingOffsetX.Value) > 0.0001f)) { return Mathf.Abs(lastVanillaRingOffsetY - ModConfig.VanillaRingOffsetY.Value) > 0.0001f; } } } } } } return true; } private void CaptureVanillaSprintMeterLayoutSignature(RectTransform sprintMeterRect) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) hasVanillaLayoutSignature = true; lastVanillaAnchorMin = sprintMeterRect.anchorMin; lastVanillaAnchorMax = sprintMeterRect.anchorMax; lastVanillaPivot = sprintMeterRect.pivot; lastVanillaSizeDelta = sprintMeterRect.sizeDelta; lastVanillaAnchoredPosition = sprintMeterRect.anchoredPosition; lastVanillaLocalRotation = ((Transform)sprintMeterRect).localRotation; lastVanillaLocalScale = ((Transform)sprintMeterRect).localScale; lastVanillaRingScale = ModConfig.VanillaRingScale.Value; lastVanillaRingOffsetX = ModConfig.VanillaRingOffsetX.Value; lastVanillaRingOffsetY = ModConfig.VanillaRingOffsetY.Value; } private static bool ShouldForceVanillaHudLiveLayoutRefresh() { return ModConfig.DebugVanillaHudLiveLayoutRefresh?.Value ?? false; } private void ApplyOrRestoreVanillaWarningTextOffset(bool infectionRingVisible) { //IL_0089: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) if (!(activeHudStyle == HudStyle.VanillaStaminaRing && infectionRingVisible) || !ModConfig.InfectionBarEnabled.Value || !ModConfig.VanillaWarningTextOffsetEnabled.Value) { RestoreVanillaWarningTextOffset(); return; } RectTransform val = ResolveVanillaWarningRoot(); if ((Object)(object)val == (Object)null) { if (ShouldLogDiagnostics() && !loggedMissingVanillaWarningRoot) { logger.LogWarning((object)"Waiting for original warning text root before applying vanilla HUD warning text offset."); loggedMissingVanillaWarningRoot = true; } return; } loggedMissingVanillaWarningRoot = false; if ((Object)(object)shiftedVanillaWarningRoot != (Object)(object)val) { RestoreVanillaWarningTextOffset(); shiftedVanillaWarningRoot = val; originalVanillaWarningAnchoredPosition = val.anchoredPosition; hasOriginalVanillaWarningAnchoredPosition = true; } if (!hasOriginalVanillaWarningAnchoredPosition) { originalVanillaWarningAnchoredPosition = val.anchoredPosition; hasOriginalVanillaWarningAnchoredPosition = true; } VanillaWarningTextOffsetCalculator.CalculateShiftedPosition(enabled: true, originalVanillaWarningAnchoredPosition.x, originalVanillaWarningAnchoredPosition.y, ModConfig.VanillaWarningTextOffsetX.Value, ModConfig.VanillaWarningTextOffsetY.Value, out var shiftedX, out var shiftedY); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(shiftedX, shiftedY); Vector2 val3 = val.anchoredPosition - val2; if (((Vector2)(ref val3)).sqrMagnitude > 0.0001f) { val.anchoredPosition = val2; } } private void RestoreVanillaWarningTextOffset() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)shiftedVanillaWarningRoot != (Object)null && hasOriginalVanillaWarningAnchoredPosition) { shiftedVanillaWarningRoot.anchoredPosition = originalVanillaWarningAnchoredPosition; } shiftedVanillaWarningRoot = null; originalVanillaWarningAnchoredPosition = Vector2.zero; hasOriginalVanillaWarningAnchoredPosition = false; loggedMissingVanillaWarningRoot = false; } private static RectTransform ResolveVanillaWarningRoot() { if ((Object)(object)cachedVanillaWarningRoot != (Object)null) { return cachedVanillaWarningRoot; } if (Time.unscaledTime < nextVanillaWarningRootLookupTime) { return null; } nextVanillaWarningRootLookupTime = Time.unscaledTime + 1f; HUDManager instance = HUDManager.Instance; if ((Object)(object)instance == (Object)null) { return null; } if ((Object)(object)instance.statusEffectText != (Object)null) { cachedVanillaWarningRoot = ((TMP_Text)instance.statusEffectText).rectTransform; return cachedVanillaWarningRoot; } if (hudRadiationGraphicAnimatorField == null) { hudRadiationGraphicAnimatorField = typeof(HUDManager).GetField("radiationGraphicAnimator", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } object? obj = hudRadiationGraphicAnimatorField?.GetValue(instance); Component val = (Component)((obj is Component) ? obj : null); if (val != null) { Transform transform = val.transform; RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null); if (val2 != null) { cachedVanillaWarningRoot = val2; return cachedVanillaWarningRoot; } } Transform[] componentsInChildren = ((Component)instance).GetComponentsInChildren<Transform>(true); foreach (Transform val3 in componentsInChildren) { RectTransform val4 = (RectTransform)(object)((val3 is RectTransform) ? val3 : null); if (val4 != null && IsVanillaWarningRoot(val3)) { cachedVanillaWarningRoot = val4; return cachedVanillaWarningRoot; } } return null; } private static bool IsVanillaWarningRoot(Transform transform) { if ((Object)(object)transform != (Object)null && string.Equals(((Object)transform).name, "RadiationIncrease", StringComparison.OrdinalIgnoreCase)) { return GetHierarchyPath(transform).EndsWith("IngamePlayerHUD/SpecialHUDGraphics/RadiationIncrease", StringComparison.OrdinalIgnoreCase); } return false; } private static void GetVanillaArcParameters(VanillaArcTextSlot slot, int textLength, out float startAngle, out float endAngle, out VanillaArcRadiusBand radiusBand, out float radiusOffsetPixels) { float num; float num2; float num3; switch (slot) { case VanillaArcTextSlot.WeightInfectionInner: num = 24f; num2 = 16f; num3 = 4.8f; radiusBand = VanillaArcRadiusBand.Outer; radiusOffsetPixels = 86f; break; case VanillaArcTextSlot.InfectionOuter: num = 42f; num2 = 22f; num3 = 4.4f; radiusBand = VanillaArcRadiusBand.Outer; radiusOffsetPixels = 150f; break; default: num = 43f; num2 = 16f; num3 = 4.8f; radiusBand = VanillaArcRadiusBand.Outer; radiusOffsetPixels = 92f; break; } float num4 = ((textLength <= 1) ? 0f : Mathf.Min(num2, num3 * (float)(textLength - 1))); startAngle = num + num4 * 0.5f; endAngle = num - num4 * 0.5f; } private static float GetVanillaArcCharacterRotation(float angle, VanillaArcTextSlot slot) { return slot switch { VanillaArcTextSlot.WeightInfectionInner => Mathf.Clamp(angle - 56f, -42f, -10f), VanillaArcTextSlot.InfectionOuter => Mathf.Clamp(angle - 58f, -48f, -10f), _ => Mathf.Clamp(angle - 54f, -36f, -8f), }; } private static float GetVanillaArcFontScale(VanillaArcTextSlot slot) { return slot switch { VanillaArcTextSlot.InfectionOuter => 0.62f, VanillaArcTextSlot.WeightInfectionInner => 0.6f, _ => 0.66f, }; } private static float GetVanillaArcCharacterClearancePixels(VanillaArcTextSlot slot) { return slot switch { VanillaArcTextSlot.WeightInfectionInner => 78f, VanillaArcTextSlot.InfectionOuter => 118f, _ => 70f, }; } private static float GetSprintMeterArcRadius(float angle, VanillaArcRadiusBand band) { float[] array = band switch { VanillaArcRadiusBand.Outer => SprintMeterArcOuterRadii, VanillaArcRadiusBand.Inner => SprintMeterArcInnerRadii, _ => SprintMeterArcMiddleRadii, }; if (angle <= SprintMeterArcAngles[0]) { return array[0]; } int num = SprintMeterArcAngles.Length - 1; if (angle >= SprintMeterArcAngles[num]) { return array[num]; } for (int i = 0; i < num; i++) { float num2 = SprintMeterArcAngles[i]; float num3 = SprintMeterArcAngles[i + 1]; if (!(angle < num2) && !(angle > num3)) { float num4 = Mathf.InverseLerp(num2, num3, angle); return Mathf.Lerp(array[i], array[i + 1], num4); } } return array[num]; } private static float ApplyVanillaArcTextClearance(float angle, float radius, VanillaArcTextSlot slot, VanillaArcRadiusBand band) { float vanillaArcCharacterClearancePixels = GetVanillaArcCharacterClearancePixels(slot); GetSprintMeterArcRadius(angle, VanillaArcRadiusBand.Inner); float sprintMeterArcRadius = GetSprintMeterArcRadius(angle, VanillaArcRadiusBand.Outer); return slot switch { VanillaArcTextSlot.WeightInfectionInner => Mathf.Max(radius, sprintMeterArcRadius + vanillaArcCharacterClearancePixels), VanillaArcTextSlot.InfectionOuter => Mathf.Max(radius, sprintMeterArcRadius + vanillaArcCharacterClearancePixels), _ => Mathf.Max(radius, sprintMeterArcRadius + vanillaArcCharacterClearancePixels), }; } private static void ApplyVanillaTextRect(RectTransform rect, Vector2 anchorMin, Vector2 anchorMax, Vector2 pivot, Vector2 size, Vector2 position, Quaternion rotation, Vector3 scale) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) rect.anchorMin = anchorMin; rect.anchorMax = anchorMax; rect.pivot = pivot; rect.sizeDelta = size; rect.anchoredPosition = position; ((Transform)rect).localRotation = rotation; ((Transform)rect).localScale = scale; } private static void ApplyVanillaArcText(RectTransform root, string text, Color color, VanillaArcTextSlot slot) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)root == (Object)null) { return; } string text2 = text ?? string.Empty; DisableRootText(root); SetUnusedVanillaArcCharactersInactive(root, text2.Length); if (text2.Length == 0) { return; } Vector2 sizeDelta = root.sizeDelta; if (((Vector2)(ref sizeDelta)).sqrMagnitude < 0.0001f) { ((Vector2)(ref sizeDelta))..ctor(80f, 80f); } VanillaArcGlyphLayout[] array = VanillaArcTextLayout.Build(text2, GetVanillaArcTextTrack(slot), Mathf.Abs(sizeDelta.x), Mathf.Abs(sizeDelta.y)); for (int i = 0; i < array.Length; i++) { VanillaArcGlyphLayout vanillaArcGlyphLayout = array[i]; RectTransform orCreateVanillaArcCharacter = GetOrCreateVanillaArcCharacter(root, i); TextMeshProUGUI component = ((Component)orCreateVanillaArcCharacter).GetComponent<TextMeshProUGUI>(); ((Component)orCreateVanillaArcCharacter).gameObject.SetActive(true); orCreateVanillaArcCharacter.anchoredPosition = new Vector2(vanillaArcGlyphLayout.LocalX, vanillaArcGlyphLayout.LocalY); ((Transform)orCreateVanillaArcCharacter).localRotation = Quaternion.Euler(0f, 0f, vanillaArcGlyphLayout.RotationZ); ((Transform)orCreateVanillaArcCharacter).localScale = Vector3.one; string text3 = vanillaArcGlyphLayout.Character.ToString(); if (!string.Equals(((TMP_Text)component).text, text3, StringComparison.Ordinal)) { ((TMP_Text)component).text = text3; } CopyWeightCounterTextStyle(component, color); ((TMP_Text)component).fontSize = ((TMP_Text)component).fontSize * vanillaArcGlyphLayout.FontScale; ((TMP_Text)component).alignment = (TextAlignmentOptions)514; ((Graphic)component).raycastTarget = false; ((TMP_Text)component).enableWordWrapping = false; ((TMP_Text)component).overflowMode = (TextOverflowModes)0; } } private static VanillaArcTextTrack GetVanillaArcTextTrack(VanillaArcTextSlot slot) { return slot switch { VanillaArcTextSlot.WeightInfectionInner => VanillaArcTextTrack.InfectionWeightInner, VanillaArcTextSlot.InfectionOuter => VanillaArcTextTrack.InfectionLabelOuter, _ => VanillaArcTextTrack.StaminaWeightUpper, }; } private static void DisableRootText(RectTransform root) { TextMeshProUGUI component = ((Component)root).GetComponent<TextMeshProUGUI>(); if (!((Object)(object)component == (Object)null)) { ((Behaviour)component).enabled = false; ((TMP_Text)component).text = string.Empty; } } private static RectTransform GetOrCreateVanillaArcCharacter(RectTransform root, int index) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) string text = "VanillaArcChar_" + index.ToString("00"); Transform val = ((Transform)root).Find(text); if ((Object)(object)val != (Object)null) { return (RectTransform)(object)((val is RectTransform) ? val : null); } GameObject val2 = new GameObject(text, new Type[2] { typeof(RectTransform), typeof(TextMeshProUGUI) }); val2.transform.SetParent((Transform)(object)root, false); RectTransform component = val2.GetComponent<RectTransform>(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); component.sizeDelta = new Vector2(36f, 36f); TextMeshProUGUI component2 = val2.GetComponent<TextMeshProUGUI>(); ((Graphic)component2).raycastTarget = false; ((TMP_Text)component2).enableWordWrapping = false; ((TMP_Text)component2).overflowMode = (TextOverflowModes)0; ((TMP_Text)component2).alignment = (TextAlignmentOptions)514; return component; } private static void SetUnusedVanillaArcCharactersInactive(RectTransform root, int activeCount) { for (int i = 0; i < ((Transform)root).childCount; i++) { Transform child = ((Transform)root).GetChild(i); if (((Object)child).name.StartsWith("VanillaArcChar_", StringComparison.Ordinal) && int.TryParse(((Object)child).name.Substring("VanillaArcChar_".Length), out var result)) { ((Component)child).gameObject.SetActive(result < activeCount); } } } private static void CopyWeightCounterTextStyle(TextMeshProUGUI target, Color color) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)target == (Object)null)) { TextMeshProUGUI val = HUDManager.Instance?.weightCounter; if ((Object)(object)val != (Object)null) { ((TMP_Text)target).font = ((TMP_Text)val).font; ((TMP_Text)target).fontSharedMaterial = ((TMP_Text)val).fontSharedMaterial; ((TMP_Text)target).fontSize = ((TMP_Text)val).fontSize; ((TMP_Text)target).fontStyle = ((TMP_Text)val).fontStyle; ((TMP_Text)target).alignment = ((TMP_Text)val).alignment; ((TMP_Text)target).characterSpacing = ((TMP_Text)val).characterSpacing; ((TMP_Text)target).wordSpacing = ((TMP_Text)val).wordSpacing; ((TMP_Text)target).lineSpacing = ((TMP_Text)val).lineSpacing; } else { ((TMP_Text)target).fontSize = 16f; ((TMP_Text)target).alignment = (TextAlignmentOptions)514; } ((Graphic)target).color = color; } } private void UpdateVanillaWeightText(bool force = false) { //IL_0051: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI val = HUDManager.Instance?.weightCounter; string text = (((Object)(object)val != (Object)null) ? ((TMP_Text)val).text : string.Empty); VanillaArcTextSlot vanillaArcTextSlot = (lastVisibleState ? VanillaArcTextSlot.WeightInfectionInner : VanillaArcTextSlot.WeightStaminaUpper); Vector2 val2 = (((Object)(object)vanillaWeightTextRoot != (Object)null) ? vanillaWeightTextRoot.sizeDelta : Vector2.zero); Vector2 val3 = lastAppliedVanillaWeightRootSize - val2; bool flag = ((Vector2)(ref val3)).sqrMagnitude > 0.0001f; lastVanillaWeightText = text; if (force || !hasAppliedVanillaWeightText || lastAppliedVanillaWeightSlot != vanillaArcTextSlot || flag || !string.Equals(lastAppliedVanillaWeightText, text, StringComparison.Ordinal)) { ApplyVanillaArcText(vanillaWeightTextRoot, text, new Color(0.95f, 0.4f, 0.04f, 0.96f), vanillaArcTextSlot); lastAppliedVanillaWeightText = text; lastAppliedVanillaWeightSlot = vanillaArcTextSlot; lastAppliedVanillaWeightRootSize = val2; hasAppliedVanillaWeightText = true; } } private void ApplyVanillaInfectionTextSegments(bool force = false) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) Vector2 val = (((Object)(object)vanillaInfectionTextRoot != (Object)null) ? vanillaInfectionTextRoot.sizeDelta : Vector2.zero); Vector2 val2 = lastAppliedVanillaInfectionRootSize - val; bool flag = ((Vector2)(ref val2)).sqrMagnitude > 0.0001f; if (force || !hasAppliedVanillaInfectionText || flag || !string.Equals(lastAppliedVanillaInfectionText, lastVanillaInfectionText, StringComparison.Ordinal)) { ApplyVanillaArcText(vanillaInfectionTextRoot, lastVanillaInfectionText, new Color(0.95f, 0.26f, 0.18f, 0.95f), VanillaArcTextSlot.InfectionOuter); lastAppliedVanillaInfectionText = lastVanillaInfectionText; lastAppliedVanillaInfectionRootSize = val; hasAppliedVanillaInfectionText = true; } if (force || !hasClearedVanillaInfectionValueText) { ApplyVanillaArcText(vanillaInfectionValueTextRoot, string.Empty, new Color(0.95f, 0.26f, 0.18f, 0.95f), VanillaArcTextSlot.InfectionOuter); hasClearedVanillaInfectionValueText = true; } } private void SetOriginalWeightCounterHidden(bool hidden) { TextMeshProUGUI val = HUDManager.Instance?.weightCounter; if (!hidden) { RestoreOriginalWeightCounter(); } else if (!((Object)(object)val == (Object)null)) { if ((Object)(object)hiddenWeightCounter != (Object)(object)val) { RestoreOriginalWeightCounter(); hiddenWeightCounter = val; hiddenWeightCounterWasEnabled = ((Behaviour)val).enabled; } if (((Behaviour)val).enabled) { ((Behaviour)val).enabled = false; } } } private void RestoreOriginalWeightCounter() { if ((Object)(object)hiddenWeightCounter != (Object)null && ((Behaviour)hiddenWeightCounter).enabled != hiddenWeightCounterWasEnabled) { ((Behaviour)hiddenWeightCounter).enabled = hiddenWeightCounterWasEnabled; } hiddenWeightCounter = null; hiddenWeightCounterWasEnabled = false; } private static Vector2 GetRectReferenceSize(RectTransform rectTransform) { //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_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) Rect rect = rectTransform.rect; Vector2 result = ((Rect)(ref rect)).size; if (((Vector2)(ref result)).sqrMagnitude < 0.0001f) { result = rectTransform.sizeDelta; } return result; } private void ApplyVanillaStaminaRingTransform(RectTransform sprintMeterRect) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(0.1f, ModConfig.VanillaRingScale.Value); Vector2 vanillaOuterRingOffset = GetVanillaOuterRingOffset(sprintMeterRect); infectionRoot.anchorMin = sprintMeterRect.anchorMin; infectionRoot.anchorMax = sprintMeterRect.anchorMax; infectionRoot.pivot = sprintMeterRect.pivot; infectionRoot.sizeDelta = sprintMeterRect.sizeDelta * num; infectionRoot.anchoredPosition = sprintMeterRect.anchoredPosition + vanillaOuterRingOffset + new Vector2(ModConfig.VanillaRingOffsetX.Value, ModConfig.VanillaRingOffsetY.Value); ((Transform)infectionRoot).localRotation = ((Transform)sprintMeterRect).localRotation; ((Transform)infectionRoot).localScale = ((Transform)sprintMeterRect).localScale; } private static Vector2 GetVanillaOuterRingOffset(RectTransform sprintMeterRect) { //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_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) Vector2 rectReferenceSize = GetRectReferenceSize(sprintMeterRect); float num = Mathf.Max(28f, Mathf.Abs(rectReferenceSize.x) * 0.08f); float num2 = 0f - Mathf.Max(18f, Mathf.Abs(rectReferenceSize.y) * 0.1f); return new Vector2(num, num2); } private static void CopySprintMeterImageStyle(Image source, Image target, Color color) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)source == (Object)null) && !((Object)(object)target == (Object)null)) { target.sprite = source.sprite; target.overrideSprite = source.overrideSprite; ((Graphic)target).material = ((Graphic)source).material; target.type = source.type; target.fillMethod = source.fillMethod; target.fillOrigin = source.fillOrigin; target.fillClockwise = source.fillClockwise; target.fillCenter = source.fillCenter; target.preserveAspect = source.preserveAspect; target.pixelsPerUnitMultiplier = source.pixelsPerUnitMultiplier; ((Graphic)target).color = color; ((Graphic)target).raycastTarget = false; } } private static void ApplyVanillaRingFillAmount(Image target, float fillAmount) { if (!((Object)(object)target == (Object)null)) { target.type = (Type)3; target.fillAmount = Mathf.Clamp01(fillAmount); ((Graphic)target).raycastTarget = false; } } private static void StretchToParent(RectTransform rectTransform) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.pivot = new Vector2(0.5f, 0.5f); rectTransform.anchoredPosition = Vector2.zero; rectTransform.sizeDelta = Vector2.zero; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; } private void LogVanillaSprintMeterDiagnostics(Image sprintMeterImage, RectTransform sprintMeterRect) { //IL_00c8: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: 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_020e: Unknown result type (might be due to invalid IL or missing references) if (ShouldLogDiagnostics() && !loggedVanillaSprintMeterDiagnostics) { loggedVanillaSprintMeterDiagnostics = true; string text = (((Object)(object)sprintMeterImage.sprite != (Object)null) ? ((Object)sprintMeterImage.sprite).name : "<null>"); string text2 = (((Object)(object)sprintMeterImage.overrideSprite != (Object)null) ? ((Object)sprintMeterImage.overrideSprite).name : "<null>"); string text3 = (((Object)(object)((Graphic)sprintMeterImage).material != (Object)null) ? ((Object)((Graphic)sprintMeterImage).material).name : "<null>"); ManualLogSource obj = logger; string[] obj2 = new string[30] { "Original sprint meter UI found: path=", GetHierarchyPath((Transform)(object)sprintMeterRect), ", sprite=", text, ", overrideSprite=", text2, ", material=", text3, ", type=", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null }; Type type = sprintMeterImage.type; obj2[9] = ((object)(Type)(ref type)).ToString(); obj2[10] = ", fillMethod="; FillMethod fillMethod = sprintMeterImage.fillMethod; obj2[11] = ((object)(FillMethod)(ref fillMethod)).ToString(); obj2[12] = ", fillOrigin="; obj2[13] = sprintMeterImage.fillOrigin.ToString(); obj2[14] = ", fillClockwise="; obj2[15] = sprintMeterImage.fillClockwise.ToString(); obj2[16] = ", fillAmount="; obj2[17] = sprintMeterImage.fillAmount.ToString(); obj2[18] = ", anchorMin="; Vector2 val = sprintMeterRect.anchorMin; obj2[19] = ((object)(Vector2)(ref val)).ToString(); obj2[20] = ", anchorMax="; val = sprintMeterRect.anchorMax; obj2[21] = ((object)(Vector2)(ref val)).ToString(); obj2[22] = ", pivot="; val = sprintMeterRect.pivot; obj2[23] = ((object)(Vector2)(ref val)).ToString(); obj2[24] = ", sizeDelta="; val = sprintMeterRect.sizeDelta; obj2[25] = ((object)(Vector2)(ref val)).ToString(); obj2[26] = ", anchoredPosition="; val = sprintMeterRect.anchoredPosition; obj2[27] = ((object)(Vector2)(ref val)).ToString(); obj2[28] = ", localRotation="; Vector3 localEulerAngles = ((Transform)sprintMeterRect).localEulerAngles; obj2[29] = ((object)(Vector3)(ref localEulerAngles)).ToString(); obj.LogInfo((object)string.Concat(obj2)); } } private void ResetSceneCachesIfHudManagerChanged() { HUDManager instance = HUDManager.Instance; StartOfRound instance2 = StartOfRound.Instance; if (!((Object)(object)cachedHudManagerInstance == (Object)(object)instance) || !((Object)(object)cachedStartOfRoundInstance == (Object)(object)instance2)) { cachedHudManagerInstance = instance; cachedStartOfRoundInstance = instance2; ClearCachedSceneReferences(); dataProvider.ResetCadaverGrowthCache(); DestroyInfectionUI(); } } private static void ClearCachedSceneReferences() { cachedTerminal = null; cachedNativeHudElementTransform = null; cachedNativeHudParentFallback = null; cachedVanillaWarningRoot = null; cachedNativeHudState = default(NativeHudState); nextTerminalLookupTime = 0f; nextNativeHudElementLookupTime = 0f; nextNativeHudParentFallbackLookupTime = 0f; nextVanillaWarningRootLookupTime = 0f; nextNativeHudStateRefreshTime = 0f; } private void DestroyInfectionUI() { //IL_012f: 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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) RestoreVanillaWarningTextOffset(); if ((Object)(object)infectionRoot != (Object)null) { Object.Destroy((Object)(object)((Component)infectionRoot).gameObject); } canvasGroup = null; infectionRoot = null; panelBackground = null; topLine = null; infectionBackground = null; infectionBar = null; infectionText = null; vanillaSprintMeterReference = null; RestoreOriginalWeightCounter(); if ((Object)(object)vanillaWeightTextRoot != (Object)null) { Object.Destroy((Object)(object)((Component)vanillaWeightTextRoot).gameObject); } if ((Object)(object)vanillaInfectionTextRoot != (Object)null) { Object.Destroy((Object)(object)((Component)vanillaInfectionTextRoot).gameObject); } if ((Object)(object)vanillaInfectionValueTextRoot != (Object)null) { Object.Destroy((Object)(object)((Component)vanillaInfectionValueTextRoot).gameObject); } vanillaWeightTextRoot = null; vanillaWeightTextCanvasGroup = null; vanillaInfectionTextRoot = null; vanillaInfectionTextCanvasGroup = null; vanillaInfectionValueTextRoot = null; vanillaInfectionValueTextCanvasGroup = null; lastVanillaWeightText = string.Empty; lastVanillaInfectionText = string.Empty; lastAppliedVanillaWeightText = string.Empty; lastAppliedVanillaInfectionText = string.Empty; hasAppliedVanillaWeightText = false; hasAppliedVanillaInfectionText = false; hasClearedVanillaInfectionValueText = false; lastAppliedVanillaWeightSlot = VanillaArcTextSlot.WeightStaminaUpper; lastAppliedVanillaWeightRootSize = Vector2.zero; lastAppliedVanillaInfectionRootSize = Vector2.zero; hasVanillaLayoutSignature = false; loggedMissingVanillaWarningRoot = false; hasActiveHudStyle = false; lastVisibleState = false; lastRenderedInfectionFillAmount = -1f; lastRenderedInfectionPercent = -1; lastRenderedInfectionLabel = string.Empty; currentHudAlpha = 1f; StopHudIntroAlphaSampling(); layoutDirty = true; hudStyleDirty = true; loggedMissingNativeHudParent = false; loggedNativeHudParentFallback = false; loggedMissingSprintMeter = false; loggedVanillaSprintMeterDiagnostics = false; } private void HideForCompatibility() { dataProvider.ResetCadaverGrowthCache(); RestoreVanillaWarningTextOffset(); RestoreOriginalWeightCounter(); if ((Object)(object)infectionRoot != (Object)null && ((Component)infectionRoot).gameObject.activeSelf) { ((Component)infectionRoot).gameObject.SetActive(false); } if ((Object)(object)vanillaWeightTextRoot != (Object)null && ((Component)vanillaWeightTextRoot).gameObject.activeSelf) { ((Component)vanillaWeightTextRoot).gameObject.SetActive(false); } if ((Object)(object)vanillaInfectionTextRoot != (Object)null && ((Component)vanillaInfectionTextRoot).gameObject.activeSelf) { ((Component)vanillaInfectionTextRoot).gameObject.SetActive(false); } if ((Object)(object)vanillaInfectionValueTextRoot != (Object)null && ((Component)vanillaInfectionValueTextRoot).gameObject.activeSelf) { ((Component)vanillaInfectionValueTextRoot).gameObject.SetActive(false); } lastVisibleState = false; lastRenderedInfectionFillAmount = -1f; lastRenderedInfectionPercent = -1; lastRenderedInfectionLabel = string.Empty; hasAppliedVanillaWeightText = false; hasAppliedVanillaInfectionText = false; hasClearedVanillaInfectionValueText = false; StopHudIntroAlphaSampling(); layoutDirty = true; } private void RefreshLayoutIfNeeded(PlayerControllerB player) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_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_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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: 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_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to