From 4e9059d288739f44384e3cdd3281f18296f6de1f Mon Sep 17 00:00:00 2001 From: Andrew Mordecai Date: Fri, 15 Jul 2016 07:53:47 -0700 Subject: [PATCH] Include a working version of oUF_SmoothUpdate --- Plugins/Smooth.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++++ oUF_Stardust.toc | 2 ++ 2 files changed, 49 insertions(+) create mode 100755 Plugins/Smooth.lua diff --git a/Plugins/Smooth.lua b/Plugins/Smooth.lua new file mode 100755 index 0000000..a9146ad --- /dev/null +++ b/Plugins/Smooth.lua @@ -0,0 +1,47 @@ +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) diff --git a/oUF_Stardust.toc b/oUF_Stardust.toc index 0848834..3cf61c6 100644 --- a/oUF_Stardust.toc +++ b/oUF_Stardust.toc @@ -11,6 +11,8 @@ Libs/LibStub.lua Libs/CallbackHandler-1.0.lua Libs/LibSharedMedia-3.0.lua +Plugins/Smooth.lua + Elements/BurningEmbers.lua Elements/DemonicFury.lua -- 1.7.9.5