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 Cyphers No HUD Mod v2.0.0
RoR2_ImmersiveHUD.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using Microsoft.CodeAnalysis; using On.RoR2.UI; using RoR2.UI; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RoR2_ImmersiveHUD")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RoR2_ImmersiveHUD")] [assembly: AssemblyTitle("RoR2_ImmersiveHUD")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace RoR2_ImmersiveHUD { public static class BetterHudLiteCompat { private const string PluginGUID = "com.TheTimeSweeper.BetterHudLite"; public static bool IsLoaded { get; private set; } static BetterHudLiteCompat() { IsLoaded = Chainloader.PluginInfos.ContainsKey("com.TheTimeSweeper.BetterHudLite"); } public static GameObject GetHealthObject(Transform springCanvas) { if (!IsLoaded || (Object)(object)springCanvas == (Object)null) { return null; } Transform val = springCanvas.Find("BottomCenterCluster/BarRoots"); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).gameObject; } public static GameObject GetSkillsObject(Transform springCanvas) { if (!IsLoaded || (Object)(object)springCanvas == (Object)null) { return null; } Transform val = springCanvas.Find("BottomCenterCluster/Scaler"); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).gameObject; } } public static class ChatTooltipsCompat { public enum TooltipType { Pickup, Achievement, Ping } private const string GUID = "bulletbot.chattooltips"; public static bool IsLoaded { get; private set; } static ChatTooltipsCompat() { IsLoaded = Chainloader.PluginInfos.ContainsKey("bulletbot.chattooltips"); } public static string GenerateTooltipString(string visibleText, string token, int type = 0, int quantity = 1) { if (!IsLoaded) { return visibleText; } string text = $"{type}|{token}|{quantity}"; return "<link=\"" + text + "\">" + visibleText + "</link>"; } } public static class HunkHudCompat { private const string BaseTypeName = "HunkHud.Components.DisplayMover"; private static Type _displayMoverType; private static MethodInfo _setActiveMethod; private static bool _initialized; private static bool _isHunkHudLoaded; public static void Init() { if (_initialized) { return; } Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); for (int i = 0; i < assemblies.Length; i++) { _displayMoverType = assemblies[i].GetType("HunkHud.Components.DisplayMover"); if (_displayMoverType != null) { _setActiveMethod = _displayMoverType.GetMethod("SetActive", new Type[0]); _isHunkHudLoaded = true; break; } } _initialized = true; } public static List<MonoBehaviour> FindMovers(Transform root) { List<MonoBehaviour> list = new List<MonoBehaviour>(); if (!_isHunkHudLoaded || (Object)(object)root == (Object)null) { return list; } Component[] componentsInChildren = ((Component)root).GetComponentsInChildren(_displayMoverType, true); foreach (Component obj in componentsInChildren) { MonoBehaviour val = (MonoBehaviour)(object)((obj is MonoBehaviour) ? obj : null); if (val != null) { list.Add(val); } } return list; } public static void ForceActive(MonoBehaviour mover) { if ((Object)(object)mover != (Object)null && _setActiveMethod != null) { _setActiveMethod.Invoke(mover, null); } } public static string GetMoverType(MonoBehaviour mover) { if ((Object)(object)mover == (Object)null) { return ""; } return ((object)mover).GetType().Name; } } [BepInPlugin("Cyphers.ImmersiveHUD", "Immersive HUD", "2.0.0")] public class ImmersiveHUD : BaseUnityPlugin { public static ConfigEntry<KeyboardShortcut> ToggleKey; public static ConfigEntry<KeyboardShortcut> DebugKey; public static ConfigEntry<float> FadeInDuration; public static ConfigEntry<float> FadeOutDuration; public static ConfigEntry<bool> ShowHealth; public static ConfigEntry<bool> ShowSkills; public static ConfigEntry<bool> ShowMoney; public static ConfigEntry<bool> ShowTopRight; public static ConfigEntry<bool> ShowBoss; public static ConfigEntry<bool> ShowReticle; public static ConfigEntry<bool> ShowAllies; public static ConfigEntry<bool> ShowNotifications; public static ConfigEntry<bool> ShowStatsDisplay; public static ConfigEntry<bool> ShowBHLHealth; public static ConfigEntry<bool> ShowBHLSkills; public static ConfigEntry<bool> ForceHunkHealth; public static ConfigEntry<bool> ForceHunkSkills; public static ConfigEntry<bool> ForceHunkMoney; public static ConfigEntry<bool> ForceHunkAllies; public static ConfigEntry<bool> ForceHunkItems; public static ConfigEntry<bool> ForceHunkObjectives; public void Awake() { //IL_001c: 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_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Expected O, but got Unknown HunkHudCompat.Init(); ToggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Controls", "Toggle HUD Key", new KeyboardShortcut((KeyCode)112, Array.Empty<KeyCode>()), "Key to fade the HUD in/out."); DebugKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Controls", "Debug Hierarchy Key", new KeyboardShortcut((KeyCode)289, Array.Empty<KeyCode>()), "Press to print UI names."); FadeInDuration = ((BaseUnityPlugin)this).Config.Bind<float>("Settings", "Fade In Duration", 0.5f, "Seconds it takes for the HUD to appear."); FadeOutDuration = ((BaseUnityPlugin)this).Config.Bind<float>("Settings", "Fade Out Duration", 1.5f, "Seconds it takes for the HUD to disappear."); ShowHealth = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Health", false, "Keep Health/Level bar visible?"); ShowSkills = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Skills", false, "Keep Skills/Items visible?"); ShowMoney = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Money", false, "Keep Money/Lunar Coins visible?"); ShowTopRight = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Difficulty and Timer", false, "Keep Difficulty/Timer/Stage visible?"); ShowBoss = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Boss Health", false, "Keep Boss Health visible?"); ShowReticle = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Reticle", true, "Keep Crosshair visible?"); ShowAllies = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Ally Cards", false, "Keep Ally/Drone list visible?"); ShowNotifications = ((BaseUnityPlugin)this).Config.Bind<bool>("Visibility", "Show Notifications", true, "If true, pickups behave normally. If false, hidden until P is pressed."); ShowStatsDisplay = ((BaseUnityPlugin)this).Config.Bind<bool>("Mod Compatibility", "Show LookingGlass Stats", false, "Keep the LookingGlass Stats Display visible? (Only applies if Stats are Detached)."); ShowBHLHealth = ((BaseUnityPlugin)this).Config.Bind<bool>("BetterHudLite Compatibility", "Show Health Bar", false, "Keep BetterHudLite Health/Level bar visible?"); ShowBHLSkills = ((BaseUnityPlugin)this).Config.Bind<bool>("BetterHudLite Compatibility", "Show Skills", false, "Keep BetterHudLite Skills visible?"); ForceHunkHealth = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Health Bar", true, "Force HunkHUD Health Bar to stay on screen when HUD is toggled ON."); ForceHunkSkills = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Skills", true, "Force HunkHUD Skills to stay on screen when HUD is toggled ON."); ForceHunkMoney = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Money", true, "Force HunkHUD Money to stay on screen when HUD is toggled ON."); ForceHunkAllies = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Ally Cards", true, "Force HunkHUD Ally Cards to stay on screen when HUD is toggled ON."); ForceHunkItems = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Items", true, "Force HunkHUD Item Bar (Top Center) to stay on screen when HUD is toggled ON."); ForceHunkObjectives = ((BaseUnityPlugin)this).Config.Bind<bool>("HunkHUD Compatibility", "Force Objectives", true, "Force HunkHUD Objectives/Timer to stay on screen when HUD is toggled ON."); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Immersive HUD 2.8 Loaded (Separate BHL Configs)."); HUD.Awake += new hook_Awake(HUD_Awake); } private void HUD_Awake(orig_Awake orig, HUD self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<ImmersiveHUDController>(); } } public class ImmersiveHUDController : MonoBehaviour { private class HUDElement { public GameObject GameObject; public CanvasGroup CanvasGroup; public ConfigEntry<bool> Config; public bool IsDynamic; public HUDElement(GameObject obj, ConfigEntry<bool> cfg, bool isDynamic = false) { GameObject = obj; Config = cfg; IsDynamic = isDynamic; CanvasGroup = obj.GetComponent<CanvasGroup>(); if (!Object.op_Implicit((Object)(object)CanvasGroup)) { CanvasGroup = obj.AddComponent<CanvasGroup>(); } } } private List<HUDElement> _elements = new List<HUDElement>(); private HashSet<GameObject> _trackedObjects = new HashSet<GameObject>(); private List<MonoBehaviour> _hunkHudMovers = new List<MonoBehaviour>(); private float _scanTimer; private bool _tempShowAll; private Transform _springCanvas; private Transform _mainUiArea; public IEnumerator Start() { yield return (object)new WaitForSeconds(0.2f); FindUIElements(); RefreshDynamicElements(); } private void FindUIElements() { _mainUiArea = ((Component)this).transform.Find("MainContainer/MainUIArea"); _springCanvas = (Object.op_Implicit((Object)(object)_mainUiArea) ? _mainUiArea.Find("SpringCanvas") : null); if (Object.op_Implicit((Object)(object)_springCanvas)) { if (BetterHudLiteCompat.IsLoaded) { GameObject healthObject = BetterHudLiteCompat.GetHealthObject(_springCanvas); if (Object.op_Implicit((Object)(object)healthObject)) { AddDirect(healthObject, ImmersiveHUD.ShowBHLHealth); } else { Add(_springCanvas, "BottomLeftCluster", null, ImmersiveHUD.ShowHealth); } } else { Add(_springCanvas, "BottomLeftCluster", null, ImmersiveHUD.ShowHealth); } if (BetterHudLiteCompat.IsLoaded) { GameObject skillsObject = BetterHudLiteCompat.GetSkillsObject(_springCanvas); if (Object.op_Implicit((Object)(object)skillsObject)) { AddDirect(skillsObject, ImmersiveHUD.ShowBHLSkills); } Add(_springCanvas, "BottomRightCluster", null, ImmersiveHUD.ShowBHLSkills); } else { Add(_springCanvas, "BottomRightCluster", null, ImmersiveHUD.ShowSkills); } Add(_springCanvas, "UpperLeftCluster", "TopLeftCluster", ImmersiveHUD.ShowMoney); Add(_springCanvas, "UpperRightCluster", "TopRightCluster", ImmersiveHUD.ShowTopRight); Add(_springCanvas, "TopCenterCluster", "BossHealth", ImmersiveHUD.ShowBoss); Add(_springCanvas, "LeftCluster", null, ImmersiveHUD.ShowAllies); Add(_springCanvas, "NotificationArea", "NotificationPanel", ImmersiveHUD.ShowNotifications, isDynamic: true); } if (Object.op_Implicit((Object)(object)_mainUiArea)) { GameObject val = FindChild(_mainUiArea, "CrosshairCanvas"); if (!Object.op_Implicit((Object)(object)val)) { val = FindChildRecursive(_mainUiArea, "Crosshair"); } AddDirect(val, ImmersiveHUD.ShowReticle); Add(_mainUiArea, "PlayerStats", null, ImmersiveHUD.ShowStatsDisplay); } void Add(Transform root, string name, string altName, ConfigEntry<bool> config, bool isDynamic = false) { if (Object.op_Implicit((Object)(object)root)) { GameObject val2 = FindChild(root, name); if (!Object.op_Implicit((Object)(object)val2) && !string.IsNullOrEmpty(altName)) { val2 = FindChild(root, altName); } if (!Object.op_Implicit((Object)(object)val2)) { val2 = FindChildRecursive(root, name); } AddDirect(val2, config); } } void AddDirect(GameObject obj, ConfigEntry<bool> config) { if (Object.op_Implicit((Object)(object)obj) && !_trackedObjects.Contains(obj)) { _elements.Add(new HUDElement(obj, config)); _trackedObjects.Add(obj); } } } public void Update() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut value = ImmersiveHUD.ToggleKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { _tempShowAll = !_tempShowAll; if (_tempShowAll) { RefreshDynamicElements(); } } value = ImmersiveHUD.DebugKey.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { DumpHierarchy(); } if (_tempShowAll) { _scanTimer += Time.deltaTime; if (_scanTimer > 1f) { RefreshDynamicElements(); _scanTimer = 0f; } } UpdateFades(); UpdateHunkHud(); } private void RefreshDynamicElements() { if (Object.op_Implicit((Object)(object)_springCanvas)) { _hunkHudMovers = HunkHudCompat.FindMovers(_springCanvas); } if (Object.op_Implicit((Object)(object)_mainUiArea)) { GameObject val = FindChild(_mainUiArea, "PlayerStats"); if (Object.op_Implicit((Object)(object)val) && !_trackedObjects.Contains(val)) { _elements.Add(new HUDElement(val, ImmersiveHUD.ShowStatsDisplay)); _trackedObjects.Add(val); } } } private void UpdateHunkHud() { if (!_tempShowAll || _hunkHudMovers.Count == 0) { return; } foreach (MonoBehaviour hunkHudMover in _hunkHudMovers) { string moverType = HunkHudCompat.GetMoverType(hunkHudMover); bool flag = false; if (moverType.Contains("HealthBarMover") && ImmersiveHUD.ForceHunkHealth.Value) { flag = true; } else if (moverType.Contains("SkillIconMover") && ImmersiveHUD.ForceHunkSkills.Value) { flag = true; } else if (moverType.Contains("MoneyDisplayMover") && ImmersiveHUD.ForceHunkMoney.Value) { flag = true; } else if (moverType.Contains("AllyHealthBarMover") && ImmersiveHUD.ForceHunkAllies.Value) { flag = true; } else if (moverType.Contains("ItemDisplayMover") && ImmersiveHUD.ForceHunkItems.Value) { flag = true; } else if (moverType.Contains("ObjectiveDisplayMover") && ImmersiveHUD.ForceHunkObjectives.Value) { flag = true; } if (flag) { HunkHudCompat.ForceActive(hunkHudMover); } } } private void UpdateFades() { float deltaTime = Time.deltaTime; foreach (HUDElement element in _elements) { if (element.IsDynamic && element.Config.Value && !_tempShowAll) { if (!element.CanvasGroup.blocksRaycasts && element.CanvasGroup.alpha > 0.1f) { element.CanvasGroup.blocksRaycasts = true; } continue; } float num = ((_tempShowAll || element.Config.Value) ? 1f : 0f); float alpha = element.CanvasGroup.alpha; float num2 = ((num > alpha) ? ImmersiveHUD.FadeInDuration.Value : ImmersiveHUD.FadeOutDuration.Value); float num3 = 1f / Mathf.Max(0.001f, num2); float num4 = Mathf.MoveTowards(alpha, num, num3 * deltaTime); element.CanvasGroup.alpha = num4; element.CanvasGroup.blocksRaycasts = num4 > 0.1f; } } private GameObject FindChild(Transform parent, string name) { Transform val = parent.Find(name); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).gameObject; } private GameObject FindChildRecursive(Transform parent, string nameFragment) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown foreach (Transform item in parent) { Transform val = item; if (((Object)val).name.Contains(nameFragment)) { return ((Component)val).gameObject; } GameObject val2 = FindChildRecursive(val, nameFragment); if ((Object)(object)val2 != (Object)null) { return val2; } } return null; } private void DumpHierarchy() { Debug.Log((object)"--- ImmersiveHUD Full Dump ---"); Dump(((Component)this).transform, ">"); static void Dump(Transform t, string prefix) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown Debug.Log((object)$"{prefix}{((Object)t).name} [Active: {((Component)t).gameObject.activeInHierarchy}]"); foreach (Transform item in t) { Dump(item, prefix + "-"); } } } } }