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
111 lines
3.7 KiB
|
4 years ago
|
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
|