qstbak/LLib/LLib.GameUI/AddonCallback.cs
2026-08-17 20:29:32 +10:00

62 lines
1.4 KiB
C#

using FFXIVClientStructs.FFXIV.Component.GUI;
namespace LLib.GameUI;
public static class AddonCallback
{
public unsafe static void Fire(AtkUnitBase* addon, params int[] args)
{
if (addon != null)
{
AtkValue* ptr = stackalloc AtkValue[(args.Length == 0) ? 1 : args.Length];
for (int i = 0; i < args.Length; i++)
{
ptr[i].Type = AtkValueType.Int;
ptr[i].Int = args[i];
}
addon->FireCallback((uint)args.Length, ptr);
}
}
public unsafe static void FireWithUpdate(AtkUnitBase* addon, params int[] args)
{
if (addon != null)
{
AtkValue* ptr = stackalloc AtkValue[(args.Length == 0) ? 1 : args.Length];
for (int i = 0; i < args.Length; i++)
{
ptr[i].Type = AtkValueType.Int;
ptr[i].Int = args[i];
}
addon->FireCallback((uint)args.Length, ptr, close: true);
}
}
public unsafe static void ClickYes(AtkUnitBase* addon)
{
if (addon != null)
{
addon->FireCallbackInt(0);
}
}
public unsafe static bool ClickButton(AtkUnitBase* addon, AtkComponentButton* button)
{
if (addon == null || button == null || !button->IsEnabled)
{
return false;
}
AtkComponentNode* ownerNode = button->AtkComponentBase.OwnerNode;
if (ownerNode == null)
{
return false;
}
AtkEvent* ptr = ownerNode->AtkResNode.AtkEventManager.Event;
if (ptr == null)
{
return false;
}
addon->ReceiveEvent(ptr->State.EventType, (int)ptr->Param, ptr, null);
return true;
}
}