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.

111 lines
3.7 KiB

local BLIP_CYCLE = 1; --2 seconds
local PATH_PREFIX = "Interface\\AddOns\\Narcissus\\Art\\IconHighlight\\";
local tex2x = {"OuterGlow", "Trail1", "Trail2", "Trail3", "Trail4"};
local tex1x = {"InnerGlow", "WhiteBorder", "TrailMask1", "TrailMask2", "TrailMask3", "TrailMask4"};
local tex05x = {"Blip1", "Blip2", "Blip3", "Blip4"};
NarciActivationAlertMixin = {};
function NarciActivationAlertMixin:UpdateSize()
local parentButton = self:GetParent();
if parentButton then
local a = math.floor(parentButton:GetWidth() + 0.5);
for _, childKey in pairs(tex2x) do
self[childKey]:SetSize(2 * a, 2 * a);
end
for _, childKey in pairs(tex1x) do
self[childKey]:SetSize(a, a);
end
for _, childKey in pairs(tex05x) do
self[childKey]:SetSize(0.5 * a, 0.5 * a);
end
end
end
function NarciActivationAlertMixin:OnLoad()
self.InnerGlow:SetTexture(PATH_PREFIX.."InnerGlow");
self.OuterGlow:SetTexture(PATH_PREFIX.."OuterGlow");
self.WhiteBorder:SetTexture(PATH_PREFIX.."WhiteBorder");
for i = 1, 4 do
self["Blip"..i]:SetTexture(PATH_PREFIX.."Blip");
self["Trail"..i]:SetTexture(PATH_PREFIX.."Trail");
self["TrailMask"..i]:SetTexture(PATH_PREFIX.."TrailMask", "CLAMPTOBLACKADDITIVE", "CLAMPTOBLACKADDITIVE");
end
self:UpdateSize();
end
function NarciActivationAlertMixin:OnUpdate(elapsed)
--Update Blip Position
self.t = self.t + elapsed;
local cycle;
if self.laps < 4 then
cycle = ((4 - self.laps)/ 4) * 0.25 + (self.laps / 4) * BLIP_CYCLE;
else
cycle = BLIP_CYCLE;
end
if self.t > cycle then
self.t = self.t - cycle;
self.laps = self.laps + 1;
end
local w = self.blipRadius;
local offset = 2 * w * self.t / cycle;
self.Blip1:SetPoint("CENTER", self, "CENTER", -w + offset, w);
self.Blip2:SetPoint("CENTER", self, "CENTER", w, w - offset );
self.Blip3:SetPoint("CENTER", self, "CENTER", w - offset, -w);
self.Blip4:SetPoint("CENTER", self, "CENTER", -w, -w + offset);
self.TrailMask1:SetPoint("CENTER", self, "CENTER", -w + offset, w);
self.TrailMask2:SetPoint("CENTER", self, "CENTER", w, w - offset );
self.TrailMask3:SetPoint("CENTER", self, "CENTER", w - offset, -w);
self.TrailMask4:SetPoint("CENTER", self, "CENTER", -w, -w + offset);
--End Animation
self.d = self.d + elapsed;
if self.d >= self.duration and not self.isPlayingOutro then
self.isPlayingOutro = true;
self:PlayOutro();
end
end
function NarciActivationAlertMixin:PlayIntro(duration)
if not duration then
return
end
self.duration = duration;
self:StopAnimating();
self.IntroAnim:Play();
--Reset Blip Position
self.t = 0;
self.d = 0;
self.laps = 0;
self.isPlayingOutro = false;
local w = self:GetWidth()/2 - 0.5;
self.blipRadius = w;
self.Blip1:SetPoint("CENTER", self, "CENTER", -w, w);
self.Blip2:SetPoint("CENTER", self, "CENTER", w, w);
self.Blip3:SetPoint("CENTER", self, "CENTER", w, -w);
self.Blip4:SetPoint("CENTER", self, "CENTER", -w, -w);
self.TrailMask1:SetPoint("CENTER", self, "CENTER", -w, w);
self.TrailMask2:SetPoint("CENTER", self, "CENTER", w, w);
self.TrailMask3:SetPoint("CENTER", self, "CENTER", w, -w);
self.TrailMask4:SetPoint("CENTER", self, "CENTER", -w, -w);
self:Show();
end
function NarciActivationAlertMixin:PlayHold()
self:StopAnimating();
self.HoldAnim:Play();
end
function NarciActivationAlertMixin:PlayOutro()
self:StopAnimating();
self.OutroAnim:Play();
end
function NarciActivationAlertMixin:Release()
self:Hide();
end