139 lines
5.3 KiB
Lua
139 lines
5.3 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local UF = E:GetModule("UnitFrames")
|
|
|
|
--Lua functions
|
|
--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)
|
|
backdrop:SetOutside(portrait)
|
|
backdrop:SetFrameLevel(frame:GetFrameLevel())
|
|
backdrop:SetTemplate("Default")
|
|
portrait.backdrop = backdrop
|
|
else
|
|
portrait = CreateFrame("PlayerModel", nil, frame)
|
|
portrait:CreateBackdrop("Default", nil, nil, self.thinBorders, true)
|
|
end
|
|
|
|
portrait.PostUpdate = self.PortraitUpdate
|
|
|
|
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() + 1)
|
|
else
|
|
portrait:SetParent(frame.Health)
|
|
end
|
|
|
|
portrait:SetAlpha(db.portrait.overlayAlpha)
|
|
if not dontHide then
|
|
portrait:Show()
|
|
end
|
|
portrait.backdrop:Hide()
|
|
|
|
portrait:ClearAllPoints()
|
|
if db.portrait.fullOverlay then
|
|
portrait:SetAllPoints(frame.Health)
|
|
else
|
|
local statusBarTex = frame.Health:GetStatusBarTexture()
|
|
if frame.Health:GetOrientation() == "VERTICAL" then
|
|
portrait:SetPoint("BOTTOMLEFT", frame.Health)
|
|
portrait:SetPoint("TOPRIGHT", statusBarTex, "TOPRIGHT")
|
|
else
|
|
portrait:SetPoint("TOPLEFT", frame.Health)
|
|
portrait:SetPoint("BOTTOMRIGHT", statusBarTex, "BOTTOMRIGHT")
|
|
end
|
|
end
|
|
else
|
|
portrait:ClearAllPoints()
|
|
portrait:SetAllPoints()
|
|
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
|
|
portrait.backdrop:Point("TOPLEFT", frame, "TOPLEFT", frame.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+frame.SPACING) or -frame.SPACING)
|
|
|
|
if frame.USE_RAGEBAR and not frame.USE_INSET_RAGEBAR and not frame.RAGEBAR_DETACHED and not frame.USE_MINI_RAGEBAR and not frame.USE_RAGEBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMRIGHT", frame.Rage.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
|
|
elseif frame.USE_ENERGYBAR and not frame.USE_INSET_ENERGYBAR and not frame.ENERGYBAR_DETACHED and not frame.USE_MINI_ENERGYBAR and not frame.USE_ENERGYBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMRIGHT", frame.Energy.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
|
|
elseif frame.USE_POWERBAR and not frame.USE_INSET_POWERBAR and not frame.POWERBAR_DETACHED and not frame.USE_MINI_POWERBAR and not frame.USE_POWERBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMRIGHT", frame.Power.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
|
|
else
|
|
portrait.backdrop:Point("BOTTOMRIGHT", frame.Health.backdrop, "BOTTOMLEFT", frame.BORDER - frame.SPACING*3, 0)
|
|
end
|
|
elseif frame.ORIENTATION == "RIGHT" then
|
|
portrait.backdrop:Point("TOPRIGHT", frame, "TOPRIGHT", -frame.SPACING, frame.USE_MINI_CLASSBAR and -(frame.CLASSBAR_YOFFSET+frame.SPACING) or -frame.SPACING)
|
|
|
|
if frame.USE_RAGEBAR and not frame.USE_INSET_RAGEBAR and not frame.RAGEBAR_DETACHED and not frame.USE_MINI_RAGEBAR and not frame.USE_RAGEBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMLEFT", frame.Rage.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
|
|
elseif frame.USE_ENERGYBAR and not frame.USE_INSET_ENERGYBAR and not frame.ENERGYBAR_DETACHED and not frame.USE_MINI_ENERGYBAR and not frame.USE_ENERGYBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMLEFT", frame.Energy.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
|
|
elseif frame.USE_POWERBAR and not frame.USE_INSET_POWERBAR and not frame.POWERBAR_DETACHED and not frame.USE_MINI_POWERBAR and not frame.USE_POWERBAR_OFFSET then
|
|
portrait.backdrop:Point("BOTTOMLEFT", frame.Power.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
|
|
else
|
|
portrait.backdrop:Point("BOTTOMLEFT", frame.Health.backdrop, "BOTTOMRIGHT", -frame.BORDER + frame.SPACING*3, 0)
|
|
end
|
|
end
|
|
|
|
portrait:SetInside(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(db.portrait.overlayAlpha)
|
|
else
|
|
self:SetAlpha(1)
|
|
end
|
|
end |