Files
Questie-X/Modules/Libs/QuestieCombatQueue.lua
T

44 lines
1.1 KiB
Lua

---@class QuestieCombatQueue
local QuestieCombatQueue = QuestieLoader:CreateModule("QuestieCombatQueue")
---@type QuestieLib
local QuestieLib = QuestieLoader:CreateModule("QuestieLib")
--- COMPATIBILITY ---
local C_Timer = QuestieCompat.C_Timer
local tpack = QuestieLib.tpack
local tunpack = QuestieLib.tunpack
local _Queue = {}
local started = false
-- This will limit the amount of updates Questie does to the UI and will reduce the chance to lag the game
local maxUpdatesPerCircle = 5
function QuestieCombatQueue.Initialize()
C_Timer.NewTicker(0.1, function()
if InCombatLockdown() then
return
end
local entry = tremove(_Queue, 1)
local count = 0
while entry do
entry.func(tunpack(entry.args))
if InCombatLockdown() or count >= maxUpdatesPerCircle then
break
end
entry = tremove(_Queue, 1)
count = count + 1
end
end)
started = true
end
function QuestieCombatQueue:Queue(func, ...)
if started then
tinsert(_Queue, {func=func, args=tpack(...)})
end
end