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.
247 lines
7.7 KiB
247 lines
7.7 KiB
local _, addon = ...
|
|
|
|
local CloseSocketingFrame = addon.CloseSocketingFrame;
|
|
local GemDataProvider = addon.GemDataProvider;
|
|
|
|
local FadeFrame = NarciFadeUI.Fade;
|
|
local GetSocketTypes = GetSocketTypes;
|
|
local SocketInventoryItem = SocketInventoryItem;
|
|
|
|
local MainFrame;
|
|
local SocketButtons = {};
|
|
|
|
local SIZE_REGULAR = 16;
|
|
local SIZE_SELECTED = 20;
|
|
|
|
local GetPixelByScale = NarciAPI.GetPixelByScale;
|
|
local PIXEL = 1;
|
|
|
|
local PixelPerfectController = {};
|
|
addon.PixelPerfectController = PixelPerfectController;
|
|
PixelPerfectController.objects = {};
|
|
|
|
function PixelPerfectController:SetScale(scale)
|
|
local pixel = GetPixelByScale(scale, 1);
|
|
PIXEL = pixel;
|
|
for _, object in pairs(self.objects) do
|
|
object:UpdatePixel(pixel);
|
|
end
|
|
end
|
|
|
|
|
|
NarciEquipmentSharedSquareButtonMixin = {};
|
|
|
|
function NarciEquipmentSharedSquareButtonMixin:OnLoad()
|
|
self.Exclusion:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Masks\\Exclusion", "CLAMPTOWHITE", "CLAMPTOWHITE", "NEAREST");
|
|
tinsert(PixelPerfectController.objects, self);
|
|
end
|
|
|
|
function NarciEquipmentSharedSquareButtonMixin:UpdatePixel(pixel)
|
|
local sizeInPixel = math.floor( (self.size or SIZE_REGULAR) / pixel + 0.5);
|
|
sizeInPixel = sizeInPixel + sizeInPixel % 2;
|
|
local size = sizeInPixel * pixel;
|
|
local borderSize = size - 4 * pixel;
|
|
local innerSize = borderSize - 2 * pixel;
|
|
self:SetSize(SIZE_REGULAR, SIZE_REGULAR);
|
|
self.Stroke:SetSize(size, size);
|
|
self.Border:SetSize(borderSize, borderSize)
|
|
self.Exclusion:SetSize(innerSize, innerSize);
|
|
end
|
|
|
|
function NarciEquipmentSharedSquareButtonMixin:SetBorderColor(r, g, b)
|
|
self.Border:SetColorTexture(r, g, b);
|
|
end
|
|
|
|
function NarciEquipmentSharedSquareButtonMixin:SetStrokeColor(r, g, b)
|
|
self.Stroke:SetColorTexture(r, g, b);
|
|
end
|
|
|
|
|
|
|
|
NarciSocketSelectButtonMixin = CreateFromMixins(NarciEquipmentSharedSquareButtonMixin);
|
|
|
|
function NarciSocketSelectButtonMixin:OnLoad()
|
|
self.Exclusion:SetTexture("Interface\\AddOns\\Narcissus\\Art\\Masks\\Exclusion", "CLAMPTOWHITE", "CLAMPTOWHITE", "NEAREST");
|
|
self.Border:SetTexture("Interface\\AddOns\\Narcissus\\Art\\EquipmentOption\\SocketTexture");
|
|
self:SetBorderColor(0.25, 0.25, 0.25);
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:OnShow()
|
|
self:UpdatePixel(PIXEL);
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:OnEnter()
|
|
self:SetBorderColor(1, 1, 1);
|
|
local fontString = self:GetParent().SocketName;
|
|
if self.gemName then
|
|
local r, g, b = NarciAPI.GetItemQualityColorByItemID(self.gemLink);
|
|
fontString:SetTextColor(r, g, b);
|
|
fontString:SetText(string.format("%s\n|cffcccccc#%d %s|r", self.gemName, self.id, self.localizedName));
|
|
else
|
|
fontString:SetText(string.format("#%d %s", self.id, self.localizedName));
|
|
fontString:SetTextColor(0.92, 0.92, 0.92);
|
|
end
|
|
fontString:Show();
|
|
FadeFrame(fontString, 0.15, 1);
|
|
FadeFrame(self:GetParent().TextShadow, 0.15, 1);
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:OnLeave()
|
|
if not self.selected then
|
|
self:SetBorderColor(0.25, 0.25, 0.25);
|
|
end
|
|
|
|
FadeFrame(self:GetParent().SocketName, 0.2, 0);
|
|
FadeFrame(self:GetParent().TextShadow, 0.2, 0);
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:Select()
|
|
for _, button in pairs(SocketButtons) do
|
|
if button == self then
|
|
button.selected = true;
|
|
button.size = SIZE_SELECTED;
|
|
button:SetBorderColor(1, 1, 1);
|
|
else
|
|
button.selected = nil;
|
|
button.size = SIZE_REGULAR;
|
|
button:SetBorderColor(0.25, 0.25, 0.25);
|
|
end
|
|
button:UpdatePixel(PIXEL);
|
|
end
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:OnClick()
|
|
self:Select();
|
|
MainFrame:SetSocketOrderID(self.id);
|
|
MainFrame:ShowGemList(self.socketTypeName);
|
|
end
|
|
|
|
function NarciSocketSelectButtonMixin:SetSocketType(englishName)
|
|
local typeName;
|
|
if englishName then
|
|
typeName = _G["EMPTY_SOCKET_"..string.upper(englishName)];
|
|
end
|
|
self.localizedName = typeName or englishName;
|
|
self.socketTypeName = englishName;
|
|
end
|
|
|
|
|
|
|
|
NarciSocketSelectMixin = {};
|
|
|
|
function NarciSocketSelectMixin:OnLoad()
|
|
MainFrame = self:GetParent():GetParent();
|
|
end
|
|
|
|
function NarciSocketSelectMixin:OnHide()
|
|
self.anySelection = nil;
|
|
end
|
|
|
|
function NarciSocketSelectMixin:SetupFromItemLink(itemLink)
|
|
local anyPending;
|
|
local selectedSocketType;
|
|
|
|
local socektInfo = NarciAPI.GetItemSocketInfo(itemLink);
|
|
|
|
local numSockets = (socektInfo and #socektInfo) or 0;
|
|
|
|
local selectedSocketID = MainFrame:GetSocketOrderID() or 1;
|
|
|
|
|
|
if numSockets > 0 then
|
|
if selectedSocketID > numSockets then
|
|
selectedSocketID = 1
|
|
end
|
|
|
|
local socketName, icon, gemLink, socketType;
|
|
|
|
for i = 1, numSockets do
|
|
if not SocketButtons[i] then
|
|
SocketButtons[i] = CreateFrame("Button", nil, self, "NarciSocketSelectButtonTemplate");
|
|
SocketButtons[i].id = i;
|
|
SocketButtons[i]:SetPoint("CENTER", self, "LEFT", 8 + 24 * (i - 1), 0);
|
|
end
|
|
socketName, icon, gemLink, socketType = unpack(socektInfo[i]);
|
|
SocketButtons[i].Icon:SetTexture(icon);
|
|
if gemLink then
|
|
SocketButtons[i].Icon:SetTexCoord(0.075, 0.925, 0.075, 0.925);
|
|
SocketButtons[i].gemName = socketName;
|
|
SocketButtons[i].gemLink = gemLink;
|
|
anyPending = true;
|
|
else
|
|
socketType = GemDataProvider:GetSocketTypeByLocalizedName(socketName) or socketType;
|
|
SocketButtons[i].Icon:SetTexCoord(0, 1, 0, 1);
|
|
SocketButtons[i].gemName = nil;
|
|
SocketButtons[i].gemLink = nil;
|
|
SocketButtons[i]:SetSocketType(socketType);
|
|
if not selectedSocketType then
|
|
selectedSocketType = socketType;
|
|
end
|
|
end
|
|
SocketButtons[i]:Show();
|
|
end
|
|
|
|
for i = numSockets + 1, 3 do
|
|
if SocketButtons[i] then
|
|
SocketButtons[i]:Hide();
|
|
SocketButtons[i].gemName = nil;
|
|
SocketButtons[i].gemLink = nil;
|
|
end
|
|
end
|
|
|
|
if numSockets > 1 then
|
|
self:Show();
|
|
else
|
|
self:Hide();
|
|
end
|
|
MainFrame:SetSocketOrderID(selectedSocketID);
|
|
else
|
|
MainFrame:SetSocketOrderID(selectedSocketID);
|
|
self:Hide();
|
|
return
|
|
end
|
|
|
|
if anyPending then
|
|
--use ItemSocketingFrame to get socket type order
|
|
local isNarcissusUI = MainFrame.isNarcissusUI;
|
|
if isNarcissusUI then
|
|
SocketInventoryItem(MainFrame.slotID);
|
|
end
|
|
local socketType;
|
|
for i = 1, numSockets do
|
|
if SocketButtons[i] then
|
|
socketType = GetSocketTypes(i);
|
|
SocketButtons[i]:SetSocketType(socketType);
|
|
if not selectedSocketType then
|
|
selectedSocketType = socketType;
|
|
end
|
|
end
|
|
end
|
|
|
|
if isNarcissusUI then
|
|
CloseSocketingFrame();
|
|
end
|
|
end
|
|
|
|
if not self.anySelection then
|
|
self.anySelection = true;
|
|
SocketButtons[1]:Select();
|
|
MainFrame:SetSocketOrderID(1);
|
|
end
|
|
|
|
return selectedSocketType
|
|
end
|
|
|
|
function NarciSocketSelectMixin:SetTypeHomogeneous(numSockets, typeName)
|
|
for i = 1, numSockets do
|
|
if SocketButtons[i] then
|
|
SocketButtons[i]:SetSocketType(typeName);
|
|
end
|
|
end
|
|
for i = numSockets + 1, 3 do
|
|
if SocketButtons[i] then
|
|
SocketButtons[i]:Hide();
|
|
end
|
|
end
|
|
self:Show();
|
|
end
|