Files
AetherBags/KamiToolKit/NativeAddon/NativeAddon.CloseCallback.cs
T
KnackAtNite 8db4ce6094
Debug Build and Test / Build against Latest Dalamud (push) Has been cancelled
Debug Build and Test / Build against Staging Dalamud (push) Has been cancelled
Initial commit: AetherBags + KamiToolKit for FC Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 14:46:31 -05:00

38 lines
1.3 KiB
C#

using System.Linq;
using Dalamud.Hooking;
using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit.Classes;
namespace KamiToolKit;
public abstract unsafe partial class NativeAddon {
private static Hook<AtkUnitBase.Delegates.FireCallback>? fireCallbackHook;
private static void InitializeCloseCallback() {
fireCallbackHook ??= DalamudInterface.Instance.GameInteropProvider
.HookFromAddress<AtkUnitBase.Delegates.FireCallback>(AtkUnitBase.Addresses.FireCallback.Value, OnFireCallback);
fireCallbackHook.Enable();
}
private static bool OnFireCallback(AtkUnitBase* thisPtr, uint valueCount, AtkValue* values, bool close) {
Log.Excessive($"[{thisPtr->NameString}] OnFireCallback");
foreach (var addon in CreatedAddons) {
if (addon == thisPtr && close && addon is { RespectCloseAll: true, IsOverlayAddon: false }) {
addon.Close();
return true;
}
}
return fireCallbackHook!.Original(thisPtr, valueCount, values, close);
}
private static void DisposeCloseCallback() {
if (CreatedAddons.Count is 0 || CreatedAddons.All(addon => addon.IsOverlayAddon)) {
fireCallbackHook?.Dispose();
fireCallbackHook = null;
}
}
}