Add context menu keybinds

This commit is contained in:
Tyfon
2024-06-06 12:57:37 -07:00
parent 583f17153b
commit 45d69b370c
5 changed files with 121 additions and 10 deletions

View File

@@ -48,21 +48,21 @@ namespace UIFixes
{ {
protected override MethodBase GetTargetMethod() protected override MethodBase GetTargetMethod()
{ {
return AccessTools.Method(typeof(ItemUiContext), nameof(ItemUiContext.TranslateCommand)); return AccessTools.Method(typeof(ItemUiContext), nameof(ItemUiContext.Update));
} }
[PatchPrefix] [PatchPostfix]
public static bool Prefix(ECommand command, ref InputNode.ETranslateResult __result, SplitDialog ___splitDialog_0) public static void Postfix(SplitDialog ___splitDialog_0)
{ {
// It's wild to me that they implement UI keyboard shortcuts via the in-raid movement keybinds if (___splitDialog_0 == null || !___splitDialog_0.gameObject.activeSelf)
if (___splitDialog_0 != null && ___splitDialog_0.gameObject.activeSelf && command == ECommand.Jump)
{ {
___splitDialog_0.Accept(); return;
__result = InputNode.ETranslateResult.Block;
return false;
} }
return true; if (Input.GetKeyDown(KeyCode.Space))
{
___splitDialog_0.Accept();
}
} }
} }

View File

@@ -0,0 +1,56 @@
using Aki.Reflection.Patching;
using EFT.InventoryLogic;
using EFT.UI;
using HarmonyLib;
using System.Reflection;
namespace UIFixes
{
public class ContextMenuShortcutPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return AccessTools.Method(typeof(ItemUiContext), nameof(ItemUiContext.Update));
}
[PatchPostfix]
public static void Postfix(ItemUiContext __instance)
{
ItemContextAbstractClass itemContext = __instance.R().ItemContext;
if (itemContext == null)
{
return;
}
if (Settings.InspectKeyBind.Value.IsDown())
{
__instance.GetItemContextInteractions(itemContext, null).ExecuteInteraction(EItemInfoButton.Inspect);
return;
}
if (Settings.OpenKeyBind.Value.IsDown())
{
__instance.GetItemContextInteractions(itemContext, null).ExecuteInteraction(EItemInfoButton.Open);
return;
}
if (Settings.TopUpKeyBind.Value.IsDown())
{
__instance.GetItemContextInteractions(itemContext, null).ExecuteInteraction(EItemInfoButton.TopUp);
return;
}
if (Settings.FilterByKeyBind.Value.IsDown())
{
__instance.GetItemContextInteractions(itemContext, null).ExecuteInteraction(EItemInfoButton.FilterSearch);
return;
}
if (Settings.LinkedSearchKeyBind.Value.IsDown())
{
__instance.GetItemContextInteractions(itemContext, null).ExecuteInteraction(EItemInfoButton.LinkedSearch);
return;
}
}
}
}

View File

@@ -46,6 +46,7 @@ namespace UIFixes
new GridWindowButtonsPatch().Enable(); new GridWindowButtonsPatch().Enable();
new LoadMagPresetsPatch().Enable(); new LoadMagPresetsPatch().Enable();
KeepWindowsOnScreenPatches.Enable(); KeepWindowsOnScreenPatches.Enable();
new ContextMenuShortcutPatch().Enable();
} }
public static bool InRaid() public static bool InRaid()

5
R.cs
View File

