ElvUI/Modules/UnitFrames/Elements/RoleIcons.lua

81 lines
2.5 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local UF = E:GetModule('UnitFrames');
local random = random
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
local UnitIsConnected = UnitIsConnected
function UF:Construct_RoleIcon(frame)
local tex = frame.RaisedElementParent.TextureParent:CreateTexture(nil, 'ARTWORK')
tex:Size(17)
tex:Point('BOTTOM', frame.Health, 'BOTTOM', 0, 2)
tex.Override = UF.UpdateRoleIcon
frame:RegisterEvent('UNIT_CONNECTION', UF.UpdateRoleIcon)
return tex
end
UF.RoleIconTextures = {
TANK = E.Media.Textures.Tank,
HEALER = E.Media.Textures.Healer,
DAMAGER = E.Media.Textures.DPS
}
function UF:UpdateRoleIcon(event)
local lfdrole = self.GroupRoleIndicator
if not self.db then return; end
local db = self.db.roleIcon;
if not db or not db.enable then
lfdrole:Hide()
return
end
local role = UnitGroupRolesAssigned(self.unit)
if self.isForced and role == 'NONE' then
local rnd = random(1, 3)
role = rnd == 1 and 'TANK' or (rnd == 2 and 'HEALER' or (rnd == 3 and 'DAMAGER'))
end
local shouldHide = ((event == 'PLAYER_REGEN_DISABLED' and db.combatHide and true) or false)
if (self.isForced or UnitIsConnected(self.unit)) and ((role == 'DAMAGER' and db.damager) or (role == 'HEALER' and db.healer) or (role == 'TANK' and db.tank)) then
lfdrole:SetTexture(UF.RoleIconTextures[role])
if not shouldHide then
lfdrole:Show()
else
lfdrole:Hide()
end
else
lfdrole:Hide()
end
end
function UF:Configure_RoleIcon(frame)
local role = frame.GroupRoleIndicator
local db = frame.db
if db.roleIcon.enable then
frame:EnableElement('GroupRoleIndicator')
local attachPoint = self:GetObjectAnchorPoint(frame, db.roleIcon.attachTo)
role:ClearAllPoints()
role:Point(db.roleIcon.position, attachPoint, db.roleIcon.position, db.roleIcon.xOffset, db.roleIcon.yOffset)
role:Size(db.roleIcon.size)
if db.roleIcon.combatHide then
E:RegisterEventForObject('PLAYER_REGEN_ENABLED', frame, UF.UpdateRoleIcon)
E:RegisterEventForObject('PLAYER_REGEN_DISABLED', frame, UF.UpdateRoleIcon)
else
E:UnregisterEventForObject('PLAYER_REGEN_ENABLED', frame, UF.UpdateRoleIcon)
E:UnregisterEventForObject('PLAYER_REGEN_DISABLED', frame, UF.UpdateRoleIcon)
end
else
frame:DisableElement('GroupRoleIndicator')
role:Hide()
--Unregister combat hide events
E:UnregisterEventForObject('PLAYER_REGEN_ENABLED', frame, UF.UpdateRoleIcon)
E:UnregisterEventForObject('PLAYER_REGEN_DISABLED', frame, UF.UpdateRoleIcon)
end
end