44 lines
1.1 KiB
Lua
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 |