fix: handle hq item icons

This commit is contained in:
Anna 2022-01-10 00:35:36 -05:00
parent 9faa18cf7d
commit 6a8afc96ce
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0
2 changed files with 18 additions and 16 deletions

View File

@ -149,7 +149,7 @@ internal sealed class PayloadHandler {
} }
private void HoverItem(ItemPayload item) { private void HoverItem(ItemPayload item) {
if (this.Ui.Plugin.TextureCache.GetItem(item.Item) is { } icon) { if (this.Ui.Plugin.TextureCache.GetItem(item.Item, item.IsHQ) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
@ -216,7 +216,7 @@ internal sealed class PayloadHandler {
} }
private void DrawItemPopup(ItemPayload item) { private void DrawItemPopup(ItemPayload item) {
if (this.Ui.Plugin.TextureCache.GetItem(item.Item) is { } icon) { if (this.Ui.Plugin.TextureCache.GetItem(item.Item, item.IsHQ) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }

View File

@ -7,11 +7,11 @@ namespace ChatTwo;
internal class TextureCache : IDisposable { internal class TextureCache : IDisposable {
private DataManager Data { get; } private DataManager Data { get; }
private readonly Dictionary<uint, TextureWrap> _itemIcons = new(); private readonly Dictionary<(uint, bool), TextureWrap> _itemIcons = new();
private readonly Dictionary<uint, TextureWrap> _statusIcons = new(); private readonly Dictionary<(uint, bool), TextureWrap> _statusIcons = new();
internal IReadOnlyDictionary<uint, TextureWrap> ItemIcons => this._itemIcons; internal IReadOnlyDictionary<(uint, bool), TextureWrap> ItemIcons => this._itemIcons;
internal IReadOnlyDictionary<uint, TextureWrap> StatusIcons => this._statusIcons; internal IReadOnlyDictionary<(uint, bool), TextureWrap> StatusIcons => this._statusIcons;
internal TextureCache(DataManager data) { internal TextureCache(DataManager data) {
this.Data = data; this.Data = data;
@ -26,34 +26,36 @@ internal class TextureCache : IDisposable {
} }
} }
private void AddIcon(IDictionary<uint, TextureWrap> dict, uint icon) { private void AddIcon(IDictionary<(uint, bool), TextureWrap> dict, uint icon, bool hq = false) {
if (dict.ContainsKey(icon)) { if (dict.ContainsKey((icon, hq))) {
return; return;
} }
var tex = this.Data.GetImGuiTextureIcon(icon); var tex = hq
? this.Data.GetImGuiTextureHqIcon(icon)
: this.Data.GetImGuiTextureIcon(icon);
if (tex != null) { if (tex != null) {
dict[icon] = tex; dict[(icon, hq)] = tex;
} }
} }
internal void AddItem(Item item) { internal void AddItem(Item item, bool hq) {
this.AddIcon(this._itemIcons, item.Icon); this.AddIcon(this._itemIcons, item.Icon, hq);
} }
internal void AddStatus(Status status) { internal void AddStatus(Status status) {
this.AddIcon(this._statusIcons, status.Icon); this.AddIcon(this._statusIcons, status.Icon);
} }
internal TextureWrap? GetItem(Item item) { internal TextureWrap? GetItem(Item item, bool hq = false) {
this.AddItem(item); this.AddItem(item, hq);
this.ItemIcons.TryGetValue(item.Icon, out var icon); this.ItemIcons.TryGetValue((item.Icon, hq), out var icon);
return icon; return icon;
} }
internal TextureWrap? GetStatus(Status status) { internal TextureWrap? GetStatus(Status status) {
this.AddStatus(status); this.AddStatus(status);
this.StatusIcons.TryGetValue(status.Icon, out var icon); this.StatusIcons.TryGetValue((status.Icon, false), out var icon);
return icon; return icon;
} }
} }