From 03fbf4464d1134cbc86094b21d840ebc030a248b Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 21 Jun 2026 09:12:34 +0200 Subject: [PATCH] =?UTF-8?q?feat(ui):=20D.2b-B=20=E2=80=94=20wire=20Invento?= =?UTF-8?q?ryController=20into=20the=20inventory-init=20block?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds _inventoryController field (after _selectedObjectController) and calls InventoryController.Bind in the existing inventory-init block, between RegisterWindow and the Console.WriteLine. Uses Objects/iconComposer/ vitalsDatFont already in scope; strength lambda pattern-matches AttributeSnapshot to int? (uint? has no implicit cast to int?). Co-Authored-By: Claude Sonnet 4.6 --- src/AcDream.App/Rendering/GameWindow.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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.");