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.

143 lines
3.6 KiB

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