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.

244 lines
7.3 KiB

local L = Narci.L;
local GetItemQualityColor = NarciAPI.GetItemQualityColor;
local GetGemBonus = NarciAPI.GetGemBonus; --(Gem's itemID or hyperlink)
local GetShardBonus = NarciAPI.GetDominationShardBonus;
local max = math.max;
local FadeFrame = NarciFadeUI.Fade;
local GemIDList = {};
local DominationShardIDs = {};
local GetItemIcon = C_Item.GetItemIconByID;
local GetItemCount = C_Item.GetItemCount;
local GetItemInfo = C_Item.GetItemInfo;
local NUM_EXAMPLE_GEMS = 3;
for gemID, info in pairs(Narci.GemData) do
tinsert(GemIDList, gemID);
end
if Narci.DominationShards then
local typeName = {
[1] = "Frost",
[2] = "Unholy",
[3] = "Blood",
}
for gemID, info in pairs(Narci.DominationShards) do
tinsert(DominationShardIDs, gemID);
end
end
local function SortedByID(a, b) return a > b; end
table.sort(GemIDList, SortedByID);
table.sort(DominationShardIDs, SortedByID);
local GemCountList = {};
local function GetMatchCount(referenceList, outputList)
wipe(outputList);
local count = 0;
local i = 1;
local exampleGems = {};
for k, itemID in pairs(referenceList) do
count = GetItemCount(itemID);
if count ~= 0 then
outputList[i] = {itemID, count};
if i <= NUM_EXAMPLE_GEMS then
tinsert(exampleGems, itemID);
end
i = i + 1;
end
end
return (i - 1), exampleGems
end
NarciGemSlotMixin = {};
function NarciGemSlotMixin:CountGems()
local numGems, exampleGems;
local list;
if self.isDomiationSocket then
list = DominationShardIDs;
else
list = GemIDList;
end
numGems, exampleGems = GetMatchCount(list, GemCountList);
self.numGems = numGems;
return numGems, exampleGems;
end
function NarciGemSlotMixin:OnEnter()
local tooltip = Narci_GearEnhancement_Tooltip;
local offsetX, extraWidth;
tooltip:ClearAllPoints();
tooltip.TailMask:ClearAllPoints();
if self:GetParent().isRight then
tooltip:SetPoint("RIGHT", self, "LEFT", 4, 0);
tooltip.TailMask:SetPoint("LEFT", tooltip, "LEFT", 0, 0);
tooltip.TailMask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Masks\\Linear-ShowRight");
offsetX = 64;
extraWidth = 36;
else
tooltip:SetPoint("LEFT", self, "RIGHT", -4, 0);
tooltip.TailMask:SetPoint("RIGHT", tooltip, "RIGHT", 0, 0);
tooltip.TailMask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Masks\\Linear-ShowLeft");
offsetX = 16;
extraWidth = 80;
end
local link = self:GetParent().gemLink;
--Show optional gem types in your inventory
local numGems, exampleGems = self:CountGems();
local text; --Show how many types of gems in bags
local sgf = tooltip.SpareGemFrame;
if numGems > 0 then
text = L["In Bags"];
sgf.Text:SetText(text);
if not sgf.Icons then
sgf.Icons = {};
end
local icons = sgf.Icons;
for i = 1, #icons do
icons[i]:Hide();
end
local texObject;
for i = 1, #exampleGems do
texObject = icons[i];
if not texObject then
texObject = sgf:CreateTexture(nil, "OVERLAY");
texObject:SetSize(12, 12);
texObject:SetPoint("LEFT", sgf.Text, "RIGHT", 8 + 14*(i - 1), 0);
texObject:SetTexCoord(0.05, 0.95, 0.05, 0.95);
icons[i] = texObject;
end
texObject:SetTexture( GetItemIcon(exampleGems[i]) );
texObject:Show();
end
local numExceed = numGems - NUM_EXAMPLE_GEMS;
if numExceed > 0 then
sgf.More:SetText("+"..numExceed);
sgf.More:Show();
sgf.ColorBlock:Show();
sgf.ColorBlock:ClearAllPoints();
sgf.ColorBlock:SetPoint("LEFT", texObject, "RIGHT", 2, 0);
sgf.ColorBlock:SetWidth(sgf.More:GetWidth() + 4);
else
sgf.More:Hide();
sgf.ColorBlock:Hide();
end
sgf:Show();
tooltip.WhiteStrip:Show();
else
sgf.Text:SetText("");
sgf:Hide();
tooltip.WhiteStrip:Hide();
end
local ItemName = tooltip.ItemName;
local Bonus = tooltip.Bonus;
ItemName:ClearAllPoints();
Bonus:ClearAllPoints();
local _, bonusText, name, quality, icon;
if self.isDomiationSocket and self.sockedGemItemID then
link = "item:"..self.sockedGemItemID..":::::::::::::::::";
end
local height;
if link then
if self.isDomiationSocket then
bonusText = GetShardBonus(self.sockedGemItemID);
else
if NarciAPI.GetCrystallicSpell(self.sockedGemItemID) then
bonusText = NarciAPI.GetCrystallicEffect(self.sockedGemItemID);
else
bonusText = GetGemBonus(link);
end
end
name, _, quality, _, _, _, _, _, _, icon = GetItemInfo(link);
Bonus:SetPoint("BOTTOMLEFT", tooltip, "LEFT", offsetX, 1);
ItemName:SetPoint("TOPLEFT", tooltip, "LEFT", offsetX, -3);
tooltip.Icon:SetSize(60, 48);
height = 48;
else
if self.isDomiationSocket then
name = EMPTY_SOCKET_DOMINATION; --EMPTY;
icon = 4095404;
else
name = EMPTY_SOCKET_PRISMATIC;
icon = 458977;
end
quality = 1;
ItemName:SetPoint("LEFT", tooltip, "LEFT", offsetX, 0);
tooltip.Icon:SetSize(50, 40);
height = 40;
end
sgf:SetPoint("LEFT", tooltip.WhiteStrip, "LEFT", offsetX, 0);
tooltip:SetHeight(height);
local r, g, b = GetItemQualityColor(quality);
tooltip.Icon:SetTexture(icon);
tooltip.Icon:SetVertexColor(0.25, 0.25, 0.25);
ItemName:SetText(name);
ItemName:SetTextColor(r, g, b);
Bonus:SetText(bonusText);
tooltip:SetWidth(max(Bonus:GetWrappedWidth(),ItemName:GetWrappedWidth(), sgf.Text:GetWrappedWidth()) + extraWidth + offsetX);
tooltip:SetParent(self);
tooltip:SetFrameStrata("TOOLTIP");
tooltip:SetMouseMotionEnabled(false);
FadeFrame(tooltip, 0.15, 1, 0);
end
function NarciGemSlotMixin:OnLeave()
Narci_GearEnhancement_Tooltip:Hide();
end
function NarciGemSlotMixin:LoadGemList()
self:CountGems();
SOCKETED_ITEM_LEVEL = self.ItemLevel;
--if self.numGems == 0 and not self.isDomiationSocket then return; end;
Narci_EquipmentOption:SetGemListFromSlotButton(self:GetParent());
FadeFrame(Narci_GearEnhancement_Tooltip, 0.15, 0);
end
function NarciGemSlotMixin:OnClick()
local frame = Narci_EquipmentOption;
if frame:IsShown() then
frame:CloseUI();
else
self:LoadGemList();
end
Narci:HideButtonTooltip();
end
function NarciGemSlotMixin:FadeIn()
self:StopAnimating();
self.animIn:Play();
self:Show();
end
function NarciGemSlotMixin:FadeOut()
self:StopAnimating();
if self:IsVisible() then
self.animOut:Play();
else
self:Hide();
end
end
function NarciGemSlotMixin:ShowSlot()
self:StopAnimating();
self:Show();
self:SetAlpha(1);
end
function NarciGemSlotMixin:HideSlot()
self:StopAnimating();
self:Hide();
self:SetAlpha(0);
end