add blueprints

This commit is contained in:
Lefteris Notas
2026-05-19 13:22:27 +03:00
parent f71bc678b2
commit 411edea8ce
138 changed files with 23330 additions and 0 deletions

View 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`.