local NAME, ns = ... local oUF = ns.oUF or oUF assert(oUF, NAME.." was unable to locate oUF install.") local f = CreateFrame('Frame') local smoothing = {} local abs, min, max, next = math.abs, math.min, math.max, next f:SetScript('OnUpdate', function() local limit = 30/GetFramerate() for bar, value in next, 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) local function Smooth(self, value) local _, max = self:GetMinMaxValues() if value == self:GetValue() or (self._max and self._max ~= max) then smoothing[self] = nil self:SetValue_(value) else smoothing[self] = value end self._max = max end local function SmoothBar(self, bar, unset) if unset and bar.SetValue_ then bar.SetValue = bar.SetValue_ bar.SetValue_ = nil elseif not unset and not bar.SetValue_ then bar.SetValue_ = bar.SetValue bar.SetValue = Smooth end end oUF:RegisterMetaFunction('SmoothBar', SmoothBar)