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.

192 lines
6.7 KiB

local _, addon = ...
local OnEnterDelay = addon.TalentTreeOnEnterDelay;
local ClassTalentTooltipUtil = addon.ClassTalentTooltipUtil;
local GetDefinitionInfo = C_Traits and C_Traits.GetDefinitionInfo;
local C_TooltipInfo = C_TooltipInfo;
local GetSpellInfo = GetSpellInfo;
local GetPvpTalentInfoByID = GetPvpTalentInfoByID;
local IsPassiveSpell = IsPassiveSpell;
local select = select;
NarciTalentTreeNodeMixin = {};
local function SetNodeIcon(node, definitionInfo, overrideSpellID)
if definitionInfo then
local overrideIcon = definitionInfo.overrideIcon;
if not overrideIcon then
local spellID = overrideSpellID or definitionInfo.spellID;
if spellID then
overrideIcon = select(8, GetSpellInfo(spellID));
end
end
node.Icon:SetTexture(overrideIcon);
node.Icon:SetTexCoord(0.0625, 0.9375, 0.0625, 0.9375);
end
end
function NarciTalentTreeNodeMixin:SetNodeType(typeID, ranksPurchased)
--typeID: this is custom value 0:Square 1:Circle 2:Octagon
if typeID ~= self.typeID then
self.typeID = typeID;
if typeID == 0 then
self.IconMask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\TalentTree\\NodeMaskSquare");
self.IconBorder:SetTexCoord(0, 0.25, 0, 0.5);
self.Symbol:SetTexCoord(0, 0.25, 0, 0.25);
elseif typeID == 1 then
self.IconMask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\TalentTree\\NodeMaskCircle");
self.IconBorder:SetTexCoord(0.25, 0.5, 0, 0.5);
self.Symbol:SetTexCoord(0, 0.25, 0.25, 0.5);
else
self.IconMask:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\TalentTree\\NodeMaskOctagon");
self.Symbol:SetTexCoord(0.75, 1, 0, 0.25);
end
end
if ranksPurchased ~= self.points then
self.points = ranksPurchased;
if typeID == 1 then
if ranksPurchased == 1 then
--1/2, 1/3
self.IconBorder:SetTexCoord(0.5, 0.75, 0, 0.5);
self.Symbol:SetTexCoord(0, 0.25, 0.5, 0.75);
elseif ranksPurchased == 2 then
--2/3
self.IconBorder:SetTexCoord(0.75, 1, 0, 0.5);
self.Symbol:SetTexCoord(0.25, 0.5, 0.75, 1);
else
--don't show number for fully purchased talent (1/1, 2/2, 3/3)
self.IconBorder:SetTexCoord(0.25, 0.5, 0, 0.5);
self.Symbol:SetTexCoord(0, 0.25, 0.25, 0.5);
end
elseif typeID == 2 then
if ranksPurchased == 0 then
--no slecion
self.IconBorder:SetTexCoord(0, 0.25, 0.5, 1);
self.Symbol:SetTexCoord(0.75, 1, 0, 0.25);
elseif ranksPurchased == 1 then
--select left
self.IconBorder:SetTexCoord(0.25, 0.5, 0.5, 1);
self.Symbol:SetTexCoord(0.25, 0.5, 0, 0.25);
else
--select right
self.IconBorder:SetTexCoord(0.5, 0.75, 0.5, 1);
self.Symbol:SetTexCoord(0.5, 0.75, 0, 0.25);
end
end
end
end
function NarciTalentTreeNodeMixin:SetDefinitionID(definitionID)
local info = GetDefinitionInfo(definitionID);
self.definitionID = definitionID;
SetNodeIcon(self, info);
end
function NarciTalentTreeNodeMixin:SetActive(state)
if state or state == nil then
if not self.isActive then
self.isActive = true;
self.Icon:SetVertexColor(1, 1, 1);
self.Icon:SetDesaturated(false);
self.IconBorder:SetVertexColor(1, 1, 1);
self.IconBorder:SetDesaturated(false);
end
else
if self.isActive or self.isActive == nil then
self.isActive = nil;
self.Icon:SetVertexColor(0.400, 0.400, 0.400);
self.Icon:SetDesaturated(true);
self.IconBorder:SetVertexColor(0.400, 0.400, 0.400);
self.IconBorder:SetDesaturated(true);
end
end
end
function NarciTalentTreeNodeMixin:SetBorderColor(isBlue)
if isBlue then
if not self.isBlue then
self.isBlue = true;
self.IconBorder:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\TalentTree\\NodeIconBorderCyan");
end
else
if self.isBlue then
self.isBlue = nil;
self.IconBorder:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Modules\\TalentTree\\NodeIconBorder");
end
end
end
local ColorWhite = CreateColor(1, 1, 1);
function NarciTalentTreeNodeMixin:OnEnterOld()
print(self.nodeID);
local tooltip = GameTooltip;
tooltip:Hide();
tooltip:SetOwner(self, "ANCHOR_NONE");
tooltip:SetPoint("TOPLEFT", self, "TOPRIGHT", 4, 0);
--tooltip:SetTraitEntry(self.entryID, self.rank);
local info = {};
local data = C_TooltipInfo.GetTraitEntry(self.entryID, self.rank);
if data and data.lines then
local args = {};
local traitName;
if self.definitionID then
local definitionInfo = C_Traits.GetDefinitionInfo(self.definitionID);
local spellID = definitionInfo and definitionInfo.spellID;
if spellID then
traitName = GetSpellInfo(spellID);
print(traitName)
end
end
args[1] = {intVal = 0, field = "type"};
args[2] = {stringVal = traitName, field = "leftText"};
args[3] = {colorVal = ColorWhite, field="leftColor"};
table.insert(data.lines, 1, {args = args});
end
info.tooltipData = data;
tooltip:ProcessInfo(info);
tooltip:Show();
EI = C_TooltipInfo.GetTraitEntry(self.entryID, self.rank);
end
function NarciTalentTreeNodeMixin:OnEnter()
--print("definitionID: "..self.definitionID)
OnEnterDelay:WatchButton(self);
ClassTalentTooltipUtil:UpdateCursorDelta();
end
function NarciTalentTreeNodeMixin:OnEnterCallback()
ClassTalentTooltipUtil.SetFromNode(self);
end
function NarciTalentTreeNodeMixin:OnLeave()
OnEnterDelay:ClearButton();
ClassTalentTooltipUtil.HideTooltip();
end
function NarciTalentTreeNodeMixin:SetPvPTalent(talentID, inspectUnit)
self.talentID = talentID;
if talentID then
local _, _, icon, _, _, spellID = GetPvpTalentInfoByID(talentID);
self.Icon:SetTexture(icon);
self:SetActive(true);
if IsPassiveSpell(spellID) then
self:SetNodeType(1);
else
self:SetNodeType(0);
end
else
self.Icon:SetTexture(nil);
self:SetActive(false);
self:SetNodeType(2, 0);
end
end