From 8b8b14f2b60dc1781d9114605600a8e01c4600cf Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Tue, 17 Oct 2023 19:51:17 +0200 Subject: [PATCH] Show and update BNPCs. --- Glamourer/Gui/Tabs/DebugTab.cs | 37 +++++++++++++++++++++++++++++++++- Penumbra.GameData | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Glamourer/Gui/Tabs/DebugTab.cs b/Glamourer/Gui/Tabs/DebugTab.cs index 05e313e..482a7ab 100644 --- a/Glamourer/Gui/Tabs/DebugTab.cs +++ b/Glamourer/Gui/Tabs/DebugTab.cs @@ -730,7 +730,7 @@ public unsafe class DebugTab : ITab disabled.Dispose(); - DrawNameTable("BNPCs", ref _bnpcFilter, _actors.AwaitedService.Data.BNpcs.Select(kvp => (kvp.Key, kvp.Value))); + DrawBnpcTable(); DrawNameTable("ENPCs", ref _enpcFilter, _actors.AwaitedService.Data.ENpcs.Select(kvp => (kvp.Key, kvp.Value))); DrawNameTable("Companions", ref _companionFilter, _actors.AwaitedService.Data.Companions.Select(kvp => (kvp.Key, kvp.Value))); DrawNameTable("Mounts", ref _mountFilter, _actors.AwaitedService.Data.Mounts.Select(kvp => (kvp.Key, kvp.Value))); @@ -738,6 +738,41 @@ public unsafe class DebugTab : ITab DrawNameTable("Worlds", ref _worldFilter, _actors.AwaitedService.Data.Worlds.Select(kvp => ((uint)kvp.Key, kvp.Value))); } + private void DrawBnpcTable() + { + using var _ = ImRaii.PushId(1); + using var tree = ImRaii.TreeNode("BNPCs"); + if (!tree) + return; + + var resetScroll = ImGui.InputTextWithHint("##filter", "Filter...", ref _bnpcFilter, 256); + var height = ImGui.GetTextLineHeightWithSpacing() + 2 * ImGui.GetStyle().CellPadding.Y; + using var table = ImRaii.Table("##table", 3, ImGuiTableFlags.RowBg | ImGuiTableFlags.ScrollY | ImGuiTableFlags.BordersOuter, + new Vector2(-1, 10 * height)); + if (!table) + return; + + if (resetScroll) + ImGui.SetScrollY(0); + ImGui.TableSetupColumn("1", ImGuiTableColumnFlags.WidthFixed, 50 * ImGuiHelpers.GlobalScale); + ImGui.TableSetupColumn("2", ImGuiTableColumnFlags.WidthStretch); + ImGui.TableSetupColumn("3", ImGuiTableColumnFlags.WidthStretch); + ImGui.TableNextColumn(); + var skips = ImGuiClip.GetNecessarySkips(height); + ImGui.TableNextRow(); + var data = _actors.AwaitedService.Data.BNpcs.Select(kvp => (kvp.Key, kvp.Key.ToString("D5"), kvp.Value)); + var remainder = ImGuiClip.FilteredClippedDraw(data, skips, + p => p.Item2.Contains(_bnpcFilter) || p.Item3.Contains(_bnpcFilter, StringComparison.OrdinalIgnoreCase), + p => + { + ImGuiUtil.DrawTableColumn(p.Item2); + ImGuiUtil.DrawTableColumn(p.Item3); + var bnpcs = _items.IdentifierService.AwaitedService.GetBnpcsFromName(p.Item1); + ImGuiUtil.DrawTableColumn(string.Join(", ", bnpcs.Select(b => b.Id.ToString()))); + }); + ImGuiClip.DrawEndDummy(remainder, height); + } + private static void DrawNameTable(string label, ref string filter, IEnumerable<(uint, string)> names) { using var _ = ImRaii.PushId(label); diff --git a/Penumbra.GameData b/Penumbra.GameData index 6a0daf2..4dd261f 160000 --- a/Penumbra.GameData +++ b/Penumbra.GameData @@ -1 +1 @@ -Subproject commit 6a0daf2f309c27c5a260825bce31094987fce3d1 +Subproject commit 4dd261fe837bbe4b799b3ca3c0c8c178197bc48f