You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.1 KiB

local colors = {
full = {0, 1, 0},
red = {240/255, 0.28, 0.28},
orange = {1, 185/255, 0.28},
yellow = {1, 240/255, 0.28},
};
local sqrt = math.sqrt;
local max = math.max;
local pow = math.pow;
local function outQuart(t, b, e, d)
t = t / d - 1;
return (b - e) * (pow(t, 4) - 1) + b
end
-------------------------------------------------
NarciAchievementStatusBarMixin = {};
function NarciAchievementStatusBarMixin:OnLoad()
self.min, self.max, self.value = 0, 0, 0;
local width = self.background:GetWidth();
--print("bar width: "..width)
--Anchors are set AFTER the frame is created.
self.fillWidth = width;
self.border:SetTexture("Interface\\AddOns\\Narcissus_Achievements\\Art\\Shared\\ProgressBarShortBorder", nil, nil, "LINEAR");
local animFill = NarciAPI_CreateAnimationFrame(0.5);
self.animFill = animFill;
animFill:SetScript("OnUpdate", function(frame, elapsed)
frame.total = frame.total + elapsed;
local percent = outQuart(frame.total, 0, self.percent, frame.duration)
if frame.total >= frame.duration then
frame:Hide();
percent = self.percent;
end
self.fill:SetWidth(240 * percent);
self.fill:SetTexCoord(0, percent, 0, 1);
end)
function self:PlayFilling()
animFill:Hide();
if self.fill:IsShown() then
animFill.duration = max(0.15, 0.65 * sqrt(self.percent) );
animFill:Show();
end
end
end
function NarciAchievementStatusBarMixin:SetMinMaxValues(min, max)
if min then
self.min = min;
end
if max then
self.max = max;
end
if self.min > self.max then
self.max = self.min;
end
self.value = 0;
end
function NarciAchievementStatusBarMixin:SetValue(value, colorize)
local min, max = self.min, self.max;
if value < min then
value = min;
elseif value > max then
value = max;
end
self.value = value;
local range = max - min;
local percent;
if range == 0 then
percent = 0;
else
percent = (value - min) / range;
end
self.percent = percent;
if percent == 0 then
self.fill:SetWidth(0.1);
self.fill:Hide();
self.color:Hide();
else
self.fill:SetWidth(240 * percent);
self.fill:SetTexCoord(0, percent, 0, 1);
self.fill:Show();
self.color:Show();
end
if colorize then
local r, g, b;
if percent == 1 then
r, g, b = unpack(colors.full);
elseif percent <= 0.334 then
r, g, b = unpack(colors.red);
elseif percent <= 0.667 then
r, g, b = unpack(colors.orange);
else
r, g, b = unpack(colors.yellow);
end
self.color:SetColorTexture(r, g, b);
end
self.meter:SetText(value.."/"..max);
end
function NarciAchievementStatusBarMixin:OnShow()
self:PlayFilling();
end
function NarciAchievementStatusBarMixin:OnHide()
--self.animFill:Hide();
--self:Hide();
end