add blueprints
This commit is contained in:
132
docs/blueprints/06-ui/49_WBP_InventoryMenu.md
Normal file
132
docs/blueprints/06-ui/49_WBP_InventoryMenu.md
Normal file
@@ -0,0 +1,132 @@
|
||||
# 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_InventoryViewMode` switching (Grid, Diegetic Overlay, Radial Quick)
|
||||
- Close on B/Cancel or when `OnMenuClosed` fires from `SS_UIManager`
|
||||
|
||||
---
|
||||
|
||||
## Enums
|
||||
|
||||
```cpp
|
||||
// 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
|
||||
|
||||
```mermaid
|
||||
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`](../04-inventory/BPC_InventorySystem.md) | Direct reference, dispatchers | Read items, execute mutations |
|
||||
| [`SS_UIManager`](44_SS_UIManager.md) | `OpenMenu` / `CloseMenu` | Menu lifecycle |
|
||||
| [`BPC_ActiveItemSystem`](../04-inventory/BPC_ActiveItemSystem.md) | Direct calls | Assign/clear quick slots from radial menu |
|
||||
| [`BPC_EquipmentSlotSystem`](../04-inventory/BPC_EquipmentSlotSystem.md) | Dispatcher (`OnEquipmentChanged`) | Update equipped indicator |
|
||||
| [`BPC_InteractionDetector`](../03-interaction/16_BPC_InteractionDetector.md) | 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_InventoryUI` to `WBP_InventoryMenu` per Master naming convention.
|
||||
- Cross-references updated: `BPC_InventoryComponent` → `BPC_InventorySystem`, `BPC_InventoryQuickSlot` → `BPC_ActiveItemSystem`, `BPC_EquipmentSystem` → `BPC_EquipmentSlotSystem`.
|
||||
Reference in New Issue
Block a user