62 lines
1.7 KiB
C#
Executable File
62 lines
1.7 KiB
C#
Executable File
using Dalamud.Data;
|
|
using ImGuiScene;
|
|
using Lumina.Excel.GeneratedSheets;
|
|
|
|
namespace ChatTwo;
|
|
|
|
internal class TextureCache : IDisposable {
|
|
private DataManager Data { get; }
|
|
|
|
private readonly Dictionary<(uint, bool), TextureWrap> _itemIcons = new();
|
|
private readonly Dictionary<(uint, bool), TextureWrap> _statusIcons = new();
|
|
|
|
internal IReadOnlyDictionary<(uint, bool), TextureWrap> ItemIcons => this._itemIcons;
|
|
internal IReadOnlyDictionary<(uint, bool), TextureWrap> StatusIcons => this._statusIcons;
|
|
|
|
internal TextureCache(DataManager data) {
|
|
this.Data = data;
|
|
}
|
|
|
|
public void Dispose() {
|
|
var allIcons = this.ItemIcons.Values
|
|
.Concat(this.StatusIcons.Values);
|
|
|
|
foreach (var tex in allIcons) {
|
|
tex.Dispose();
|
|
}
|
|
}
|
|
|
|
private void AddIcon(IDictionary<(uint, bool), TextureWrap> dict, uint icon, bool hq = false) {
|
|
if (dict.ContainsKey((icon, hq))) {
|
|
return;
|
|
}
|
|
|
|
var tex = hq
|
|
? this.Data.GetImGuiTextureHqIcon(icon)
|
|
: this.Data.GetImGuiTextureIcon(icon);
|
|
if (tex != null) {
|
|
dict[(icon, hq)] = tex;
|
|
}
|
|
}
|
|
|
|
internal void AddItem(Item item, bool hq) {
|
|
this.AddIcon(this._itemIcons, item.Icon, hq);
|
|
}
|
|
|
|
internal void AddStatus(Status status) {
|
|
this.AddIcon(this._statusIcons, status.Icon);
|
|
}
|
|
|
|
internal TextureWrap? GetItem(Item item, bool hq = false) {
|
|
this.AddItem(item, hq);
|
|
this.ItemIcons.TryGetValue((item.Icon, hq), out var icon);
|
|
return icon;
|
|
}
|
|
|
|
internal TextureWrap? GetStatus(Status status) {
|
|
this.AddStatus(status);
|
|
this.StatusIcons.TryGetValue((status.Icon, false), out var icon);
|
|
return icon;
|
|
}
|
|
}
|