initial commit
This commit is contained in:
80
Modules/UnitFrames/Elements/RoleIcons.lua
Normal file
80
Modules/UnitFrames/Elements/RoleIcons.lua
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
Reference in New Issue
Block a user