diff --git a/DalamudReflector.cs b/DalamudReflector.cs index b24a1ca..23730a0 100644 --- a/DalamudReflector.cs +++ b/DalamudReflector.cs @@ -14,13 +14,13 @@ namespace LLib; /// public sealed class DalamudReflector : IDisposable { - private readonly DalamudPluginInterface _pluginInterface; + private readonly IDalamudPluginInterface _pluginInterface; private readonly IFramework _framework; private readonly IPluginLog _pluginLog; private readonly Dictionary _pluginCache = new(); private bool _pluginsChanged; - public DalamudReflector(DalamudPluginInterface pluginInterface, IFramework framework, IPluginLog pluginLog) + public DalamudReflector(IDalamudPluginInterface pluginInterface, IFramework framework, IPluginLog pluginLog) { _pluginInterface = pluginInterface; _framework = framework; diff --git a/GameUI/LAddon.cs b/GameUI/LAddon.cs index 009d347..8c3121b 100644 --- a/GameUI/LAddon.cs +++ b/GameUI/LAddon.cs @@ -11,14 +11,14 @@ public static class LAddon public static unsafe AtkUnitBase* GetAddonById(uint id) { - var unitManagers = &AtkStage.GetSingleton()->RaptureAtkUnitManager->AtkUnitManager.DepthLayerOneList; + var unitManagers = &AtkStage.Instance()->RaptureAtkUnitManager->AtkUnitManager.DepthLayerOneList; for (var i = 0; i < UnitListCount; i++) { var unitManager = &unitManagers[i]; - foreach (var j in Enumerable.Range(0, Math.Min(unitManager->Count, unitManager->EntriesSpan.Length))) + foreach (var j in Enumerable.Range(0, Math.Min(unitManager->Count, unitManager->Entries.Length))) { - var unitBase = unitManager->EntriesSpan[j].Value; - if (unitBase != null && unitBase->ID == id) + var unitBase = unitManager->Entries[j].Value; + if (unitBase != null && unitBase->Id == id) { return unitBase; } diff --git a/IconCache.cs b/IconCache.cs index 96f28e2..fc94605 100644 --- a/IconCache.cs +++ b/IconCache.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using Dalamud.Interface.Internal; +using Dalamud.Interface.Textures; +using Dalamud.Interface.Textures.TextureWraps; using Dalamud.Plugin.Services; namespace LLib; @@ -8,46 +10,25 @@ namespace LLib; public sealed class IconCache : IDisposable { private readonly ITextureProvider _textureProvider; - private readonly Dictionary _textureWraps = new(); + private readonly Dictionary _textureWraps = new(); public IconCache(ITextureProvider textureProvider) { _textureProvider = textureProvider; } - public IDalamudTextureWrap? GetIcon(uint iconId) + public ISharedImmediateTexture GetIcon(uint iconId) { - if (_textureWraps.TryGetValue(iconId, out TextureContainer? container)) - return container.Texture; + if (_textureWraps.TryGetValue(iconId, out ISharedImmediateTexture? iconTex)) + return iconTex; - var iconTex = _textureProvider.GetIcon(iconId); - if (iconTex != null) - { - if (iconTex.ImGuiHandle != nint.Zero) - { - _textureWraps[iconId] = new TextureContainer { Texture = iconTex }; - return iconTex; - } - - iconTex.Dispose(); - } - - _textureWraps[iconId] = new TextureContainer { Texture = null }; - return null; + iconTex = _textureProvider.GetFromGameIcon(new GameIconLookup(iconId)); + _textureWraps[iconId] = iconTex; + return iconTex; } public void Dispose() { - foreach (TextureContainer container in _textureWraps.Values) - container.Dispose(); - _textureWraps.Clear(); } - - private sealed class TextureContainer : IDisposable - { - public required IDalamudTextureWrap? Texture { get; init; } - - public void Dispose() => Texture?.Dispose(); - } }