Files
ShagaTweaks/mods/unitframes-classportrait.lua
T
shaga 690c0b05ef Rename the addon to ShagaTweaks
The addon folder, toc files and title are now ShagaTweaks, and the modules
that load their own textures look them up in the ShagaTweaks folder.

The Lua namespace (ShaguTweaks) and the saved variables (ShaguTweaks_config,
ShaguTweaks_cache) keep their names, so existing settings carry over and
addons that integrate with ShaguTweaks keep working. /st also answers to
/shagatweaks.
2026-10-13 17:09:02 +00:00

81 lines
2.4 KiB
Lua

local _G = ShaguTweaks.GetGlobalEnv()
local T = ShaguTweaks.T
local addonpath
local tocs = { "", "-master", "-tbc", "-wotlk" }
for _, name in pairs(tocs) do
local current = string.format("ShagaTweaks%s", name)
local _, title = GetAddOnInfo(current)
if title then
addonpath = "Interface\\AddOns\\" .. current
break
end
end
local CLASS_ICON_TCOORDS = {
["WARRIOR"] = { 0, 0.25, 0, 0.25 },
["MAGE"] = { 0.25, 0.49609375, 0, 0.25 },
["ROGUE"] = { 0.49609375, 0.7421875, 0, 0.25 },
["DRUID"] = { 0.7421875, 0.98828125, 0, 0.25 },
["HUNTER"] = { 0, 0.25, 0.25, 0.5 },
["SHAMAN"] = { 0.25, 0.49609375, 0.25, 0.5 },
["PRIEST"] = { 0.49609375, 0.7421875, 0.25, 0.5 },
["WARLOCK"] = { 0.7421875, 0.98828125, 0.25, 0.5 },
["PALADIN"] = { 0, 0.25, 0.5, 0.75 },
["DEATHKNIGHT"] = { 0.25, .5, 0.5, .75 },
}
local module = ShaguTweaks:register({
title = T["Unit Frame Class Portraits"],
description = T["Replace unitframe portraits with class icons."],
expansions = { ["vanilla"] = true, ["tbc"] = true },
category = T["Unit Frames"],
enabled = nil,
})
local function UpdatePortraits(frame)
-- detect unit class or remove for non-player units
local _, class = UnitClass(frame.unit)
class = UnitIsPlayer(frame.unit) and class or nil
-- update class icon if possible
if class and frame.portrait then
local iconCoords = CLASS_ICON_TCOORDS[class]
frame.portrait:SetTexture(addonpath .. "\\img\\UI-Classes-Circles")
frame.portrait:SetTexCoord(unpack(iconCoords))
elseif not class and frame.portrait then
frame.portrait:SetTexCoord(0, 1, 0, 1)
end
end
module.enable = function(self)
-- overwrite portraits set by the game
local original = UnitFrame_Update
UnitFrame_Update = function(arg1, arg2, arg3)
original(arg1, arg2, arg3)
UpdatePortraits(this)
end
-- handle portrait update events
local events = CreateFrame("Frame")
events:RegisterEvent("PLAYER_ENTERING_WORLD")
events:RegisterEvent("UNIT_PORTRAIT_UPDATE")
events:SetScript("OnEvent", function()
-- reload player portrait
UpdatePortraits(PlayerFrame)
UpdatePortraits(TargetFrame)
-- reload party portraits
UpdatePortraits(PartyMemberFrame1)
UpdatePortraits(PartyMemberFrame2)
UpdatePortraits(PartyMemberFrame3)
UpdatePortraits(PartyMemberFrame4)
end)
-- update target of target
local tot = CreateFrame("Frame", nil, TargetFrame)
tot:SetScript("OnUpdate", function()
UpdatePortraits(TargetofTargetFrame)
end)
end