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.
149 lines
5.6 KiB
149 lines
5.6 KiB
local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE)
|
|
local BI = SLE.BagInfo
|
|
local B = E.Bags
|
|
|
|
local _G = _G
|
|
local C_Container_GetContainerNumSlots = C_Container.GetContainerNumSlots
|
|
-- local C_Container_GetContainerItemEquipmentSetInfo = C_Container.GetContainerItemEquipmentSetInfo --* API is currently broken and have to use a work around for now
|
|
local CUSTOM = CUSTOM
|
|
-- local EQUIPMENT_SETS = EQUIPMENT_SETS
|
|
-- EQUIPMENT_SETS = E:StripString(EQUIPMENT_SETS)
|
|
-- EQUIPMENT_SETS = EQUIPMENT_SETS:gsub('%%s', '')
|
|
-- EQUIPMENT_SETS = E:EscapeString(EQUIPMENT_SETS)
|
|
local MATCH_EQUIPMENT_SETS = EQUIPMENT_SETS:gsub('%-','%%-'):gsub('%%s', '(.-)') --* Part of the workaround
|
|
|
|
--* Used this to help translate known texcoords to a |T |t string
|
|
-- CreateTextureMarkup('Interface\\PaperDollInfoFrame\\PaperDollSidebarTabs', 64, 256, 0, 0, 0.01562500, 0.53125000, 0.46875000, 0.60546875, 0, 0)
|
|
-- CreateTextureMarkup(file, fileWidth, fileHeight, width, height, left, right, top, bottom, xOffset, yOffset)
|
|
-- return ("|T%s:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d|t"):format(
|
|
-- file, height, width, xOffset or 0, yOffset or 0, fileWidth, fileHeight, left * fileWidth, right * fileWidth, top * fileHeight, bottom * fileHeight
|
|
-- )
|
|
-- end
|
|
-- local texture = '|TInterface\\PaperDollInfoFrame\\PaperDollSidebarTabs:20:20:0:0:64:256:1:34:120:155|t'
|
|
|
|
BI.equipmentmanager = {
|
|
icons = {
|
|
EQUIPMGR = 'Equipment Manager Icon |TInterface\\PaperDollInfoFrame\\PaperDollSidebarTabs:20:20:0:0:64:256:1:34:120:155|t',
|
|
EQUIPLOCK = 'Equipment Lock Icon |TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\lock:14|t',
|
|
NEWICON = 'New Feature Icon |TInterface\\OptionsFrame\\UI-OptionsFrame-NewFeatureIcon:14|t',
|
|
CUSTOM = CUSTOM,
|
|
},
|
|
iconLocations = {
|
|
EQUIPLOCK = [[Interface\AddOns\ElvUI_SLE\media\textures\lock]],
|
|
NEWICON = [[Interface\OptionsFrame\UI-OptionsFrame-NewFeatureIcon]],
|
|
},
|
|
}
|
|
|
|
function B:HideSet(slot, keep)
|
|
if not slot or not slot.equipIcon then return end
|
|
slot.equipIcon:Hide()
|
|
|
|
if not keep and E:IsEventRegisteredForObject('EQUIPMENT_SETS_CHANGED', slot) then
|
|
E:UnregisterEventForObject('EQUIPMENT_SETS_CHANGED', slot, B.UpdateSet)
|
|
end
|
|
end
|
|
|
|
function B:UpdateSet(slot)
|
|
slot = slot == 'EQUIPMENT_SETS_CHANGED' and self or slot
|
|
if not slot or not slot.itemID then return end
|
|
-- local isInSet, setName = C_Container.GetContainerItemEquipmentSetInfo(bagID, slotID)(slot.bagID, slot.slotID) --* API is currently broken
|
|
|
|
--* Start - Part of the workaround
|
|
local isInSet = false
|
|
local tooltipData = C_TooltipInfo.GetBagItem(slot.BagID, slot.SlotID)
|
|
|
|
if slot.isEquipment and tooltipData then
|
|
for _, line in ipairs(tooltipData.lines) do
|
|
if (line and line.leftText) and strmatch(line.leftText, MATCH_EQUIPMENT_SETS) then
|
|
isInSet = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
--* End - Part of the workaround
|
|
|
|
if isInSet then
|
|
slot.equipIcon:SetShown(BI.db.enable)
|
|
else
|
|
B:HideSet(slot, true)
|
|
end
|
|
end
|
|
|
|
local function updateSettings(slot)
|
|
slot.equipIcon:SetSize(E.db.sle.bags.equipmentmanager.size, E.db.sle.bags.equipmentmanager.size)
|
|
slot.equipIcon:ClearAllPoints()
|
|
slot.equipIcon:Point(E.db.sle.bags.equipmentmanager.point, E.db.sle.bags.equipmentmanager.xOffset, E.db.sle.bags.equipmentmanager.yOffset)
|
|
|
|
if E.db.sle.bags.equipmentmanager.icon == 'EQUIPMGR' then
|
|
slot.equipIcon:SetTexture([[Interface\PaperDollInfoFrame\PaperDollSidebarTabs]])
|
|
slot.equipIcon:SetTexCoord(0.01562500, 0.53125000, 0.46875000, 0.60546875)
|
|
elseif E.db.sle.bags.equipmentmanager.icon == 'CUSTOM' then
|
|
slot.equipIcon:SetTexture(E.db.sle.bags.equipmentmanager.customTexture)
|
|
slot.equipIcon:SetTexCoord(0, 0, 0, 1, 1, 0, 1, 1)
|
|
else
|
|
slot.equipIcon:SetTexture(BI.equipmentmanager.iconLocations[E.db.sle.bags.equipmentmanager.icon] or E.db.sle.bags.equipmentmanager.icon)
|
|
slot.equipIcon:SetTexCoord(0, 0, 0, 1, 1, 0, 1, 1)
|
|
end
|
|
|
|
slot.equipIcon:SetVertexColor(E.db.sle.bags.equipmentmanager.color.r, E.db.sle.bags.equipmentmanager.color.g, E.db.sle.bags.equipmentmanager.color.b, E.db.sle.bags.equipmentmanager.color.a)
|
|
end
|
|
|
|
function BI:UpdateItemDisplay()
|
|
if not E.private.bags.enable then return end
|
|
|
|
for _, bagFrame in next, B.BagFrames do
|
|
for _, bagID in next, bagFrame.BagIDs do
|
|
for slotID = 1, C_Container_GetContainerNumSlots(bagID) do
|
|
local slot = bagFrame.Bags[bagID][slotID]
|
|
if slot and slot.equipIcon then
|
|
updateSettings(slot)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BI:ConstructContainerButton(f, bagID, slotID)
|
|
if not f then return end
|
|
local bag = f.Bags[bagID]
|
|
if not bag then return end
|
|
local isReagent = bagID == REAGENTBANK_CONTAINER
|
|
local slotName = isReagent and ('ElvUIReagentBankFrameItem'..slotID) or (bag.name..'Slot'..slotID)
|
|
local slot = _G[slotName]
|
|
BI.db = E.db.sle.bags.equipmentmanager
|
|
|
|
if not slot.equipIcon then
|
|
slot.equipIcon = slot:CreateTexture(nil, 'OVERLAY')
|
|
updateSettings(slot)
|
|
slot.equipIcon:Hide()
|
|
end
|
|
end
|
|
hooksecurefunc(B, 'ConstructContainerButton', BI.ConstructContainerButton)
|
|
|
|
function BI:UpdateSlot(frame, bagID, slotID)
|
|
local bag = frame.Bags[bagID]
|
|
local slot = bag and bag[slotID]
|
|
if not slot or not slot.equipIcon then return end
|
|
|
|
if slot.isEquipment then
|
|
B:UpdateSet(slot)
|
|
|
|
if not E:IsEventRegisteredForObject('EQUIPMENT_SETS_CHANGED', slot) then
|
|
E:RegisterEventForObject('EQUIPMENT_SETS_CHANGED', slot, B.UpdateSet)
|
|
end
|
|
else
|
|
B:HideSet(slot)
|
|
end
|
|
end
|
|
hooksecurefunc(B, 'UpdateSlot', BI.UpdateSlot)
|
|
|
|
function BI:Initialize()
|
|
if not SLE.initialized or not E.private.bags.enable then return end
|
|
|
|
function BI:ForUpdateAll()
|
|
BI.db = E.db.sle.bags.equipmentmanager
|
|
B:UpdateAllBagSlots(true)
|
|
end
|
|
end
|
|
|
|
SLE:RegisterModule(BI:GetName())
|
|
|