5.9 KiB
5.9 KiB
WBP_InventoryMenu — Widget (Inventory Screen)
Parent Class: UUserWidget (created via Widget Blueprint)
Dependencies: BPC_InventorySystem, SS_UIManager, BPC_ActiveItemSystem, BPC_EquipmentSlotSystem, DA_ItemData
File: WBP_InventoryMenu
Purpose
Full-screen inventory grid view. Supports standard grid-list display, diegetic overlay mode, and radial quick-slot menu. Reads from BPC_InventorySystem but never writes — all mutations go through the component.
Responsibilities
- Display inventory slots in a scrollable grid (3 columns, N rows)
- Show item details in a side panel when an item is selected
- Support drag-and-drop between slots, between slots and equipment slots, and between slots and quick slots
- Support right-click / gamepad context menu (Use, Equip, Drop, Examine, Combine)
- Display item tooltip on hover
- Filter/sort by category via tabs (All, Documents, Tools, Keys, Consumables, Quest Items)
- Display weight bar at bottom (filled fractional, color-coded per weight tier)
- Support
E_InventoryViewModeswitching (Grid, Diegetic Overlay, Radial Quick) - Close on B/Cancel or when
OnMenuClosedfires fromSS_UIManager
Enums
// Defined within the widget or a shared parent
E_InventoryViewMode
{
Grid,
DiegeticOverlay,
RadialQuick
}
Variables
| Name | Type | Description |
|---|---|---|
OwningInventory |
BPC_InventorySystem |
Cached reference (set on Construct) |
ViewMode |
E_InventoryViewMode |
Current display mode |
SelectedSlotIndex |
Int | Currently highlighted slot (-1 = none) |
SelectedItemData |
DA_ItemData |
Item currently shown in detail panel |
GridPanel |
UniformGridPanel |
Main slot grid |
DetailPanel |
WBP_ItemDetailPanel |
Right-side detail panel |
WeightBar |
ProgressBar |
Bottom weight bar |
WeightText |
TextBlock |
"12.5 / 50.0 kg" |
TabButtons |
Array of Button |
All, Documents, Tools, Keys, etc. |
ActiveFilter |
E_ItemCategory |
Current filter |
ContextMenu |
WBP_ContextMenu |
Right-click popup |
RadialMenu |
WBP_RadialMenu |
Radial quick-slot selector (if RadialQuick mode) |
Functions / Events
| Name | Inputs | Outputs | Description |
|---|---|---|---|
Construct |
— | — | Cache inventory, bind dispatchers, rebuild grid |
RebuildGrid |
Filter: E_ItemCategory |
— | Clear grid, add slot widgets for matching items |
OnSlotClicked |
SlotIndex: Int | — | Set SelectedSlotIndex, update detail panel |
ShowContextMenu |
SlotIndex: Int | — | Open context menu at mouse position |
ContextMenuAction |
Action: E_ItemAction |
— | Route to UseItem, EquipItem, DropItem, etc. |
UseItem |
SlotIndex: Int | — | Call inventory.UseItem(SlotIndex) |
EquipItem |
SlotIndex: Int | — | Call inventory.EquipFromSlot(SlotIndex) |
DropItem |
SlotIndex: Int | — | Call inventory.DropItem(SlotIndex) |
CombineItems |
SourceIndex: Int, TargetIndex: Int | — | Call inventory.CombineItems(Source, Target) |
ExamineItem |
SlotIndex: Int | — | Request narrative system examine description |
SwitchViewMode |
NewMode: E_InventoryViewMode |
— | Transition between Grid/Diegetic/Radial |
UpdateWeightBar |
CurrentWeight: Float, MaxWeight: Float | — | Set bar percent, color per tier, update text |
OnInventoryChanged |
SlotIndex: Int | — | Called via dispatcher; rebuild affected row |
HandleNavigation |
Direction: E_NavDirection |
— | Keyboard/gamepad slot navigation |
Event Dispatchers
| Name | Parameters | Fired When |
|---|---|---|
OnItemSelected |
ItemData: DA_ItemData |
A slot is clicked |
OnItemUsed |
SlotIndex: Int | An item is used |
OnItemEquipped |
SlotIndex: Int | An item is equipped |
OnItemDropped |
SlotIndex: Int | An item is dropped from inventory |
OnCombineRequested |
SourceIndex: Int, TargetIndex: Int | Combine action initiated |
OnViewModeChanged |
NewMode: E_InventoryViewMode |
View mode transitions |
Blueprint Flow — Grid Population
flowchart TD
A[Construct widget] --> B[Cache BPC_InventorySystem]
B --> C[Bind OnInventoryChanged dispatcher]
C --> D[RebuildGrid current filter]
D --> E[Loop items in inventory]
E --> F{Matches filter?}
F -->|Yes| G[Create WBP_InventorySlot]
G --> H[Add to UniformGridPanel column row]
F -->|No| I[Skip]
H --> J[Bind slot.OnClicked]
J --> K[Update WeightBar]
Communications With
| Target System | Method | Why |
|---|---|---|
BPC_InventorySystem |
Direct reference, dispatchers | Read items, execute mutations |
SS_UIManager |
OpenMenu / CloseMenu |
Menu lifecycle |
BPC_ActiveItemSystem |
Direct calls | Assign/clear quick slots from radial menu |
BPC_EquipmentSlotSystem |
Dispatcher (OnEquipmentChanged) |
Update equipped indicator |
BPC_InteractionDetector |
Dispatcher | Drop item creates pickup actor |
[BPC_NarrativeStateSystem] |
Function | Examine item triggers narrative |
Reuse Notes
The grid population loop is the same pattern used by container inventories and shop UIs — the only difference is the source BPC_InventorySystem reference. Consider creating a shared WBP_SlotGrid base if containers need the same logic. The Diegetic Overlay and Radial Quick modes are purely visual transformations of the same slot data.
- Renamed from
WBP_InventoryUItoWBP_InventoryMenuper Master naming convention. - Cross-references updated:
BPC_InventoryComponent→BPC_InventorySystem,BPC_InventoryQuickSlot→BPC_ActiveItemSystem,BPC_EquipmentSystem→BPC_EquipmentSlotSystem.