diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index e04a1622..085f26af 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -621,6 +621,8 @@ public sealed class GameWindow : IDisposable private AcDream.App.UI.Layout.ToolbarController? _toolbarController; // Phase D.5.3a — selected-object strip controller (name, overlay state, health meter). private AcDream.App.UI.Layout.SelectedObjectController? _selectedObjectController; + // Phase D.2b-B — inventory controller (backpack grid + pack-selector + burden meter). + private AcDream.App.UI.Layout.InventoryController? _inventoryController; // Phase D.2b Task 9 — plugin UI registrations buffered before OnLoad; drained in OnLoad. private readonly AcDream.App.Plugins.BufferedUiRegistry? _uiRegistry; // Phase I.2: ImGui debug panel ViewModel. Lives for as long as @@ -2154,6 +2156,19 @@ public sealed class GameWindow : IDisposable inventoryWindow.Draggable = true; _uiHost.Root.AddChild(inventoryWindow); _uiHost.RegisterWindow(AcDream.App.UI.WindowNames.Inventory, inventoryWindow); + + // Phase D.2b-B — populate the inventory from ClientObjectTable: the + // "Contents of Backpack" grid + the pack-selector strip + the burden meter + + // captions. Analogue of gmInventoryUI/gmBackpackUI/gm3DItemsUI::PostInit. + _inventoryController = AcDream.App.UI.Layout.InventoryController.Bind( + invLayout, Objects, + playerGuid: () => _playerServerGuid, + iconIds: (type, icon, under, over, effects) => iconComposer.GetIcon(type, icon, under, over, effects), + strength: () => LocalPlayer.GetAttribute( + AcDream.Core.Player.LocalPlayerState.AttributeKind.Strength) is { } sa + ? (int?)sa.Current : null, + datFont: vitalsDatFont); + Console.WriteLine("[D.2b-B] retail inventory window from LayoutDesc importer (0x21000023)."); } else Console.WriteLine("[D.2b-B] inventory: LayoutDesc 0x21000023 not found.");