124 lines
3.9 KiB
Lua
124 lines
3.9 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 format = string.format
|
|
local gmatch = gmatch
|
|
local gsub = gsub
|
|
local match = string.match
|
|
local utf8lower = string.utf8lower
|
|
local utf8sub = string.utf8sub
|
|
--WoW API / Variables
|
|
local UNKNOWN = UNKNOWN
|
|
|
|
local function abbrev(name)
|
|
local letters, lastWord = "", match(name, ".+%s(.+)$")
|
|
if lastWord then
|
|
for word in gmatch(name, ".-%s") do
|
|
local firstLetter = utf8sub(gsub(word, "^[%s%p]*", ""), 1, 1)
|
|
if firstLetter ~= utf8lower(firstLetter) then
|
|
letters = format("%s%s. ", letters, firstLetter)
|
|
end
|
|
end
|
|
name = format("%s%s", letters, lastWord)
|
|
end
|
|
return name
|
|
end
|
|
|
|
function NP:Update_Name(frame, triggered)
|
|
if not triggered then
|
|
if not self.db.units[frame.UnitType].name.enable then return end
|
|
end
|
|
|
|
local name = frame.Name
|
|
local nameText = frame.UnitName or UNKNOWN
|
|
name:SetText(self.db.units[frame.UnitType].name.abbrev and abbrev(nameText) or nameText)
|
|
|
|
if not triggered then
|
|
name:ClearAllPoints()
|
|
if self.db.units[frame.UnitType].health.enable or (self.db.alwaysShowTargetHealth and frame.isTarget) then
|
|
name:SetJustifyH("LEFT")
|
|
name:SetPoint("BOTTOMLEFT", frame.Health, "TOPLEFT", 0, E.Border*2)
|
|
name:SetPoint("BOTTOMRIGHT", frame.Level, "BOTTOMLEFT")
|
|
else
|
|
name:SetJustifyH("CENTER")
|
|
name:SetPoint("TOP", frame)
|
|
end
|
|
end
|
|
|
|
local r, g, b = 1, 1, 1
|
|
local class = frame.UnitClass
|
|
|
|
local classColor, useClassColor
|
|
if class then
|
|
classColor = E.media.herocolor
|
|
useClassColor = self.db.units[frame.UnitType].name and self.db.units[frame.UnitType].name.useClassColor
|
|
end
|
|
|
|
if useClassColor and (frame.UnitType == "FRIENDLY_PLAYER" or frame.UnitType == "ENEMY_PLAYER") then
|
|
r, g, b = classColor.r, classColor.g, classColor.b
|
|
elseif triggered or (not self.db.units[frame.UnitType].health.enable and not frame.isTarget) then
|
|
local reactionType = frame.UnitReaction
|
|
if reactionType then
|
|
local db = self.db.colors
|
|
if reactionType == 4 then
|
|
r, g, b = db.reactions.neutral.r, db.reactions.neutral.g, db.reactions.neutral.b
|
|
elseif reactionType > 4 then
|
|
if frame.UnitType == "FRIENDLY_PLAYER" then
|
|
r, g, b = db.reactions.friendlyPlayer.r, db.reactions.friendlyPlayer.g, db.reactions.friendlyPlayer.b
|
|
else
|
|
r, g, b = db.reactions.good.r, db.reactions.good.g, db.reactions.good.b
|
|
end
|
|
else
|
|
r, g, b = db.reactions.bad.r, db.reactions.bad.g, db.reactions.bad.b
|
|
end
|
|
end
|
|
end
|
|
|
|
-- if for some reason the values failed just default to white
|
|
if not (r and g and b) then
|
|
r, g, b = 1, 1, 1
|
|
end
|
|
|
|
if triggered or (r ~= frame.Name.r or g ~= frame.Name.g or b ~= frame.Name.b) then
|
|
name:SetTextColor(r, g, b)
|
|
if not triggered then
|
|
frame.Name.r, frame.Name.g, frame.Name.b = r, g, b
|
|
end
|
|
end
|
|
|
|
if self.db.nameColoredGlow then
|
|
name.NameOnlyGlow:SetVertexColor(r - 0.1, g - 0.1, b - 0.1, 1)
|
|
else
|
|
name.NameOnlyGlow:SetVertexColor(self.db.colors.glowColor.r, self.db.colors.glowColor.g, self.db.colors.glowColor.b, self.db.colors.glowColor.a)
|
|
end
|
|
end
|
|
|
|
function NP:Configure_Name(frame)
|
|
local db = self.db.units[frame.UnitType].name
|
|
frame.Name:FontTemplate(LSM:Fetch("font", db.font), db.fontSize, db.fontOutline)
|
|
end
|
|
|
|
function NP:Configure_NameOnlyGlow(frame)
|
|
local name = frame.Name
|
|
name.NameOnlyGlow:ClearAllPoints()
|
|
name.NameOnlyGlow:SetPoint("TOPLEFT", frame.IconOnlyChanged and frame.IconFrame or name, -20, 8)
|
|
name.NameOnlyGlow:SetPoint("BOTTOMRIGHT", frame.IconOnlyChanged and frame.IconFrame or name, 20, -8)
|
|
end
|
|
|
|
function NP:Construct_Name(frame)
|
|
local name = frame:CreateFontString(nil, "OVERLAY")
|
|
name:SetJustifyV("BOTTOM")
|
|
name:SetWordWrap(false)
|
|
|
|
local g = frame:CreateTexture(nil, "BACKGROUND")
|
|
g:SetTexture(E.Media.Textures.Spark)
|
|
g:Hide()
|
|
g:SetPoint("TOPLEFT", name, -20, 8)
|
|
g:SetPoint("BOTTOMRIGHT", name, 20, -8)
|
|
|
|
name.NameOnlyGlow = g
|
|
|
|
return name
|
|
end |