From 332c2f6d3f5fee0b2cbd7c1be947f075c9f13e56 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Wed, 11 Mar 2026 09:02:15 -0700 Subject: [PATCH] feat: add TOGGLE_BAGS action and integrate inventory screen with keybinding manager - Add TOGGLE_BAGS action to keybinding manager (B key default) - Update inventory_screen.cpp to use keybinding manager for bag and character toggles - Maintain consistent keybinding system across all UI windows --- include/ui/keybinding_manager.hpp | 1 + src/ui/inventory_screen.cpp | 22 +++++++++++++--------- src/ui/keybinding_manager.cpp | 4 ++++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/ui/keybinding_manager.hpp b/include/ui/keybinding_manager.hpp index 098505c1..09c9ac05 100644 --- a/include/ui/keybinding_manager.hpp +++ b/include/ui/keybinding_manager.hpp @@ -17,6 +17,7 @@ public: enum class Action { TOGGLE_CHARACTER_SCREEN, TOGGLE_INVENTORY, + TOGGLE_BAGS, TOGGLE_SPELLBOOK, TOGGLE_TALENTS, TOGGLE_QUESTS, diff --git a/src/ui/inventory_screen.cpp b/src/ui/inventory_screen.cpp index 0bb2c8c3..6255601f 100644 --- a/src/ui/inventory_screen.cpp +++ b/src/ui/inventory_screen.cpp @@ -1,4 +1,5 @@ #include "ui/inventory_screen.hpp" +#include "ui/keybinding_manager.hpp" #include "game/game_handler.hpp" #include "core/application.hpp" #include "rendering/vk_context.hpp" @@ -709,18 +710,21 @@ bool InventoryScreen::bagHasAnyItems(const game::Inventory& inventory, int bagIn } void InventoryScreen::render(game::Inventory& inventory, uint64_t moneyCopper) { - // B key toggle (edge-triggered) - bool wantsTextInput = ImGui::GetIO().WantTextInput; - bool bDown = !wantsTextInput && core::Input::getInstance().isKeyPressed(SDL_SCANCODE_B); - bool bToggled = bDown && !bKeyWasDown; - bKeyWasDown = bDown; + // Bags toggle (B key, edge-triggered) + bool bagsDown = KeybindingManager::getInstance().isActionPressed( + KeybindingManager::Action::TOGGLE_BAGS, false); + bool bToggled = bagsDown && !bKeyWasDown; + bKeyWasDown = bagsDown; - // C key toggle for character screen (edge-triggered) - bool cDown = !wantsTextInput && core::Input::getInstance().isKeyPressed(SDL_SCANCODE_C); - if (cDown && !cKeyWasDown) { + // Character screen toggle (C key, edge-triggered) + bool characterDown = KeybindingManager::getInstance().isActionPressed( + KeybindingManager::Action::TOGGLE_CHARACTER_SCREEN, false); + if (characterDown && !cKeyWasDown) { characterOpen = !characterOpen; } - cKeyWasDown = cDown; + cKeyWasDown = characterDown; + + bool wantsTextInput = ImGui::GetIO().WantTextInput; if (separateBags_) { if (bToggled) { diff --git a/src/ui/keybinding_manager.cpp b/src/ui/keybinding_manager.cpp index bb2d1021..212d2af0 100644 --- a/src/ui/keybinding_manager.cpp +++ b/src/ui/keybinding_manager.cpp @@ -18,6 +18,7 @@ void KeybindingManager::initializeDefaults() { // Set default keybindings bindings_[static_cast(Action::TOGGLE_CHARACTER_SCREEN)] = ImGuiKey_C; bindings_[static_cast(Action::TOGGLE_INVENTORY)] = ImGuiKey_I; + bindings_[static_cast(Action::TOGGLE_BAGS)] = ImGuiKey_B; bindings_[static_cast(Action::TOGGLE_SPELLBOOK)] = ImGuiKey_P; // WoW standard key bindings_[static_cast(Action::TOGGLE_TALENTS)] = ImGuiKey_N; // WoW standard key bindings_[static_cast(Action::TOGGLE_QUESTS)] = ImGuiKey_L; @@ -57,6 +58,7 @@ const char* KeybindingManager::getActionName(Action action) { switch (action) { case Action::TOGGLE_CHARACTER_SCREEN: return "Character Screen"; case Action::TOGGLE_INVENTORY: return "Inventory"; + case Action::TOGGLE_BAGS: return "Bags"; case Action::TOGGLE_SPELLBOOK: return "Spellbook"; case Action::TOGGLE_TALENTS: return "Talents"; case Action::TOGGLE_QUESTS: return "Quests"; @@ -120,6 +122,7 @@ void KeybindingManager::loadFromConfigFile(const std::string& filePath) { int actionIdx = -1; if (action == "toggle_character_screen") actionIdx = static_cast(Action::TOGGLE_CHARACTER_SCREEN); else if (action == "toggle_inventory") actionIdx = static_cast(Action::TOGGLE_INVENTORY); + else if (action == "toggle_bags") actionIdx = static_cast(Action::TOGGLE_BAGS); else if (action == "toggle_spellbook") actionIdx = static_cast(Action::TOGGLE_SPELLBOOK); else if (action == "toggle_talents") actionIdx = static_cast(Action::TOGGLE_TALENTS); else if (action == "toggle_quests") actionIdx = static_cast(Action::TOGGLE_QUESTS); @@ -210,6 +213,7 @@ void KeybindingManager::saveToConfigFile(const std::string& filePath) const { } actionMap[] = { {Action::TOGGLE_CHARACTER_SCREEN, "toggle_character_screen"}, {Action::TOGGLE_INVENTORY, "toggle_inventory"}, + {Action::TOGGLE_BAGS, "toggle_bags"}, {Action::TOGGLE_SPELLBOOK, "toggle_spellbook"}, {Action::TOGGLE_TALENTS, "toggle_talents"}, {Action::TOGGLE_QUESTS, "toggle_quests"},