From c9902dc28bb48aafe0b24ea4877fba53da872d4c Mon Sep 17 00:00:00 2001 From: Infi Date: Thu, 25 Jul 2024 15:57:21 +0200 Subject: [PATCH] Switch to dalamuds texture cache --- ChatTwo/ChatTwo.yaml | 3 ++ ChatTwo/PayloadHandler.cs | 39 ++++++++++++----------- ChatTwo/Plugin.cs | 3 -- ChatTwo/TextureCache.cs | 67 --------------------------------------- ChatTwo/Ui/Debugger.cs | 8 ++--- 5 files changed, 27 insertions(+), 93 deletions(-) delete mode 100755 ChatTwo/TextureCache.cs diff --git a/ChatTwo/ChatTwo.yaml b/ChatTwo/ChatTwo.yaml index bd9764c..c7ae849 100755 --- a/ChatTwo/ChatTwo.yaml +++ b/ChatTwo/ChatTwo.yaml @@ -31,3 +31,6 @@ changelog: |- **LiteDB** - Migration option removed - Old files can still be deleted in the database tab + + **Textures** + - Switch to dalamuds internal texture cache diff --git a/ChatTwo/PayloadHandler.cs b/ChatTwo/PayloadHandler.cs index 05eaef2..4b27076 100755 --- a/ChatTwo/PayloadHandler.cs +++ b/ChatTwo/PayloadHandler.cs @@ -10,6 +10,7 @@ using Dalamud.Game.Config; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Interface.ImGuiNotification; +using Dalamud.Interface.Textures; using Dalamud.Interface.Textures.TextureWraps; using Dalamud.Interface.Utility; using Dalamud.Interface.Utility.Raii; @@ -32,10 +33,10 @@ public sealed class PayloadHandler { private ChatLogWindow LogWindow { get; } private (Chunk, Payload?)? Popup { get; set; } - public bool _handleTooltips; - public uint _hoveredItem; - public uint _hoverCounter; - public uint _lastHoverCounter; + public bool HandleTooltips; + public uint HoveredItem; + public uint HoverCounter; + public uint LastHoverCounter; private readonly ExcelSheet ItemSheet; private readonly ExcelSheet EventItemSheet; @@ -58,12 +59,12 @@ public sealed class PayloadHandler { { DrawPopups(); - if (_handleTooltips && ++_hoverCounter - _lastHoverCounter > 1) + if (HandleTooltips && ++HoverCounter - LastHoverCounter > 1) { GameFunctions.GameFunctions.CloseItemTooltip(); - _hoveredItem = 0; - _hoverCounter = _lastHoverCounter = 0; - _handleTooltips = false; + HoveredItem = 0; + HoverCounter = LastHoverCounter = 0; + HandleTooltips = false; } } @@ -232,17 +233,17 @@ public sealed class PayloadHandler { case ItemPayload item: if (Plugin.Config.NativeItemTooltips) { - if (!_handleTooltips || _hoveredItem != item.RawItemId) + if (!HandleTooltips || HoveredItem != item.RawItemId) { - _handleTooltips = true; - _hoveredItem = item.RawItemId; - _hoverCounter = _lastHoverCounter = 0; + HandleTooltips = true; + HoveredItem = item.RawItemId; + HoverCounter = LastHoverCounter = 0; GameFunctions.GameFunctions.OpenItemTooltip(item.RawItemId, item.Kind); } else { - _lastHoverCounter = _hoverCounter; + LastHoverCounter = HoverCounter; } return; @@ -269,7 +270,7 @@ public sealed class PayloadHandler { public unsafe void MoveTooltip(AddonEvent type, AddonArgs args) { - if (!_handleTooltips) + if (!HandleTooltips) return; // Only move if user has "Next to Cursor" option selected @@ -311,7 +312,7 @@ public sealed class PayloadHandler { private void HoverStatus(StatusPayload status) { - if (LogWindow.Plugin.TextureCache.GetStatus(status.Status) is { } icon) + if (Plugin.TextureProvider.GetFromGameIcon(status.Status.Icon).GetWrapOrDefault() is { } icon) InlineIcon(icon); var name = ChunkUtil.ToChunks(status.Status.Name.ToDalamudString(), ChunkSource.None, null); @@ -333,7 +334,7 @@ public sealed class PayloadHandler { if (item.Item == null) return; - if (LogWindow.Plugin.TextureCache.GetItem(item.Item, item.IsHQ) is { } icon) + if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Item.Icon, item.IsHQ)).GetWrapOrDefault() is { } icon) InlineIcon(icon); var name = ChunkUtil.ToChunks(item.Item.Name.ToDalamudString(), ChunkSource.None, null); @@ -350,7 +351,7 @@ public sealed class PayloadHandler { if (item == null) return; - if (LogWindow.Plugin.TextureCache.GetEventItem(item) is { } icon) + if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon)).GetWrapOrDefault() is { } icon) InlineIcon(icon); var name = ChunkUtil.ToChunks(item.Name.ToDalamudString(), ChunkSource.None, null); @@ -456,7 +457,7 @@ public sealed class PayloadHandler { return; var hq = payload.Kind == ItemPayload.ItemKind.Hq; - if (LogWindow.Plugin.TextureCache.GetItem(item, hq) is { } icon) + if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon, hq)).GetWrapOrDefault() is { } icon) InlineIcon(icon); var name = item.Name.ToDalamudString(); @@ -502,7 +503,7 @@ public sealed class PayloadHandler { if (item == null) return; - if (LogWindow.Plugin.TextureCache.GetEventItem(item) is { } icon) + if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon)).GetWrapOrDefault() is { } icon) InlineIcon(icon); var name = item.Name.ToDalamudString(); diff --git a/ChatTwo/Plugin.cs b/ChatTwo/Plugin.cs index 11633ed..e82a754 100755 --- a/ChatTwo/Plugin.cs +++ b/ChatTwo/Plugin.cs @@ -53,7 +53,6 @@ public sealed class Plugin : IDalamudPlugin internal Commands Commands { get; } internal ChatCommon Common { get; } - internal TextureCache TextureCache { get; } internal GameFunctions.GameFunctions Functions { get; } internal MessageManager MessageManager { get; } internal IpcManager Ipc { get; } @@ -80,7 +79,6 @@ public sealed class Plugin : IDalamudPlugin Commands = new Commands(this); Common = new ChatCommon(); - TextureCache = new TextureCache(); Functions = new GameFunctions.GameFunctions(this); Ipc = new IpcManager(); ExtraChat = new ExtraChat(this); @@ -158,7 +156,6 @@ public sealed class Plugin : IDalamudPlugin Ipc?.Dispose(); MessageManager?.DisposeAsync().AsTask().Wait(); Functions?.Dispose(); - TextureCache?.Dispose(); Commands?.Dispose(); EmoteCache.Dispose(); diff --git a/ChatTwo/TextureCache.cs b/ChatTwo/TextureCache.cs deleted file mode 100755 index 304749f..0000000 --- a/ChatTwo/TextureCache.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Dalamud.Interface.Textures; -using Dalamud.Interface.Textures.TextureWraps; -using Lumina.Excel.GeneratedSheets; - -namespace ChatTwo; - -internal class TextureCache : IDisposable -{ - private readonly Dictionary<(uint, bool), IDalamudTextureWrap> _itemIcons = new(); - private readonly Dictionary<(uint, bool), IDalamudTextureWrap> _statusIcons = new(); - private readonly Dictionary<(uint, bool), IDalamudTextureWrap> _eventItemIcons = new(); - - private IReadOnlyDictionary<(uint, bool), IDalamudTextureWrap> ItemIcons => _itemIcons; - private IReadOnlyDictionary<(uint, bool), IDalamudTextureWrap> StatusIcons => _statusIcons; - private IReadOnlyDictionary<(uint, bool), IDalamudTextureWrap> EventItemIcons => _eventItemIcons; - - public void Dispose() - { - foreach (var tex in ItemIcons.Values.Concat(StatusIcons.Values)) - tex.Dispose(); - } - - private void AddIcon(IDictionary<(uint, bool), IDalamudTextureWrap> dict, uint icon, bool hq = false) { - if (dict.ContainsKey((icon, hq))) - return; - - var tex = Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(icon, hq)).RentAsync().Result; - if (tex != null) - dict[(icon, hq)] = tex; - } - - private void AddItem(Item item, bool hq) - { - AddIcon(_itemIcons, item.Icon, hq); - } - - private void AddStatus(Status status) - { - AddIcon(_statusIcons, status.Icon); - } - - private void AddEventItem(EventItem item) - { - AddIcon(_eventItemIcons, item.Icon); - } - - internal IDalamudTextureWrap? GetItem(Item item, bool hq = false) - { - AddItem(item, hq); - ItemIcons.TryGetValue((item.Icon, hq), out var icon); - return icon; - } - - internal IDalamudTextureWrap? GetStatus(Status status) - { - AddStatus(status); - StatusIcons.TryGetValue((status.Icon, false), out var icon); - return icon; - } - - internal IDalamudTextureWrap? GetEventItem(EventItem item) - { - AddEventItem(item); - EventItemIcons.TryGetValue((item.Icon, false), out var icon); - return icon; - } -} diff --git a/ChatTwo/Ui/Debugger.cs b/ChatTwo/Ui/Debugger.cs index b85430c..a4bbecd 100644 --- a/ChatTwo/Ui/Debugger.cs +++ b/ChatTwo/Ui/Debugger.cs @@ -46,9 +46,9 @@ public class DebuggerWindow : Window if (ImGui.Selectable($"Agent Address: {agent:X}")) ImGui.SetClipboardText(agent.ToString("X")); - ImGui.TextUnformatted($"Handle Tooltips: {ChatLogWindow.PayloadHandler._handleTooltips}"); - ImGui.TextUnformatted($"Hovered Item: {ChatLogWindow.PayloadHandler._hoveredItem}"); - ImGui.TextUnformatted($"Hover Counter: {ChatLogWindow.PayloadHandler._hoverCounter}"); - ImGui.TextUnformatted($"Last Hover Counter: {ChatLogWindow.PayloadHandler._lastHoverCounter}"); + ImGui.TextUnformatted($"Handle Tooltips: {ChatLogWindow.PayloadHandler.HandleTooltips}"); + ImGui.TextUnformatted($"Hovered Item: {ChatLogWindow.PayloadHandler.HoveredItem}"); + ImGui.TextUnformatted($"Hover Counter: {ChatLogWindow.PayloadHandler.HoverCounter}"); + ImGui.TextUnformatted($"Last Hover Counter: {ChatLogWindow.PayloadHandler.LastHoverCounter}"); } }