end
local mounted = false;
-local throttleCD = false;
+-- throttleCD 3-state, nil -> false -> true -> nil
+-- this way there's not double update each time the first
+-- update event comes, instead the extra throttled update comes
+-- if there are >2 ACTIONBAR_UPDATE_COOLDOWN events in one frame
+local throttleCD = nil;
local function throttleCDDone()
- throttleCD = false
-- update CD once more to confirm newest CD change is taken in even with some throttling
for _, button in pairs(activeButtons) do
updateCooldown(button, button.slot);
end
end
+local function throttleCDReset()
+ throttleCD = nil;
+end
local events = {
["ACTIONBAR_UPDATE_COOLDOWN"] = function()
if not throttleCD then -- only update at most once/frame
- throttleCD = true;
- for _, button in pairs(activeButtons) do
- updateCooldown(button, button.slot);
+ throttleCD = throttleCD == false and true or false;
+ if throttleCD then
+ CTimerAfter(0.01, throttleCDDone); -- wait one frame
+ else
+ for _, button in pairs(activeButtons) do
+ updateCooldown(button, button.slot);
+ end
+ CTimerAfter(0.01, throttleCDReset); -- wait one frame
end
- CTimerAfter(0.01, throttleCDDone); -- wait one frame
end
end,
["SPELL_UPDATE_CHARGES"] = function()