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.
111 lines
5.5 KiB
111 lines
5.5 KiB
local _,rematch = ...
|
|
local L = rematch.localization
|
|
local C = rematch.constants
|
|
rematch.badges = {}
|
|
|
|
local badges = {
|
|
marker1 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0,0.125,0.25,0.375}, -- star
|
|
marker2 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.125,0.25,0.25,0.375}, -- circle
|
|
marker3 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.25,0.375,0.25,0.375}, -- diamond
|
|
marker4 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.375,0.5,0.25,0.375}, -- triangle
|
|
marker5 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.5,0.625,0.25,0.375}, -- moon
|
|
marker6 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.625,0.75,0.25,0.375}, -- square
|
|
marker7 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.75,0.875,0.25,0.375}, -- cross
|
|
marker8 = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.875,1,0.25,0.375}, -- skull
|
|
leveling = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.375,0.5,0.125,0.25}, -- leveling blue arrow
|
|
team = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.5,0.625,0.125,0.25}, -- team green paw
|
|
preferences ={"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.75,0.875,0.125,0.25}, -- preferences blue gear
|
|
targets = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.375,0.5,0.375,0.5}, -- target
|
|
new = {"Interface\\AddOns\\Rematch\\textures\\badges-borderless",0.625,0.75,0.75,0.875}, -- new (wrapped/stickied pet)
|
|
}
|
|
|
|
local extendedBadges = {} -- for adding badges used by outside addons
|
|
local badgeArrays = {} -- indexed by the parentArray, the number of badges used
|
|
|
|
-- clears the badges from the given array of textures
|
|
function rematch.badges:ClearBadges(array)
|
|
badgeArrays[array] = 0
|
|
for _,badge in ipairs(array) do
|
|
badge:Hide()
|
|
end
|
|
end
|
|
|
|
-- adds a named badge ("leveling", "marker3", etc.) to the given array of textures (parentArray of badges)
|
|
-- xdir should be -1 for badges that go right to left, 1 otherwise
|
|
function rematch.badges:AddBadge(array,badge,anchorPoint,relativeTo,relativePoint,xoff,yoff,xdir)
|
|
assert(badges[badge],"Badge "..(badge or "nil").." doesn't exist")
|
|
if not badgeArrays[array] then
|
|
badgeArrays[array] = 1 -- not seen this one before, start at 1
|
|
else
|
|
badgeArrays[array] = badgeArrays[array] + 1 -- otherwise increment to next one
|
|
end
|
|
local index = badgeArrays[array]
|
|
if not array[index] then
|
|
array[index] = array[1]:GetParent():CreateTexture(nil,"ARTWORK")
|
|
array[index]:SetSize(C.BADGE_SIZE,C.BADGE_SIZE)
|
|
end
|
|
array[index]:ClearAllPoints()
|
|
array[index]:SetPoint(anchorPoint,relativeTo,relativePoint,(C.BADGE_SIZE+1)*(index-1)*xdir+xoff,yoff)
|
|
array[index]:SetTexture(badges[badge][1])
|
|
array[index]:SetTexCoord(badges[badge][2],badges[badge][3],badges[badge][4],badges[badge][5])
|
|
array[index]:Show()
|
|
return array[index]
|
|
end
|
|
|
|
|
|
-- RegisterBadge is for outside addons to add their own badges to lists without modifying built-in badges
|
|
-- list can be "pets", "teams", "targets" for the list to put the badge on
|
|
-- badge should be a name to reference the badge (must not already be used by another badge)
|
|
-- icon is a patch/fileid of the icon
|
|
-- iconCoords is either nil for 0,1,0,1 texcoords or a {left,right,top,bottom} ordered list
|
|
-- callback is a function that takes a petID, teamID or targetID and should return true if the badge should show
|
|
function rematch.badges:RegisterBadge(list,badge,icon,iconCoords,callback)
|
|
assert(list=="pets" or list=="teams" or list=="targets","Only pets, teams or targets supported for extended badges")
|
|
assert(type(badge)=="string","Invalid badge name \""..(badge or "nil").."\"")
|
|
assert(type(callback)=="function","ExtendBadges requires a callback")
|
|
|
|
-- a badge icon can be reused for multiple lists but can't be modified once it's defined
|
|
if badge and not badges[badge] then
|
|
icon = icon or C.UNKNOWN_ICON
|
|
if iconCoords and #iconCoords==4 then
|
|
badges[badge] = {icon,unpack(iconCoords)}
|
|
else
|
|
badges[badge] = {icon,0,1,0,1}
|
|
end
|
|
end
|
|
|
|
if not extendedBadges[list] then
|
|
extendedBadges[list] = {}
|
|
end
|
|
-- in case the same badge is being re-defined, remove any of the given badges from the list if found
|
|
rematch.badges:UnregisterBadge(list,badge)
|
|
tinsert(extendedBadges[list],{badge,callback}) -- ordered so badges appear in order they were registered
|
|
end
|
|
|
|
-- removes a registered badge
|
|
function rematch.badges:UnregisterBadge(list,badge)
|
|
if extendedBadges[list] then
|
|
for i=#extendedBadges[list],1,-1 do
|
|
if extendedBadges[list][i][1]==badge then
|
|
tremove(extendedBadges[list],i)
|
|
end
|
|
end
|
|
if rematch.frame:IsVisible() then
|
|
rematch.frame:Update()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- called by the pet, team and target listbutton fills to add any extended badges; returns the number of badges placed
|
|
function rematch.badges:AddExtendedBadges(id,list,array,anchorPoint,relativeTo,relativePoint,xoff,yoff,xdir)
|
|
local count = 0
|
|
if extendedBadges[list] then
|
|
for _,info in ipairs(extendedBadges[list]) do
|
|
if info[2](id) then
|
|
rematch.badges:AddBadge(array,info[1],anchorPoint,relativeTo,relativePoint,xoff,yoff,xdir)
|
|
count = count + 1
|
|
end
|
|
end
|
|
end
|
|
return count
|
|
end
|