Files
ElvUIModernized/ElvUI/Modules/UnitFrames/Elements/Portrait.lua
T
Crum 93f5762a44 big update Unitframes
update #56
fix #38
fix #69
2018-12-07 23:27:23 -06:00

118 lines
3.9 KiB
Lua

local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local UF = E:GetModule("UnitFrames");
--WoW API / Variables
local CreateFrame = CreateFrame
function UF:Construct_Portrait(frame, type)
local portrait
if type == "texture" then
local backdrop = CreateFrame("Frame", nil, frame)
portrait = frame:CreateTexture(nil, "OVERLAY")
portrait:SetTexCoord(0.15, 0.85, 0.15, 0.85)
E:SetOutside(backdrop, portrait)
backdrop:SetFrameLevel(frame:GetFrameLevel())
E:SetTemplate(backdrop, "Default")
portrait.backdrop = backdrop
else
portrait = CreateFrame("PlayerModel", nil, frame)
E:CreateBackdrop(portrait, "Default", nil, nil, self.thinBorders, true)
end
portrait.PostUpdate = self.PortraitUpdate
portrait.overlay = CreateFrame("Frame", nil, frame)
portrait.overlay:SetFrameLevel(frame.Health:GetFrameLevel() + 5) --Set to "frame.Health:GetFrameLevel()" if you don"t want portrait cut off.
return portrait
end
function UF:Configure_Portrait(frame, dontHide)
if not frame.VARIABLES_SET then return end
local db = frame.db
if frame.Portrait and not dontHide then
frame.Portrait:Hide()
frame.Portrait:ClearAllPoints()
frame.Portrait.backdrop:Hide()
end
frame.Portrait = db.portrait.style == "2D" and frame.Portrait2D or frame.Portrait3D
local portrait = frame.Portrait
if frame.USE_PORTRAIT then
if not frame:IsElementEnabled("Portrait") then
frame:EnableElement("Portrait")
end
local color = E.db.unitframe.colors.borderColor
portrait.backdrop:SetBackdropBorderColor(color.r, color.g, color.b)
portrait:ClearAllPoints()
portrait.backdrop:ClearAllPoints()
if frame.USE_PORTRAIT_OVERLAY then
if db.portrait.style == "3D" then
portrait:SetFrameLevel(frame.Health:GetFrameLevel())
else
portrait:SetParent(frame.Health)
end
portrait:SetAllPoints(frame.Health)
portrait:SetAlpha(0.35)
if not dontHide then
portrait:Show()
end
portrait.backdrop:Hide()
else
portrait:SetAlpha(1)
if not dontHide then
portrait:Show()
end
portrait.backdrop:Show()
if db.portrait.style == "3D" then
portrait:SetFrameLevel(frame.Health:GetFrameLevel() - 4) --Make sure portrait is behind Health and Power
else
portrait:SetParent(frame)
end
if frame.ORIENTATION == "LEFT" then
E:Point(portrait.backdrop, "TOPLEFT", frame, "TOPLEFT", frame.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+frame.SPACING) or -frame.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
E:Point(portrait.backdrop, "BOTTOMRIGHT", frame.Health.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
else
E:Point(portrait.backdrop, "BOTTOMRIGHT", frame.Power.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
end
elseif frame.ORIENTATION == "RIGHT" then
E:Point(portrait.backdrop, "TOPRIGHT", frame, "TOPRIGHT", -frame.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+frame.SPACING) or -frame.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
E:Point(portrait.backdrop, "BOTTOMLEFT", frame.Health.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
else
E:Point(portrait.backdrop, "BOTTOMLEFT", frame.Power.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
end
end
E:SetInside(portrait, portrait.backdrop, frame.BORDER)
end
else
if frame:IsElementEnabled("Portrait") then
frame:DisableElement("Portrait")
portrait:Hide()
portrait.backdrop:Hide()
end
end
end
function UF:PortraitUpdate()
local db = self:GetParent().db
if not db then return end
local portrait = db.portrait
if portrait.enable and self:GetParent().USE_PORTRAIT_OVERLAY then
self:SetAlpha(0)
self:SetAlpha(0.35)
else
self:SetAlpha(1)
end
end