|
|
|
|
local SLE, T, E = unpack(select(2, ...))
|
|
|
|
|
local BI = SLE.BagInfo
|
|
|
|
|
local B = E.Bags
|
|
|
|
|
|
|
|
|
|
local _G = _G
|
|
|
|
|
local GetContainerNumSlots = GetContainerNumSlots
|
|
|
|
|
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 MAX_CONTAINER_ITEMS = 36
|
|
|
|
|
local REAGENTBANK_CONTAINER = REAGENTBANK_CONTAINER
|
|
|
|
|
local NUM_BANKGENERIC_SLOTS = NUM_BANKGENERIC_SLOTS
|
|
|
|
|
local GetContainerItemEquipmentSetInfo = GetContainerItemEquipmentSetInfo
|
|
|
|
|
local C_EquipmentSet_GetEquipmentSetIDs = C_EquipmentSet.GetEquipmentSetIDs
|
|
|
|
|
local C_EquipmentSet_GetEquipmentSetInfo = C_EquipmentSet.GetEquipmentSetInfo
|
|
|
|
|
|
|
|
|
|
--* 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]],
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local function ConstructBagIcons()
|
|
|
|
|
for _, f in pairs(B.BagFrames) do
|
|
|
|
|
for _, bagID in next, f.BagIDs do
|
|
|
|
|
for slotID = 1, MAX_CONTAINER_ITEMS do
|
|
|
|
|
local button = f.Bags[bagID][slotID]
|
|
|
|
|
|
|
|
|
|
if not button.equipIcon then
|
|
|
|
|
button.equipIcon = button:CreateTexture(nil, 'OVERLAY')
|
|
|
|
|
button.equipIcon:Hide()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:UpdateAllBagSlots()
|
|
|
|
|
for _, f in pairs(B.BagFrames) do
|
|
|
|
|
for _, bagID in next, f.BagIDs do
|
|
|
|
|
for slotID = 1, MAX_CONTAINER_ITEMS do
|
|
|
|
|
BI:UpdateSlot(f, bagID, slotID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:UpdateBagSlots(frame, bagID)
|
|
|
|
|
if bagID ~= REAGENTBANK_CONTAINER then
|
|
|
|
|
for slotID = 1, GetContainerNumSlots(bagID) do
|
|
|
|
|
-- print('yo')
|
|
|
|
|
BI:UpdateSlot(frame, bagID, slotID)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:UpdateSlot(f, bagID, slotID)
|
|
|
|
|
if not f.Bags[bagID] or not f.Bags[bagID][slotID] then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local button = f.Bags[bagID][slotID]
|
|
|
|
|
-- local link = GetContainerItemLink(bagID, slotID)
|
|
|
|
|
|
|
|
|
|
if not button then return end
|
|
|
|
|
if not button.equipIcon then ConstructBagIcons() end
|
|
|
|
|
|
|
|
|
|
local isInSet, setName = GetContainerItemEquipmentSetInfo(bagID, slotID)
|
|
|
|
|
|
|
|
|
|
button.equipIcon:SetShown(BI.db.enable and isInSet)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:UpdateBagSettings()
|
|
|
|
|
for _, f in pairs(B.BagFrames) do
|
|
|
|
|
for _, bagID in next, f.BagIDs do
|
|
|
|
|
for slotID = 1, MAX_CONTAINER_ITEMS do
|
|
|
|
|
local button = f.Bags[bagID][slotID]
|
|
|
|
|
if not button.equipIcon then return end
|
|
|
|
|
|
|
|
|
|
button.equipIcon:SetSize(BI.db.size, BI.db.size)
|
|
|
|
|
button.equipIcon:ClearAllPoints()
|
|
|
|
|
button.equipIcon:Point(BI.db.point, BI.db.xOffset, BI.db.yOffset)
|
|
|
|
|
|
|
|
|
|
if BI.db.icon == 'EQUIPMGR' then
|
|
|
|
|
button.equipIcon:SetTexture('Interface\\PaperDollInfoFrame\\PaperDollSidebarTabs')
|
|
|
|
|
button.equipIcon:SetTexCoord(0.01562500, 0.53125000, 0.46875000, 0.60546875)
|
|
|
|
|
elseif BI.db.icon == 'CUSTOM' then
|
|
|
|
|
button.equipIcon:SetTexture(BI.db.customTexture)
|
|
|
|
|
button.equipIcon:SetTexCoord(0, 0, 0, 1, 1, 0, 1, 1)
|
|
|
|
|
else
|
|
|
|
|
-- button.equipIcon:SetTexture(3547163)
|
|
|
|
|
button.equipIcon:SetTexture(BI.equipmentmanager.iconLocations[BI.db.icon] or BI.db.icon)
|
|
|
|
|
button.equipIcon:SetTexCoord(0, 0, 0, 1, 1, 0, 1, 1)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- button.equipIcon:SetVertexColor(1, .82, 0, 1)
|
|
|
|
|
button.equipIcon:SetVertexColor(BI.db.color.r, BI.db.color.g, BI.db.color.b, BI.db.color.a)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:OnEventHook(frame, event, ...)
|
|
|
|
|
if event == 'ITEM_LOCK_CHANGED' then
|
|
|
|
|
BI:UpdateSlot(frame, ...)
|
|
|
|
|
elseif event == 'BAG_UPDATE' then
|
|
|
|
|
BI:UpdateBagSlots(frame, ...)
|
|
|
|
|
elseif event == 'PLAYERBANKSLOTS_CHANGED' then
|
|
|
|
|
local slot = ...
|
|
|
|
|
local bagID = (slot <= NUM_BANKGENERIC_SLOTS) and -1 or (slot - NUM_BANKGENERIC_SLOTS)
|
|
|
|
|
|
|
|
|
|
if bagID == -1 then
|
|
|
|
|
BI:UpdateBagSlots(frame, -1)
|
|
|
|
|
end
|
|
|
|
|
elseif event == 'EQUIPMENT_SETS_CHANGED' then
|
|
|
|
|
BI:UpdateAllBagSlots()
|
|
|
|
|
elseif event == 'BAG_UPDATE_DELAYED' and (ElvUI_BankContainerFrame:IsShown() or ElvUI_ContainerFrame:IsShown()) then
|
|
|
|
|
BI:UpdateAllBagSlots()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
hooksecurefunc(B, 'OnEvent', function(frame, event, ...)
|
|
|
|
|
if not BI.db.enable then return end
|
|
|
|
|
BI:OnEventHook(frame, event, ...)
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
function BI:ToggleSettings()
|
|
|
|
|
if BI.db.enable then
|
|
|
|
|
BI:RegisterEvent('EQUIPMENT_SETS_CHANGED', function(event)
|
|
|
|
|
BI:OnEventHook(nil, event)
|
|
|
|
|
end)
|
|
|
|
|
BI:RegisterEvent('BAG_UPDATE_DELAYED', function(event)
|
|
|
|
|
BI:OnEventHook(nil, event)
|
|
|
|
|
end)
|
|
|
|
|
else
|
|
|
|
|
BI:UnregisterEvent('EQUIPMENT_SETS_CHANGED')
|
|
|
|
|
BI:UnregisterEvent('BAG_UPDATE_DELAYED')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
BI:UpdateAllBagSlots()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function BI:Initialize()
|
|
|
|
|
if not SLE.initialized or not E.private.bags.enable then return end
|
|
|
|
|
BI.db = E.db.sle.bags.equipmentmanager
|
|
|
|
|
|
|
|
|
|
--* May need to add these, just a note to check these if any weird reports of shit not updating as expected
|
|
|
|
|
-- EQUIPMENT_SWAP_FINISHED
|
|
|
|
|
-- PLAYER_EQUIPMENT_CHANGED
|
|
|
|
|
|
|
|
|
|
ConstructBagIcons()
|
|
|
|
|
function BI:ForUpdateAll()
|
|
|
|
|
BI.db = E.db.sle.bags.equipmentmanager
|
|
|
|
|
BI:UpdateBagSettings()
|
|
|
|
|
BI:ToggleSettings()
|
|
|
|
|
end
|
|
|
|
|
BI:ForUpdateAll()
|
|
|
|
|
|
|
|
|
|
BI.bankFirstOpen = false
|
|
|
|
|
BI:RegisterEvent('BANKFRAME_OPENED', function()
|
|
|
|
|
-- Update all bag slots on initial bank open so the bank has the icons on them
|
|
|
|
|
if not BI.bankFirstOpen or not BI.db.enable then
|
|
|
|
|
BI.bankFirstOpen = true
|
|
|
|
|
BI:UpdateAllBagSlots()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
SLE:RegisterModule(BI:GetName())
|