/Tukui/modules/unitframes/plugins/oUF_Smooth/oUF_Smooth.lua
http://github.com/Asphyxia/Tukui · Lua · 53 lines · 45 code · 7 blank · 1 comment · 21 complexity · 41fc974032f8bafbdaa270d6abcacb64 MD5 · raw file
- local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
- if C.unitframes.enable ~= true or C.unitframes.showsmooth ~= true then return end
- local _, ns = ...
- local oUF = ns.oUF or oUF
- if not oUF then return end
- local smoothing = {}
- local function Smooth(self, value)
- if value ~= self:GetValue() or value == 0 then
- smoothing[self] = value
- else
- smoothing[self] = nil
- end
- end
- local function SmoothBar(self, bar)
- bar.SetValue_ = bar.SetValue
- bar.SetValue = Smooth
- end
- local function hook(frame)
- frame.SmoothBar = SmoothBar
- if frame.Health and frame.Health.Smooth then
- frame:SmoothBar(frame.Health)
- end
- if frame.Power and frame.Power.Smooth then
- frame:SmoothBar(frame.Power)
- end
- end
- for i, frame in ipairs(oUF.objects) do hook(frame) end
- oUF:RegisterInitCallback(hook)
- local f, min, max = CreateFrame('Frame'), math.min, math.max
- f:SetScript('OnUpdate', function()
- local rate = GetFramerate()
- local limit = 30/rate
- for bar, value in pairs(smoothing) do
- local cur = bar:GetValue()
- local new = cur + min((value-cur)/3, max(value-cur, limit))
- if new ~= new then
- -- Mad hax to prevent QNAN.
- new = value
- end
- bar:SetValue_(new)
- if cur == value or abs(new - value) < 2 then
- bar:SetValue_(value)
- smoothing[bar] = nil
- end
- end
- end)