texture:SetTexCoord(ULx, ULy, LLx, LLy, URx, URy, LRx, LRy); |
end |
|
local needle = DashboardFrame.needle |
local function SetNeedle(speed) |
if needle.eval == speed then |
return |
end |
|
local dir = true |
if needle.sval and needle.eval then |
dir = needle.sval < needle.eval |
end |
|
needle.sval = needle.current or 0 |
needle.eval = speed |
|
-- Only reset the timer if we're changing direction |
if dir ~= (needle.sval < needle.eval) then |
needle.elapsed = 0 |
end |
needle.anim = true |
end |
|
local cos = math.cos |
local pi = math.pi |
local function cosineInterpolation(y1, y2, mu) |
return y1+(y2-y1)*(1 - cos(pi*mu))/2 |
end |
|
local function Needle_OnUpdate(self, elapsed) |
if not needle.anim then |
return |
end |
|
needle.elapsed = needle.elapsed + elapsed |
|
local perc = needle.elapsed / 1.0 |
if perc > 1 then perc = 1 end |
|
if needle.eval > needle.sval then |
local current = cosineInterpolation(needle.sval, needle.eval, perc) |
local angle = (current / 30) * -270 |
RotateTexture(needle, angle) |
needle.current = current |
else |
-- Decelerating |
local current = needle.sval - ((needle.sval - needle.eval) * perc) |
local angle = (current / 30) * -270 |
RotateTexture(needle, angle) |
needle.current = current |
end |
end |
|
DashboardFrame.needle.timer:SetScript("OnUpdate", Needle_OnUpdate) |
|
local base |
local counter = 0 |
local function OnUpdate(self, elapsed) |