Fix quick access panel autohide/never not working

This commit is contained in:
Tyfon
2024-06-17 12:55:07 -07:00
parent da3ffc170d
commit ece63d9e1e
3 changed files with 58 additions and 18 deletions

View File

@@ -3,7 +3,6 @@ using EFT.InventoryLogic;
using EFT.UI; using EFT.UI;
using EFT.UI.DragAndDrop; using EFT.UI.DragAndDrop;
using HarmonyLib; using HarmonyLib;
using System;
using System.Reflection; using System.Reflection;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;

View File

@@ -1,11 +1,23 @@
using Aki.Reflection.Patching; using Aki.Reflection.Patching;
using Bsg.GameSettings;
using Comfort.Common;
using EFT.InputSystem; using EFT.InputSystem;
using EFT.InventoryLogic; using EFT.InventoryLogic;
using EFT.UI;
using EFT.UI.Settings;
using HarmonyLib; using HarmonyLib;
using System.Reflection; using System.Reflection;
namespace UIFixes namespace UIFixes
{ {
public static class QuickAccessPanelPatches
{
public static void Enable()
{
new FixWeaponBindsDisplayPatch().Enable();
new FixVisibilityPatch().Enable();
}
public class FixWeaponBindsDisplayPatch : ModulePatch public class FixWeaponBindsDisplayPatch : ModulePatch
{ {
protected override MethodBase GetTargetMethod() protected override MethodBase GetTargetMethod()
@@ -17,7 +29,7 @@ namespace UIFixes
public static void Postfix(object __instance, EBoundItem boundItem, ref string __result) public static void Postfix(object __instance, EBoundItem boundItem, ref string __result)
{ {
var instance = new R.ControlSettings(__instance); var instance = new R.ControlSettings(__instance);
switch(boundItem) switch (boundItem)
{ {
case EBoundItem.Item1: case EBoundItem.Item1:
__result = instance.GetKeyName(EGameKey.SecondaryWeapon); __result = instance.GetKeyName(EGameKey.SecondaryWeapon);
@@ -31,4 +43,33 @@ namespace UIFixes
} }
} }
} }
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<EVisibilityMode> quickSlotsVisibility = Singleton<SharedGameSettingsClass>.Instance.Game.Settings.QuickSlotsVisibility;
bool disabled = __instance.IsDisabled;
if (visible && !disabled && quickSlotsVisibility != EVisibilityMode.Never)
{
__instance.AnimatedShow(quickSlotsVisibility == EVisibilityMode.Autohide);
}
else
{
__instance.AnimatedHide();
}
return false;
}
}
}
} }

View File

@@ -16,7 +16,7 @@ namespace UIFixes
ConfirmDialogKeysPatches.Enable(); ConfirmDialogKeysPatches.Enable();
new FixMailRecieveAllPatch().Enable(); new FixMailRecieveAllPatch().Enable();
FixTooltipPatches.Enable(); FixTooltipPatches.Enable();
new FixWeaponBindsDisplayPatch().Enable(); QuickAccessPanelPatches.Enable();
FocusFleaOfferNumberPatches.Enable(); FocusFleaOfferNumberPatches.Enable();
HideoutSearchPatches.Enable(); HideoutSearchPatches.Enable();
HideoutLevelPatches.Enable(); HideoutLevelPatches.Enable();