feat: Controller hotbars with cross layout, separate storage, and sync with game

- Add controller hotbars: 8 cross bars (L2/R2 style), separate from normal hotbars 1-8
- Controller bar slot data stored in config (not game StandardHotbars) so layouts can differ per mode
- Drag-and-drop on controller bars: from game, shift+drag rearrange, release outside to clear
- Independent controller bar keybinds with modifier+trigger combinations (e.g. L2+South)
- Optional 'Sync bar mode with game client': follow Character Config Mouse/Gamepad toggle (PadMode)
- Clone/copy actions: normal hotbars ↔ controller bars
- Restore controller bar layout button; deploy to devPlugins on Release build

Made-with: Cursor
This commit is contained in:
Jorg
2026-02-26 22:18:40 -06:00
parent 369a770162
commit f3e10f27d2
13 changed files with 1706 additions and 21 deletions
+8 -1
View File
@@ -43,6 +43,8 @@ namespace HSUI
public static IAddonLifecycle AddonLifecycle { get; private set; } = null!;
public static IChatGui Chat { get; private set; } = null!;
public static ISeStringEvaluator SeStringEvaluator { get; private set; } = null!;
public static IKeyState? KeyState { get; private set; }
public static IGamepadState? GamepadState { get; private set; }
public static ISharedImmediateTexture? BannerTexture;
@@ -78,7 +80,9 @@ namespace HSUI
ITextureProvider textureProvider,
IAddonLifecycle addonLifecycle,
IChatGui chat,
ISeStringEvaluator seStringEvaluator)
ISeStringEvaluator seStringEvaluator,
IGamepadState? gamepadState = null,
IKeyState? keyState = null)
{
BuddyList = buddyList;
ClientState = clientState;
@@ -100,6 +104,8 @@ namespace HSUI
AddonLifecycle = addonLifecycle;
Chat = chat;
SeStringEvaluator = seStringEvaluator;
KeyState = keyState;
GamepadState = gamepadState;
if (pluginInterface.AssemblyLocation.DirectoryName != null)
{
@@ -134,6 +140,7 @@ namespace HSUI
PartyCooldownsManager.Initialize();
PullTimerHelper.Initialize();
ActionBarsManager.Initialize();
ControllerHotbarHelper.SetGamepadState(GamepadState);
TextTagsHelper.Initialize();
TooltipsHelper.Initialize();
ActionChatLinkHelper.Initialize();