X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/e90f2ac0721c80f251ba1a019e98f0a183a245c6..6990e591609f1dff553c41c77f82e9b784200605:/OmaUF/Auras.lua diff --git a/OmaUF/Auras.lua b/OmaUF/Auras.lua index 172e3d4..f3da677 100644 --- a/OmaUF/Auras.lua +++ b/OmaUF/Auras.lua @@ -3,8 +3,11 @@ local _; local CreateFrame = CreateFrame; local UnitAura = UnitAura; local GameTooltip = GameTooltip; +local GetTime = GetTime; +local CTimerAfter = C_Timer.After; local auraFilters = {"HELPFUL", "HARMFUL"}; +local updateAuras; local M = {}; OmaUFAuras = M; @@ -74,18 +77,33 @@ function M.CreateAuraFrame(parent, unit) i = i + 1; end end + + parent.throttle = function() + parent.throttled = nil; + if UnitExists(unit) then + return updateAuras(parent, unit); + end + end; end function M.UpdateAuras(frame, unit) + local current = GetTime(); + if frame.throttled then + return; + elseif frame.prevUpdate and current - frame.prevUpdate < 0.2 then + frame.throttled = true; + return CTimerAfter(0.1, frame.throttle); -- faster timer here to reduce the delay, gets called twice + end + + frame.prevUpdate = current; local auras = frame.auras; local icon, count, duration, expires, caster, id; local pos = 1; for _, filter in ipairs(auraFilters) do local i = 1; while true do - _, _, icon, count, _, duration, expires, caster, _, _, id = UnitAura(unit, i, filter); + _, icon, count, _, duration, expires, caster, _, _, id = UnitAura(unit, i, filter); if not id or not auras[pos] then break end - -- aura filter self-applied, player-applied, list of important auras TODO local aura = auras[pos]; aura.icon:SetTexture(icon); aura.index = i; @@ -113,3 +131,4 @@ function M.UpdateAuras(frame, unit) pos = pos + 1; end end +updateAuras = M.UpdateAuras;