2026-02-02 12:24:50 -08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "game/inventory.hpp"
|
|
|
|
|
#include <imgui.h>
|
|
|
|
|
|
|
|
|
|
namespace wowee {
|
|
|
|
|
namespace ui {
|
|
|
|
|
|
|
|
|
|
class InventoryScreen {
|
|
|
|
|
public:
|
2026-02-05 14:01:26 -08:00
|
|
|
void render(game::Inventory& inventory, uint64_t moneyCopper);
|
2026-02-02 12:24:50 -08:00
|
|
|
bool isOpen() const { return open; }
|
|
|
|
|
void toggle() { open = !open; }
|
|
|
|
|
void setOpen(bool o) { open = o; }
|
|
|
|
|
|
|
|
|
|
/// Returns true if equipment changed since last call, and clears the flag.
|
|
|
|
|
bool consumeEquipmentDirty() { bool d = equipmentDirty; equipmentDirty = false; return d; }
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
bool open = false;
|
|
|
|
|
bool bKeyWasDown = false;
|
|
|
|
|
bool equipmentDirty = false;
|
|
|
|
|
|
|
|
|
|
// Drag-and-drop held item state
|
|
|
|
|
bool holdingItem = false;
|
|
|
|
|
game::ItemDef heldItem;
|
|
|
|
|
enum class HeldSource { NONE, BACKPACK, EQUIPMENT };
|
|
|
|
|
HeldSource heldSource = HeldSource::NONE;
|
|
|
|
|
int heldBackpackIndex = -1;
|
|
|
|
|
game::EquipSlot heldEquipSlot = game::EquipSlot::NUM_SLOTS;
|
|
|
|
|
|
|
|
|
|
void renderEquipmentPanel(game::Inventory& inventory);
|
|
|
|
|
void renderBackpackPanel(game::Inventory& inventory);
|
|
|
|
|
|
|
|
|
|
// Slot rendering with interaction support
|
|
|
|
|
enum class SlotKind { BACKPACK, EQUIPMENT };
|
|
|
|
|
void renderItemSlot(game::Inventory& inventory, const game::ItemSlot& slot,
|
|
|
|
|
float size, const char* label,
|
|
|
|
|
SlotKind kind, int backpackIndex,
|
|
|
|
|
game::EquipSlot equipSlot);
|
|
|
|
|
void renderItemTooltip(const game::ItemDef& item);
|
|
|
|
|
|
|
|
|
|
// Held item helpers
|
|
|
|
|
void pickupFromBackpack(game::Inventory& inv, int index);
|
|
|
|
|
void pickupFromEquipment(game::Inventory& inv, game::EquipSlot slot);
|
|
|
|
|
void placeInBackpack(game::Inventory& inv, int index);
|
|
|
|
|
void placeInEquipment(game::Inventory& inv, game::EquipSlot slot);
|
|
|
|
|
void cancelPickup(game::Inventory& inv);
|
|
|
|
|
game::EquipSlot getEquipSlotForType(uint8_t inventoryType, game::Inventory& inv);
|
|
|
|
|
void renderHeldItem();
|
|
|
|
|
|
|
|
|
|
static ImVec4 getQualityColor(game::ItemQuality quality);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace ui
|
|
|
|
|
} // namespace wowee
|