You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.3 KiB

local _, addon = ...
local DoesGlobalObjectExist = addon.API.DoesGlobalObjectExist;
local f = CreateFrame("Frame");
f.list = {};
f:SetScript("OnEvent", function(self, event)
self:SetScript("OnEvent", nil);
self:UnregisterEvent(event);
local IsAddOnLoaded = C_AddOns.IsAddOnLoaded;
local addonName, addonLoaded, requiredMethods;
for _, data in ipairs(f.list) do
addonName, addonLoaded, requiredMethods = data[1], data[2], data[3];
if (addonName and IsAddOnLoaded(addonName)) or (not addonName) then
local requirementMet = addonName and true;
if requiredMethods then
requirementMet = true;
for _, method in ipairs(requiredMethods) do
if not DoesGlobalObjectExist(method) then
requirementMet = false;
break
end
end
end
if requirementMet then
addonLoaded();
end
end
end
f.list = nil;
end);
local function AddSupportedAddOn(addonName, onLoadedCallback, requiredMethods)
--Allows nillable addonName
table.insert(f.list, {addonName, onLoadedCallback, requiredMethods});
end
addon.AddSupportedAddOn = AddSupportedAddOn;
f:RegisterEvent("PLAYER_ENTERING_WORLD");