From ece63d9e1ee45458469ed41a42db7cfdd76ffaba Mon Sep 17 00:00:00 2001 From: Tyfon <29051038+tyfon7@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:55:07 -0700 Subject: [PATCH] Fix quick access panel autohide/never not working --- Patches/ContextMenuShortcutPatches.cs | 1 - Patches/FixWeaponBindsDisplayPatch.cs | 73 +++++++++++++++++++++------ Plugin.cs | 2 +- 3 files changed, 58 insertions(+), 18 deletions(-) diff --git a/Patches/ContextMenuShortcutPatches.cs b/Patches/ContextMenuShortcutPatches.cs index 811a021..6f8dfdf 100644 --- a/Patches/ContextMenuShortcutPatches.cs +++ b/Patches/ContextMenuShortcutPatches.cs @@ -3,7 +3,6 @@ using EFT.InventoryLogic; using EFT.UI; using EFT.UI.DragAndDrop; using HarmonyLib; -using System; using System.Reflection; using UnityEngine.EventSystems; diff --git a/Patches/FixWeaponBindsDisplayPatch.cs b/Patches/FixWeaponBindsDisplayPatch.cs index a61668a..c372a07 100644 --- a/Patches/FixWeaponBindsDisplayPatch.cs +++ b/Patches/FixWeaponBindsDisplayPatch.cs @@ -1,33 +1,74 @@ using Aki.Reflection.Patching; +using Bsg.GameSettings; +using Comfort.Common; using EFT.InputSystem; using EFT.InventoryLogic; +using EFT.UI; +using EFT.UI.Settings; using HarmonyLib; using System.Reflection; namespace UIFixes { - public class FixWeaponBindsDisplayPatch : ModulePatch + public static class QuickAccessPanelPatches { - protected override MethodBase GetTargetMethod() + public static void Enable() { - return AccessTools.Method(R.ControlSettings.Type, "GetBoundItemNames"); + new FixWeaponBindsDisplayPatch().Enable(); + new FixVisibilityPatch().Enable(); } - [PatchPostfix] - public static void Postfix(object __instance, EBoundItem boundItem, ref string __result) + public class FixWeaponBindsDisplayPatch : ModulePatch { - var instance = new R.ControlSettings(__instance); - switch(boundItem) + protected override MethodBase GetTargetMethod() { - case EBoundItem.Item1: - __result = instance.GetKeyName(EGameKey.SecondaryWeapon); - break; - case EBoundItem.Item2: - __result = instance.GetKeyName(EGameKey.PrimaryWeaponFirst); - break; - case EBoundItem.Item3: - __result = instance.GetKeyName(EGameKey.PrimaryWeaponSecond); - break; + return AccessTools.Method(R.ControlSettings.Type, "GetBoundItemNames"); + } + + [PatchPostfix] + public static void Postfix(object __instance, EBoundItem boundItem, ref string __result) + { + var instance = new R.ControlSettings(__instance); + switch (boundItem) + { + case EBoundItem.Item1: + __result = instance.GetKeyName(EGameKey.SecondaryWeapon); + break; + case EBoundItem.Item2: + __result = instance.GetKeyName(EGameKey.PrimaryWeaponFirst); + break; + case EBoundItem.Item3: + __result = instance.GetKeyName(EGameKey.PrimaryWeaponSecond); + break; + } + } + } + + public class FixVisibilityPatch : ModulePatch + { + protected override MethodBase GetTargetMethod() + { + return AccessTools.Method(typeof(InventoryScreenQuickAccessPanel), nameof(InventoryScreenQuickAccessPanel.method_4)); + } + + // BSGs implementation of this method is just straight up wrong, so reimplementing it + [PatchPrefix] + public static bool Prefix(InventoryScreenQuickAccessPanel __instance, bool visible) + { + GameSetting quickSlotsVisibility = Singleton.Instance.Game.Settings.QuickSlotsVisibility; + bool disabled = __instance.IsDisabled; + + if (visible && !disabled && quickSlotsVisibility != EVisibilityMode.Never) + { + __instance.AnimatedShow(quickSlotsVisibility == EVisibilityMode.Autohide); + + } + else + { + __instance.AnimatedHide(); + } + + return false; } } } diff --git a/Plugin.cs b/Plugin.cs index 341010c..ba37baf 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -16,7 +16,7 @@ namespace UIFixes ConfirmDialogKeysPatches.Enable(); new FixMailRecieveAllPatch().Enable(); FixTooltipPatches.Enable(); - new FixWeaponBindsDisplayPatch().Enable(); + QuickAccessPanelPatches.Enable(); FocusFleaOfferNumberPatches.Enable(); HideoutSearchPatches.Enable(); HideoutLevelPatches.Enable();