@@ -503,16 +503,19 @@ namespace UIFixes
public static Type Type { get; private set; } public static Type Type { get; private set; }
private static FieldInfo InventoryControllerField; private static FieldInfo InventoryControllerField;
private static FieldInfo GridWindowTemplateField; private static FieldInfo GridWindowTemplateField;
private static PropertyInfo ItemContextProperty;
public static void InitTypes() public static void InitTypes()
{ {
Type = typeof(EFT.UI.ItemUiContext); Type = typeof(EFT.UI.ItemUiContext);
InventoryControllerField = AccessTools.GetDeclaredFields(Type).Single(t => t.FieldType == typeof(InventoryControllerClass)); InventoryControllerField = AccessTools.GetDeclaredFields(Type).Single(t => t.FieldType == typeof(InventoryControllerClass));
GridWindowTemplateField = AccessTools.Field(Type, "_gridWindowTemplate"); GridWindowTemplateField = AccessTools.Field(Type, "_gridWindowTemplate");
ItemContextProperty = AccessTools.GetDeclaredProperties(Type).Single(p => p.PropertyType == typeof(ItemContextAbstractClass));
} }
public InventoryControllerClass InventoryController { get { return (InventoryControllerClass)InventoryControllerField.GetValue(Value); } } public InventoryControllerClass InventoryController { get { return (InventoryControllerClass)InventoryControllerField.GetValue(Value); } }
public EFT.UI.GridWindow GridWindowTemplate { get { return (EFT.UI.GridWindow)GridWindowTemplateField.GetValue(Value); } } public EFT.UI.GridWindow GridWindowTemplate { get { return (EFT.UI.GridWindow)GridWindowTemplateField.GetValue(Value); } }
public ItemContextAbstractClass ItemContext { get { return (ItemContextAbstractClass)ItemContextProperty.GetValue(Value); } }
} }
public static class Money public static class Money
@@ -595,7 +598,7 @@ namespace UIFixes
public class MessageWindow(object value) : UIInputNode(value) { } public class MessageWindow(object value) : UIInputNode(value) { }
public class RepairStrategy(object value) : Wrapper(value) public class RepairStrategy(object value) : Wrapper(value)
{ {
public static Type Type { get; private set; } public static Type Type { get; private set; }
private static Type ArmorStrategyType; private static Type ArmorStrategyType;

View File

@@ -41,6 +41,12 @@ namespace UIFixes
public static ConfigEntry<bool> UseHomeEnd { get; set; } public static ConfigEntry<bool> UseHomeEnd { get; set; }
public static ConfigEntry<bool> RebindPageUpDown { get; set; } public static ConfigEntry<bool> RebindPageUpDown { get; set; }
public static ConfigEntry<int> MouseScrollMulti { get; set; } public static ConfigEntry<int> MouseScrollMulti { get; set; }
public static ConfigEntry<KeyboardShortcut> InspectKeyBind { get; set; }
public static ConfigEntry<KeyboardShortcut> OpenKeyBind { get; set; }
public static ConfigEntry<KeyboardShortcut> TopUpKeyBind { get; set; }
public static ConfigEntry<KeyboardShortcut> FilterByKeyBind { get; set; }
public static ConfigEntry<KeyboardShortcut> LinkedSearchKeyBind { get; set; }
public static ConfigEntry<bool> UseRaidMouseScrollMulti { get; set; } // Advanced public static ConfigEntry<bool> UseRaidMouseScrollMulti { get; set; } // Advanced
public static ConfigEntry<int> MouseScrollMultiInRaid { get; set; } // Advanced public static ConfigEntry<int> MouseScrollMultiInRaid { get; set; } // Advanced
@@ -161,6 +167,51 @@ namespace UIFixes
new AcceptableValueRange<int>(1, 10), new AcceptableValueRange<int>(1, 10),
new ConfigurationManagerAttributes { }))); new ConfigurationManagerAttributes { })));
configEntries.Add(InspectKeyBind = config.Bind(
InputSection,
"Inspect Shortcut",
new KeyboardShortcut(KeyCode.I),
new ConfigDescription(
"Keybind to inspect an item",
null,
new ConfigurationManagerAttributes { })));
configEntries.Add(OpenKeyBind = config.Bind(
InputSection,
"Open Shortcut",
new KeyboardShortcut(KeyCode.O),
new ConfigDescription(
"Keybind to open a container",
null,
new ConfigurationManagerAttributes { })));
configEntries.Add(TopUpKeyBind = config.Bind(
InputSection,
"Top Up Ammo Shortcut",
new KeyboardShortcut(KeyCode.T),
new ConfigDescription(
"Keybind to top up an ammo stack",
null,
new ConfigurationManagerAttributes { })));
configEntries.Add(FilterByKeyBind = config.Bind(
InputSection,
"Filter by Item Shortcut",
new KeyboardShortcut(KeyCode.F),
new ConfigDescription(
"Keybind to search flea market for this item",
null,
new ConfigurationManagerAttributes { })));
configEntries.Add(LinkedSearchKeyBind = config.Bind(
InputSection,
"Linked Search Shortcut",
new KeyboardShortcut(KeyCode.L),
new ConfigDescription(
"Keybind to search flea market for items linked to this item",
null,
new ConfigurationManagerAttributes { })));
configEntries.Add(UseRaidMouseScrollMulti = config.Bind( configEntries.Add(UseRaidMouseScrollMulti = config.Bind(
InputSection, InputSection,
"Use Different Scrolling Speed in Raid", "Use Different Scrolling Speed in Raid",