From 0973648bffbf36772a40bbc76d6c7c786189a900 Mon Sep 17 00:00:00 2001 From: Aleksi Blinnikka Date: Fri, 23 Feb 2018 17:10:51 +0200 Subject: [PATCH] Change update CD throttling to not always update twice --- OmaAB/ActionBars.lua | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/OmaAB/ActionBars.lua b/OmaAB/ActionBars.lua index 610dcf3..937d1d0 100644 --- a/OmaAB/ActionBars.lua +++ b/OmaAB/ActionBars.lua @@ -549,23 +549,33 @@ local function setupBindings() 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() -- 2.39.5