|
|
|
|
local NUM_RUNES = 3;
|
|
|
|
|
local RUNE_TEX_PATH = "Interface\\AddOns\\Narcissus\\Art\\Runes\\Letters\\";
|
|
|
|
|
|
|
|
|
|
local GetAttributeAbbrByEnchantID = NarciAPI.GetAttributeAbbrByEnchantID;
|
|
|
|
|
|
|
|
|
|
--[[
|
|
|
|
|
Final Size = 16, Gap = 8
|
|
|
|
|
--]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NarciRuneAnimationMixin = {};
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:OnLoad()
|
|
|
|
|
self:SetRuneSize(16);
|
|
|
|
|
self:SetRuneDistance(8);
|
|
|
|
|
self:SetRuneTexture(1, "C");
|
|
|
|
|
self:SetRuneTexture(2, "R");
|
|
|
|
|
self:SetRuneTexture(3, "I");
|
|
|
|
|
self:SetDirection(1);
|
|
|
|
|
self:SetDuration(2.3);
|
|
|
|
|
--self:RegisterForDrag("LeftButton");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:OnShow()
|
|
|
|
|
self:SetFrameStrata("TOOLTIP");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:OnHide()
|
|
|
|
|
self:Hide();
|
|
|
|
|
self:StopAnimating();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetRuneTexture(i, letter)
|
|
|
|
|
if self["Rune"..i] then
|
|
|
|
|
self["Rune"..i]:SetTexture(RUNE_TEX_PATH..string.lower(letter));
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetRuneSize(a)
|
|
|
|
|
for i = 1, NUM_RUNES do
|
|
|
|
|
self["Rune"..i]:SetSize(a, a);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetRuneDistance(d)
|
|
|
|
|
local y0 = (NUM_RUNES - 1) * 0.5 * d;
|
|
|
|
|
for i = 1, NUM_RUNES do
|
|
|
|
|
self["Rune"..i]:ClearAllPoints();
|
|
|
|
|
self["Rune"..i]:SetPoint("CENTER", self, "CENTER", 0, y0 + (1 - i) * d);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetRuneByEnchantID(enchantID)
|
|
|
|
|
local abbr = GetAttributeAbbrByEnchantID(enchantID);
|
|
|
|
|
if not abbr then
|
|
|
|
|
self.hasRune = false;
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
for i = 1, 3 do
|
|
|
|
|
self:SetRuneTexture(i, string.sub(abbr, i, i));
|
|
|
|
|
end
|
|
|
|
|
self.hasRune = true;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetAnimationDuration(t)
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:PlayAnimation()
|
|
|
|
|
if not self.hasRune then return end;
|
|
|
|
|
self:StopAnimating();
|
|
|
|
|
self:SetAlpha(1);
|
|
|
|
|
for i = 1, NUM_RUNES do
|
|
|
|
|
self["Rune"..i].Anim:Play();
|
|
|
|
|
end
|
|
|
|
|
self.Shine.Anim:Play();
|
|
|
|
|
self:Show();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:StopAnimation()
|
|
|
|
|
local anyPlaying = false;
|
|
|
|
|
|
|
|
|
|
for i = 1, NUM_RUNES do
|
|
|
|
|
local rune = self["Rune"..i];
|
|
|
|
|
if rune.Anim:IsPlaying() then
|
|
|
|
|
anyPlaying = true;
|
|
|
|
|
rune.Anim:Pause();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
self.Shine.Anim:Pause();
|
|
|
|
|
if self:IsShown() and anyPlaying then
|
|
|
|
|
self.FadeOut:Play();
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetDirection(d)
|
|
|
|
|
if d < 0 then
|
|
|
|
|
self.Shine:SetTexCoord(0, 1, 0, 1);
|
|
|
|
|
else
|
|
|
|
|
self.Shine:SetTexCoord(1, 0, 0, 1);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local a1 = self.Rune1.Anim;
|
|
|
|
|
a1.Fly1:SetOffset(12 * d, 8);
|
|
|
|
|
a1.Fly2:SetOffset(12 * d, 4);
|
|
|
|
|
a1.Rotate2:SetDegrees(12 * d);
|
|
|
|
|
a1.Fly3:SetOffset(-24 * d, -12);
|
|
|
|
|
a1.Rotate3:SetDegrees(-12 * d);
|
|
|
|
|
|
|
|
|
|
local a2 = self.Rune2.Anim;
|
|
|
|
|
a2.Fly1:SetOffset(13 * d, 0);
|
|
|
|
|
a2.Fly2:SetOffset(12 * d, 0);
|
|
|
|
|
a2.Fly3:SetOffset(-25 * d, 0);
|
|
|
|
|
|
|
|
|
|
local a3 = self.Rune3.Anim;
|
|
|
|
|
a3.Fly1:SetOffset(14 * d, -8);
|
|
|
|
|
a3.Fly2:SetOffset(10 * d, -4);
|
|
|
|
|
a3.Rotate2:SetDegrees(-8 * d);
|
|
|
|
|
a3.Fly3:SetOffset(-24 * d, 12);
|
|
|
|
|
a3.Rotate3:SetDegrees(8 * d);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:SetDuration(t)
|
|
|
|
|
self.Rune1.Anim.Fly2:SetDuration(t - 0.2);
|
|
|
|
|
self.Rune1.Anim.Rotate2:SetDuration(t - 0.2);
|
|
|
|
|
self.Rune2.Anim.Fly2:SetDuration(t - 0.4);
|
|
|
|
|
self.Rune3.Anim.Fly2:SetDuration(t - 0.6);
|
|
|
|
|
self.Rune3.Anim.Rotate2:SetDuration(t - 0.6);
|
|
|
|
|
self.Shine.Anim.Hold:SetStartDelay(t);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--Debug
|
|
|
|
|
function NarciRuneAnimationMixin:OnMouseDown()
|
|
|
|
|
self:PlayAnimation();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:OnDragStart()
|
|
|
|
|
self:StartMoving();
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function NarciRuneAnimationMixin:OnDragStop()
|
|
|
|
|
self:StopMovingOrSizing();
|
|
|
|
|
end
|