From: Aleksi Blinnikka Date: Fri, 23 Feb 2018 15:10:51 +0000 (+0200) Subject: Change update CD throttling to not always update twice X-Git-Url: https://www.aleksib.fi/git/wowui.git/commitdiff_plain/0973648bffbf36772a40bbc76d6c7c786189a900?ds=sidebyside;hp=5d20ef029d0d455efa76ce2479b92d6196eab6ef Change update CD throttling to not always update twice --- 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()