Inventory Showcases
Build an InventoryShowcase station in a level of your own out of the shipped actors: sixteen B_CrimsonItemSpawnerPads (/CrimsonCore/GameplayTesting/, one per shipped item definition), the containers (B_Chest_Shared, B_Stash_Personal, the one-time B_LootChest, the player-owned B_OwnedStash), a pre-filled B_LootBag, and B_ItemVendingMachine (every item definition in stock, refilled as you take) - the containers, bag, and machine all live in /CrimsonCore/Inventory/Actors/. For locked doors gated by interaction conditions (keys, a lockpick, Health at or above 50), see Doors -> Build a door showcase. Walk over a pad to receive its item, open the inventory, and try each feature below. The pads cool down (CooldownSeconds) and refill.
/CrimsonCore/Inventory/... and /CrimsonCore/GameplayTesting/... assets named here.Showcase content
| Asset | Path (/CrimsonCore/Inventory/) | Notes |
|---|---|---|
ItemDef_Apple, ItemDef_HealthPotion, ItemDef_ManaPotion | Items/ | Stackable consumables (Item.Type.Consumable); consumable tooltip. |
ItemDef_IronSword, ItemDef_RustySword, ItemDef_IronHelm, ItemDef_Shield, ItemDef_Boots, ItemDef_GoldRing, ItemDef_SilverRing | Items/ | Equippable (UCrimsonInventoryItemFragment_Equippable). ItemDef_RustySword carries UCrimsonInventoryStateFragment_Durability. |
ItemDef_Satchel, ItemDef_GridPouch | Items/ | Bags (UCrimsonInventoryItemFragment_Bag). Both only contribute once dragged into one of the player's two bag slots (the Bags strip; Crimson.Inventory.Constraint.BagSlots = 2 on the GFA). Grid Pouch = Mode: SeparatePanel, Layouts/DA_InvLayout_Grid 4 x 2 - its own panel. Satchel = Mode: ExpandRoot, Slots 4 - no panel, the main grid grows 24 -> 28 while it is slotted. A slotted bag refuses to leave while it holds items. |
ItemDef_IronOre | Items/ | Stackable material (Item.Type.Material). |
ItemDef_Torch | Items/ | UCrimsonInventoryStateFragment_Lifetime (TotalLifetime) - it burns down. |
ItemDef_GoldCoins, ItemDef_Gem | Items/ | UCrimsonInventoryItemFragment_GrantCurrency (Item.Type.Currency) - picking them up adds to Currency.Gold / Currency.Gems instead of taking a slot. |
T_Item_* | Items/Icons/ | One icon per item definition. |
DA_CrimsonInventoryLayout_FlatSlot | (root) | Flat slot layout used by the player inventory, the chests, and the Satchel. |
DA_InvLayout_Grid, DA_InvLayout_Weight | Layouts/ | Grid layout (used by the Grid Pouch) and weight layout (shipped as a reference; no showcase pad uses it). |
DT_Currencies | (root) | Currency.Gold, Currency.Gems. Registered by CrimsonGameFeatureAction_AddInventory. |
EquipDef_IronSword, EquipDef_Shield, EquipDef_IronHelm, EquipDef_Boots, EquipDef_Ring | Equipment/ | CrimsonEquipment definitions the equippable items reference. |
ItemTypeActionSet_Core | (root) | Context actions per Item.Type.* (Use, Equip, Split, Drop, ...) - see Context Menu. |
B_Chest_Shared, B_Stash_Personal, B_LootChest, B_OwnedStash, B_ItemVendingMachine, B_LootBag | Actors/ | 12-slot shared and personal containers, the one-time loot chest, the player-owned stash, the vending machine, and the loot bag. The plugin's PerParty / PerMapInstance scopes have no showcase (per-run storage, not persisted). |
Tag labels (Equipment.Slot.*, Item.Type.*, Crimson.Inventory.Constraint.*, Currency.*) come from [/Script/CrimsonUI.CrimsonTagLabelSettings] in the project's Config/DefaultGame.ini; UCrimsonCoreInventoryUIStatics::GetTagLabel reads them for tab names, meter labels, and paper-doll labels.
Showcase matrix
| Showcase | Plugin pieces | Try it with |
|---|---|---|
| Flat slot list | UCrimsonInventoryLayout_FlatSlot -> UCrimsonCoreInventoryGroupPanel (Flat) with W_Inventory_Slot per cell | The player inventory: DA_CrimsonInventoryLayout_FlatSlot, 24 slots from CrimsonGameFeatureAction_AddInventory. |
| Grid with rotation | UCrimsonInventoryLayout_Grid -> group panel (Grid): Grid_Cells + Canvas_Items overlays, Rotate verb, bSupportsRotation | Pick up ItemDef_GridPouch, open it, drop ItemDef_IronSword inside and press RT / R while carrying. |
| Weight list | UCrimsonInventoryLayout_Weight -> group panel (Weight): Box_List + Meter_Capacity | Layouts/DA_InvLayout_Weight - assign it as a bag or inventory layout; no pad is wired to it. |
| Shared chest | ACrimsonCoreContainerActor (Scope = Shared) + W_Container_Screen | B_Chest_Shared - everyone sees the same contents. |
| Personal stash | Scope = PerPlayer | B_Stash_Personal - each player has a private instance. |
| Party and map-instance chests | Scope = PerParty, Scope = PerMapInstance | No showcase asset: these scopes are per-run storage (UCrimsonInventoryInstanceSubsystem), not persisted. Duplicate B_Chest_Shared and set Scope to try one. |
| Loot bag | ACrimsonCorePickupActor + W_Loot_Window + W_Loot_Entry | The placed B_LootBag. |
| Nested bags | UCrimsonInventoryItemFragment_Bag -> child UCrimsonCoreInventoryGroupViewModel (ParentGroupId, Depth) rendered as its own group panel | ItemDef_Satchel (flat, 4) and ItemDef_GridPouch (grid, 4 x 2). |
| Paper doll | UCrimsonCoreEquipmentPanel + W_Equipment_Slot per Equipment.Slot.* via ICrimsonEquipmentHost | Carry ItemDef_IronHelm onto the Head slot; double-click ItemDef_Boots. |
| Hotbar drag | UCrimsonCoreInventoryDragDropOperation (a UCrimsonSlotBindingDragDropOperation) dropped on W_ActionBar | Drag ItemDef_HealthPotion from the inventory onto an action-bar slot - see Radial Slot Bindings. |
| Currency, HUD, toasts | UCrimsonInventoryItemFragment_GrantCurrency, W_Inventory_HUD at HUD.Slot.Inventory, W_Inventory_Toast at HUD.Slot.Toasts | Walk over ItemDef_GoldCoins / ItemDef_Gem: the HUD currency row updates and a toast shows. |
| Sort, filter, search, lock | UCrimsonCoreInventoryPanelWidget (SearchBox, TabList_Categories from CategoryTags, Button_Sort), Lock verb | Collect a mix, type "potion", switch tabs, press Sort, lock a sword and try to drop it. |
| Split and context menu | Split verb -> W_SplitStack_Dialog; Secondary -> UCrimsonCoreContextMenuSubsystem with ItemTypeActionSet_Core | Stack five ItemDef_Apple, press X (hold) / X to split; right-click for the menu, X (tap) for the default action. |
| Tooltips per kind | TooltipClassByItemType -> W_ItemTooltip_Consumable / _Equipment / _Bag, W_ItemTooltip fallback | Focus a potion, a sword, a bag, and ItemDef_IronOre in turn. |
| Durability and lifetime | Durability01 -> Bar_Durability on slot, paper doll, and tooltip; UCrimsonInventoryStateFragment_Lifetime | ItemDef_RustySword shows a durability bar; ItemDef_Torch counts down. |
How the showcase is wired
| Piece | Asset | Key settings |
|---|---|---|
| Player inventory + routing | Your experience action set -> CrimsonGameFeatureAction_AddInventory | InventoryList[0]: B_CrimsonPlayerState (/CrimsonCore/Player/), DA_CrimsonInventoryLayout_FlatSlot, Crimson.Inventory.Constraint.Slots = 24, RuntimeConstraints = [CrimsonInventoryConstraint_Slot], DT_Currencies. RoutingList[0]: B_PlayerController (/CrimsonCore/Player/). |
| Equipment slots | Your experience action set -> CrimsonGameFeatureAction_AddEquipmentSlots | SlotsList[0]: BP_CrimsonCharacter (/CrimsonCore/Characters/), SlotLayout for Head / Chest / Legs / Feet / MainHand / OffHand / Ring, bAddEquipmentManager = true. |
| HUD strip + toasts | Your experience action set -> CrimsonGameFeatureAction_AddWidget | W_Inventory_HUD at HUD.Slot.Inventory; W_Inventory_Toast at HUD.Slot.Toasts. |
| Inventory screen | GA_ShowWidget_Inventory (/CrimsonCore/Input/Abilities/) | Pushes W_Inventory_Screen on UI.Layer.Menu. |
| Screen verbs | W_Inventory_Screen, W_Container_Screen, W_Loot_Window Class Defaults | Input|Verbs entries point at IA_UI_Inventory_*; keys in IMC_UI_Inventory. |
| Tooltips and split dialog | Plugins/CrimsonCore/Config/DefaultCrimsonCore.ini | UCrimsonCoreInventoryUISettings defaults (see Inventory UI). |
| Item pads | B_CrimsonItemSpawnerPad (/CrimsonCore/GameplayTesting/) | ItemToGrant, StackCount, CooldownSeconds; bIsAvailable replicates so the DisplayMesh hides during cooldown - see Gameplay Testing. |
| Weight overflow -> movement slow | A CrimsonInventoryConstraint_FloatTag child with bAllowOverflow, a CrimsonCoreConstraintActionSet asset, and the ConstraintActions component on B_CrimsonPlayerState (/CrimsonCore/Player/) | CrimsonGameFeatureAction_AddInventory: DefaultFloatConstraints = [Crimson.Inventory.Constraint.Weight, 50], RuntimeConstraints += your overflow constraint. The action set binds that tag to Apply Gameplay Effect While Over Threshold (SetByCallerTag = SetByCaller.Encumbrance.Overflow, SetByCallerScale = -0.5). Nothing ships pre-wired - see How-To: Constraint Actions. |
Build your own station
Place B_CrimsonItemSpawnerPad actors and set ItemToGrant to each definition you want to demo (StackCount 5 for the consumables so Split has something to split). Drop in a duplicate of each chest Blueprint and a B_LootBag. Make sure the level runs an experience whose action set includes the CrimsonGameFeatureAction_AddInventory, CrimsonGameFeatureAction_AddEquipmentSlots, and CrimsonGameFeatureAction_AddWidget entries above.
CooldownSeconds), one fills B_Chest_Shared, the other sees it; each fills B_Stash_Personal and sees only their own.See also
- Inventory UI
- Pickup Actor & Loot Window
- Gameplay Testing
- Context Menu
- Radial Slot Bindings
- How-To: Constraint Actions