initial commit
This commit is contained in:
138
Modules/UnitFrames/Elements/Portrait.lua
Normal file
138
Modules/UnitFrames/Elements/Portrait.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local UF = E:GetModule('UnitFrames');
|
||||
|
||||
local rad = rad
|
||||
local unpack = unpack
|
||||
local select = select
|
||||
local UnitClass = UnitClass
|
||||
local CreateFrame = CreateFrame
|
||||
local CLASS_ICON_TCOORDS = CLASS_ICON_TCOORDS
|
||||
local classIcon = [[Interface\WorldStateFrame\Icons-Classes]]
|
||||
|
||||
function UF:Construct_Portrait(frame, type)
|
||||
local portrait
|
||||
|
||||
if type == 'texture' then
|
||||
local backdrop = CreateFrame('Frame', nil, frame, 'BackdropTemplate')
|
||||
portrait = frame:CreateTexture(nil, 'OVERLAY')
|
||||
portrait:SetTexCoord(0.15, 0.85, 0.15, 0.85)
|
||||
backdrop:SetOutside(portrait)
|
||||
backdrop:SetFrameLevel(frame:GetFrameLevel())
|
||||
backdrop:SetTemplate()
|
||||
portrait.backdrop = backdrop
|
||||
else
|
||||
portrait = CreateFrame('PlayerModel', nil, frame)
|
||||
portrait:CreateBackdrop(nil, nil, nil, nil, true)
|
||||
end
|
||||
|
||||
portrait.PostUpdate = self.PortraitUpdate
|
||||
|
||||
return portrait
|
||||
end
|
||||
|
||||
function UF:Configure_Portrait(frame)
|
||||
local last = frame.Portrait
|
||||
if last then
|
||||
last:Hide()
|
||||
last.backdrop:Hide()
|
||||
end
|
||||
|
||||
local db = frame.db
|
||||
local portrait = (db.portrait.style == '3D' and frame.Portrait3D) or frame.Portrait2D
|
||||
portrait.db = db.portrait
|
||||
frame.Portrait = portrait
|
||||
|
||||
if portrait.db.style == 'Class' then
|
||||
portrait:SetTexture(classIcon)
|
||||
portrait.customTexture = classIcon
|
||||
elseif portrait.db.style == '2D' then
|
||||
portrait:SetTexCoord(0.15, 0.85, 0.15, 0.85)
|
||||
portrait.customTexture = nil
|
||||
end
|
||||
|
||||
if frame.USE_PORTRAIT then
|
||||
if not frame:IsElementEnabled('Portrait') then
|
||||
frame:EnableElement('Portrait')
|
||||
end
|
||||
|
||||
portrait:Show()
|
||||
portrait:ClearAllPoints()
|
||||
portrait.backdrop:ClearAllPoints()
|
||||
|
||||
if portrait.db.style == '3D' then
|
||||
portrait:SetFrameLevel(frame.Health:GetFrameLevel())
|
||||
else
|
||||
portrait:SetParent(frame.USE_PORTRAIT_OVERLAY and frame.Health or frame)
|
||||
end
|
||||
|
||||
if frame.USE_PORTRAIT_OVERLAY then
|
||||
portrait:SetAlpha(portrait.db.overlayAlpha)
|
||||
portrait.backdrop:Hide()
|
||||
|
||||
if portrait.db.fullOverlay then
|
||||
portrait:SetAllPoints(frame.Health)
|
||||
else
|
||||
local healthTex = frame.Health:GetStatusBarTexture()
|
||||
if db.health.reverseFill then
|
||||
portrait:Point('TOPLEFT', healthTex, 'TOPLEFT')
|
||||
portrait:Point('BOTTOMLEFT', healthTex, 'BOTTOMLEFT')
|
||||
portrait:Point('BOTTOMRIGHT', frame.Health, 'BOTTOMRIGHT')
|
||||
else
|
||||
portrait:Point('TOPLEFT', frame.Health, 'TOPLEFT')
|
||||
portrait:Point('BOTTOMRIGHT', healthTex, 'BOTTOMRIGHT')
|
||||
portrait:Point('BOTTOMLEFT', healthTex, 'BOTTOMLEFT')
|
||||
end
|
||||
end
|
||||
else
|
||||
portrait:SetAlpha(1)
|
||||
portrait.backdrop:Show()
|
||||
portrait:SetInside(portrait.backdrop, UF.BORDER)
|
||||
|
||||
if frame.ORIENTATION == 'LEFT' then
|
||||
portrait.backdrop:Point('TOPLEFT', frame, 'TOPLEFT', UF.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+UF.SPACING) or -UF.SPACING)
|
||||
|
||||
if frame.USE_MINI_POWERBAR or frame.USE_POWERBAR_OFFSET or not frame.USE_POWERBAR or frame.USE_INSET_POWERBAR or frame.POWERBAR_DETACHED then
|
||||
portrait.backdrop:Point('BOTTOMRIGHT', frame.Health.backdrop, 'BOTTOMLEFT', UF.BORDER - UF.SPACING*3, 0)
|
||||
else
|
||||
portrait.backdrop:Point('BOTTOMRIGHT', frame.Power.backdrop, 'BOTTOMLEFT', UF.BORDER - UF.SPACING*3, 0)
|
||||
end
|
||||
elseif frame.ORIENTATION == 'RIGHT' then
|
||||
portrait.backdrop:Point('TOPRIGHT', frame, 'TOPRIGHT', -UF.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+UF.SPACING) or -UF.SPACING)
|
||||
|
||||
if frame.USE_MINI_POWERBAR or frame.USE_POWERBAR_OFFSET or not frame.USE_POWERBAR or frame.USE_INSET_POWERBAR or frame.POWERBAR_DETACHED then
|
||||
portrait.backdrop:Point('BOTTOMLEFT', frame.Health.backdrop, 'BOTTOMRIGHT', -UF.BORDER + UF.SPACING*3, 0)
|
||||
else
|
||||
portrait.backdrop:Point('BOTTOMLEFT', frame.Power.backdrop, 'BOTTOMRIGHT', -UF.BORDER + UF.SPACING*3, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if frame:IsElementEnabled('Portrait') then
|
||||
frame:DisableElement('Portrait')
|
||||
end
|
||||
|
||||
portrait.backdrop:Hide()
|
||||
portrait:Hide()
|
||||
end
|
||||
end
|
||||
|
||||
function UF:PortraitUpdate(unit, event)
|
||||
if self.stateChanged or event == 'ElvUI_UpdateAllElements' then
|
||||
local db = self.db
|
||||
if not db then return end
|
||||
|
||||
if self.playerModel then
|
||||
if self.state then
|
||||
self:SetCamDistanceScale(db.camDistanceScale)
|
||||
self:SetViewTranslation(db.xOffset * 100, db.yOffset * 100)
|
||||
self:SetRotation(rad(db.rotation))
|
||||
end
|
||||
|
||||
self:SetDesaturation(db.desaturation)
|
||||
self:SetPaused(db.paused)
|
||||
elseif db.style == 'Class' then
|
||||
local Class = select(2, UnitClass(unit))
|
||||
self:SetTexCoord(unpack(CLASS_ICON_TCOORDS[Class]))
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user