ChatTwo/ChatTwo/TextureCache.cs

74 lines
2.2 KiB
C#
Raw Normal View History

2022-02-15 18:02:46 +00:00
using Dalamud.Data;
using ImGuiScene;
using Lumina.Excel.GeneratedSheets;
2022-01-03 21:20:22 +00:00
namespace ChatTwo;
internal class TextureCache : IDisposable {
private DataManager Data { get; }
2022-01-10 05:35:36 +00:00
private readonly Dictionary<(uint, bool), TextureWrap> _itemIcons = new();
private readonly Dictionary<(uint, bool), TextureWrap> _statusIcons = new();
2022-02-01 21:46:46 +00:00
private readonly Dictionary<(uint, bool), TextureWrap> _eventItemIcons = new();
2022-01-10 05:35:36 +00:00
internal IReadOnlyDictionary<(uint, bool), TextureWrap> ItemIcons => this._itemIcons;
internal IReadOnlyDictionary<(uint, bool), TextureWrap> StatusIcons => this._statusIcons;
2022-02-01 21:46:46 +00:00
internal IReadOnlyDictionary<(uint, bool), TextureWrap> EventItemIcons => this._eventItemIcons;
internal TextureCache(DataManager data) {
this.Data = data;
}
public void Dispose() {
var allIcons = this.ItemIcons.Values
.Concat(this.StatusIcons.Values);
2022-01-03 21:20:22 +00:00
foreach (var tex in allIcons) {
tex.Dispose();
}
}
2022-01-10 05:35:36 +00:00
private void AddIcon(IDictionary<(uint, bool), TextureWrap> dict, uint icon, bool hq = false) {
if (dict.ContainsKey((icon, hq))) {
return;
}
2022-01-03 21:20:22 +00:00
2022-01-10 05:35:36 +00:00
var tex = hq
? this.Data.GetImGuiTextureHqIcon(icon)
: this.Data.GetImGuiTextureIcon(icon);
if (tex != null) {
2022-01-10 05:35:36 +00:00
dict[(icon, hq)] = tex;
}
}
2022-01-10 05:35:36 +00:00
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);
}
2022-02-01 21:46:46 +00:00
internal void AddEventItem(EventItem item) {
this.AddIcon(this._eventItemIcons, item.Icon);
}
2022-01-10 05:35:36 +00:00
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);
2022-01-10 05:35:36 +00:00
this.StatusIcons.TryGetValue((status.Icon, false), out var icon);
return icon;
}
2022-02-01 21:46:46 +00:00
internal TextureWrap? GetEventItem(EventItem item) {
this.AddEventItem(item);
this.EventItemIcons.TryGetValue((item.Icon, false), out var icon);
return icon;
}
}