Files
Andrew6810 60ef8a38af init
2022-10-21 07:09:01 -07:00

193 lines
5.7 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local NP = E:GetModule("NamePlates")
local LSM = E.Libs.LSM
--Lua functions
local ipairs = ipairs
--WoW API / Variables
local CreateFrame = CreateFrame
--[[
Target Glow Style Option Variables
style1 - Border
style2 - Background
style3 - Top Arrow Only
style4 - Side Arrows Only
style5 - Border + Top Arrow
style6 - Background + Top Arrow
style7 - Border + Side Arrows
style8 - Background + Side Arrows
]]
function NP:Update_Glow(frame)
local showIndicator
if frame.isTarget then
showIndicator = 1
elseif self.db.lowHealthThreshold > 0 then
local health = frame.oldHealthBar:GetValue()
local _, maxHealth = frame.oldHealthBar:GetMinMaxValues()
local perc = health / maxHealth
if health > 1 and perc <= self.db.lowHealthThreshold then
if perc <= self.db.lowHealthThreshold / 2 then
showIndicator = 2
else
showIndicator = 3
end
end
end
local glowStyle = self.db.units.TARGET.glowStyle
local healthIsShown = frame.Health:IsShown()
if not healthIsShown then
if glowStyle == "style1" then
glowStyle = "none"
elseif glowStyle == "style5" then
glowStyle = "style3"
elseif glowStyle == "style7" then
glowStyle = "style4"
end
end
if showIndicator and glowStyle ~= "none" then
local r, g, b
if showIndicator == 1 then
local color = self.db.colors.glowColor
r, g, b = color.r, color.g, color.b
elseif showIndicator == 2 then
r, g, b = 1, 0, 0
else
r, g, b = 1, 1, 0
end
-- Indicators
frame.TopIndicator:SetVertexColor(r, g, b)
frame.LeftIndicator:SetVertexColor(r, g, b)
frame.RightIndicator:SetVertexColor(r, g, b)
if glowStyle == "style3" or glowStyle == "style5" or glowStyle == "style6" then
frame.LeftIndicator:Hide()
frame.RightIndicator:Hide()
if healthIsShown then
frame.TopIndicator:Show()
end
elseif glowStyle == "style4" or glowStyle == "style7" or glowStyle == "style8" then
frame.TopIndicator:Hide()
if healthIsShown then
frame.LeftIndicator:Show()
frame.RightIndicator:Show()
end
end
-- Spark / Shadow
frame.Shadow:SetBackdropBorderColor(r, g, b)
frame.Spark:SetVertexColor(r, g, b)
if glowStyle == "style1" or glowStyle == "style5" or glowStyle == "style7" then
frame.Spark:Hide()
frame.Shadow:Show()
elseif glowStyle == "style2" or glowStyle == "style6" or glowStyle == "style8" then
frame.Shadow:Hide()
frame.Spark:Show()
end
else
frame.TopIndicator:Hide()
frame.LeftIndicator:Hide()
frame.RightIndicator:Hide()
frame.Shadow:Hide()
frame.Spark:Hide()
end
end
function NP:Configure_Glow(frame)
local glowStyle = self.db.units.TARGET.glowStyle
local healthIsShown = frame.Health:IsShown()
if not healthIsShown then
if glowStyle == "style1" then
glowStyle = "none"
elseif glowStyle == "style5" then
glowStyle = "style3"
elseif glowStyle == "style7" then
glowStyle = "style4"
end
end
if glowStyle ~= "none" then
local color = self.db.colors.glowColor
local r, g, b, a = color.r, color.g, color.b, color.a
-- Indicators
frame.LeftIndicator:SetVertexColor(r, g, b)
frame.RightIndicator:SetVertexColor(r, g, b)
frame.TopIndicator:SetVertexColor(r, g, b)
frame.TopIndicator:ClearAllPoints()
frame.LeftIndicator:ClearAllPoints()
frame.RightIndicator:ClearAllPoints()
if glowStyle == "style3" or glowStyle == "style5" or glowStyle == "style6" then
if healthIsShown then
frame.TopIndicator:SetPoint("BOTTOM", frame.Health, "TOP", 0, 6)
else
frame.TopIndicator:SetPoint("BOTTOM", frame.Name, "TOP", 0, 8)
end
elseif glowStyle == "style4" or glowStyle == "style7" or glowStyle == "style8" then
if healthIsShown then
frame.LeftIndicator:SetPoint("LEFT", frame.Health, "RIGHT", -3, 0)
frame.RightIndicator:SetPoint("RIGHT", frame.Health, "LEFT", 3, 0)
else
frame.LeftIndicator:SetPoint("LEFT", frame.Name, "RIGHT", 20, 0)
frame.RightIndicator:SetPoint("RIGHT", frame.Name, "LEFT", -20, 0)
end
end
-- Spark / Shadow
frame.Shadow:SetBackdropBorderColor(r, g, b)
frame.Shadow:SetAlpha(a)
frame.Spark:SetVertexColor(r, g, b, a)
frame.Spark:ClearAllPoints()
if glowStyle == "style1" or glowStyle == "style5" or glowStyle == "style7" then
frame.Shadow:SetOutside(frame.Health, E:Scale(E.PixelMode and 6 or 8), E:Scale(E.PixelMode and 6 or 8))
elseif glowStyle == "style2" or glowStyle == "style6" or glowStyle == "style8" then
if healthIsShown then
local size = E.Border + 14
frame.Spark:SetPoint("TOPLEFT", frame.Health, -(size * 2), size)
frame.Spark:SetPoint("BOTTOMRIGHT", frame.Health, (size * 2), -size)
else
local nameIsShown = frame.Name:IsShown()
frame.Spark:SetPoint("TOPLEFT", nameIsShown and frame.Name or frame.IconFrame, -20, 8)
frame.Spark:SetPoint("BOTTOMRIGHT", nameIsShown and frame.Name or frame.IconFrame, 20, -8)
end
end
end
end
local Textures = {"Spark", "TopIndicator", "LeftIndicator", "RightIndicator"}
function NP:Construct_Glow(frame)
frame.Shadow = CreateFrame("Frame", "$parentGlow", frame)
frame.Shadow:SetFrameLevel(frame.Health:GetFrameLevel() - 1)
frame.Shadow:SetBackdrop({edgeFile = LSM:Fetch("border", "ElvUI GlowBorder"), edgeSize = E:Scale(6)})
frame.Shadow:Hide()
for _, object in ipairs(Textures) do
frame[object] = frame:CreateTexture(nil, "BACKGROUND")
frame[object]:Hide()
end
frame.Spark:SetTexture(E.Media.Textures.Spark)
frame.TopIndicator:SetTexture(E.Media.Textures.ArrowUp)
frame.TopIndicator:SetRotation(3.14)
frame.LeftIndicator:SetTexture(E.Media.Textures.ArrowUp)
frame.LeftIndicator:SetRotation(1.57)
frame.RightIndicator:SetTexture(E.Media.Textures.ArrowUp)
frame.RightIndicator:SetRotation(-1.57)
end