83 lines
2.7 KiB
Lua
83 lines
2.7 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local UF = E:GetModule("UnitFrames")
|
|
|
|
--Lua functions
|
|
local random = math.random
|
|
--WoW API / Variables
|
|
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
|
|
|
|
local 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 (db and not db.enable) then
|
|
lfdrole:Hide()
|
|
return
|
|
end
|
|
|
|
local isTank, isHealer, isDamage = UnitGroupRolesAssigned(self.unit)
|
|
local role = isTank and "TANK" or isHealer and "HEALER" or isDamage and "DAMAGER" or "NONE"
|
|
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(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 |