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.
123 lines
4.5 KiB
123 lines
4.5 KiB
local GetItemSpell = GetItemSpell;
|
|
local GetSpellInfo = GetSpellInfo;
|
|
local GetSpellBaseCooldown = GetSpellBaseCooldown;
|
|
|
|
|
|
NarciEquipmentSpellFrameMixin = {};
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetFrameWidth(width)
|
|
self:SetWidth(width);
|
|
self.SpellEffect:SetWidth(width);
|
|
self.SpellName:SetWidth(width - 34);
|
|
end
|
|
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetSpellEffect(link, effectText, isActive, cooldownText)
|
|
local spellName, spellID = GetItemSpell(link);
|
|
--print(effectText)
|
|
self.spellID = spellID;
|
|
self:SetSpellInactive(not isActive and ITEM_LEGACY_INACTIVE_EFFECTS);
|
|
if spellID then
|
|
if not spellName then
|
|
self:GetParent():QueryData();
|
|
return
|
|
end
|
|
local _, _, icon, _, minRange, maxRange = GetSpellInfo(spellID);
|
|
local cd = GetSpellBaseCooldown(spellID);
|
|
self.Icon:SetTexture(icon);
|
|
self.SpellName:SetText(spellName);
|
|
if cd and cd > 0 then
|
|
self.SpellCooldown:SetText( SecondsToTime(cd / 1000) );
|
|
self.CooldownIcon:Show();
|
|
elseif cooldownText then
|
|
self.SpellCooldown:SetText(cooldownText);
|
|
self.CooldownIcon:Show();
|
|
else
|
|
self.SpellCooldown:SetText(nil);
|
|
self.CooldownIcon:Hide();
|
|
end
|
|
if maxRange and maxRange > 0 then
|
|
maxRange = (maxRange <= 5 and MELEE_RANGE) or string.format(SPELL_RANGE, maxRange);
|
|
else
|
|
maxRange = " ";
|
|
end
|
|
self.SpellRange:SetText(maxRange);
|
|
self.SpellEffect:SetText(effectText);
|
|
elseif effectText then
|
|
--it seems impossible to obatin the spellID from item if that one is a legacy item
|
|
self.spellID = 0;
|
|
self.SpellName:SetText(self:GetParent().itemName);
|
|
self.Icon:SetTexture(self:GetParent().itemIcon);
|
|
self.SpellRange:SetText(" ");
|
|
self.SpellEffect:SetText(effectText);
|
|
if cooldownText then
|
|
self.SpellCooldown:SetText(cooldownText);
|
|
self.CooldownIcon:Show();
|
|
else
|
|
self.SpellCooldown:SetText(nil);
|
|
self.CooldownIcon:Hide();
|
|
end
|
|
else
|
|
self:Hide();
|
|
return
|
|
end
|
|
|
|
local frameHeight = self:GetTop() - (self.SpellEffect:GetBottom() or 0) + (self.bottomPadding or 0);
|
|
local frameWidth = math.max(34 + self.SpellName:GetWrappedWidth(), self.SpellEffect:GetWrappedWidth());
|
|
self:GetParent():UpdateMaxWidth(frameWidth);
|
|
self:SetHeight(frameHeight);
|
|
self:Show();
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:Clear()
|
|
if self.spellID then
|
|
self:Hide();
|
|
self.Icon:SetTexture(nil);
|
|
self.SpellName:SetText(nil);
|
|
self.SpellCooldown:SetText(nil);
|
|
self.SpellRange:SetText(nil);
|
|
self.SpellEffect:SetText(nil);
|
|
self.spellID = nil;
|
|
end
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetCooldownTextColor(r, g, b)
|
|
self.CooldownIcon:SetVertexColor(r, g, b);
|
|
self.SpellCooldown:SetTextColor(r, g, b);
|
|
self.SpellName:SetTextColor(r, g, b);
|
|
end
|
|
|
|
function NarciEquipmentSpellFrameMixin:SetSpellInactive(requirementText)
|
|
if requirementText then
|
|
if self.isActive then
|
|
self.isActive = nil;
|
|
self.Icon:ClearAllPoints();
|
|
self.Icon:SetPoint("LEFT", self, "LEFT", 1, 0);
|
|
self.Icon:SetPoint("TOP", self.InactiveAlert, "BOTTOM", 0, -5);
|
|
self.SpellName:ClearAllPoints();
|
|
self.SpellName:SetPoint("TOPLEFT", self.Icon, "TOPLEFT", 31, -1);
|
|
self:SetCooldownTextColor(0.5, 0.5, 0.5);
|
|
self.SpellEffect:SetTextColor(0.5, 0.5, 0.5);
|
|
self.Icon:SetDesaturation(1);
|
|
self.InactiveAlert:Show();
|
|
self.RedBackground:Show();
|
|
self.bottomPadding = 6;
|
|
end
|
|
self.InactiveAlert:SetText(requirementText);
|
|
else
|
|
if not self.isActive then
|
|
self.isActive = true;
|
|
self.Icon:ClearAllPoints();
|
|
self.Icon:SetPoint("TOPLEFT", self, "TOPLEFT", 1, -1);
|
|
self.SpellName:ClearAllPoints();
|
|
self.SpellName:SetPoint("TOPLEFT", self, "TOPLEFT", 32, 0);
|
|
self:SetCooldownTextColor(0.8863, 0.8863, 0.8863);
|
|
self.SpellEffect:SetTextColor(1, 0.82, 0);
|
|
self.Icon:SetDesaturation(0);
|
|
self.InactiveAlert:Hide();
|
|
self.RedBackground:Hide();
|
|
self.bottomPadding = 0;
|
|
end
|
|
self.InactiveAlert:SetText(nil);
|
|
end
|
|
end
|