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
118 lines
3.1 KiB
|
5 years ago
|
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;
|
||
|
4 years ago
|
self.border:SetTexture("Interface\\AddOns\\Narcissus_Achievements\\Art\\Shared\\ProgressBarShortBorder", nil, nil, "LINEAR");
|
||
|
5 years ago
|
|
||
|
|
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();
|
||
|
5 years ago
|
end
|