Files
Nanami-UI/Units/ToT.lua
2026-03-16 13:48:46 +08:00

86 lines
2.9 KiB
Lua

SFrames.ToT = {}
local _A = SFrames.ActiveTheme
function SFrames.ToT:Initialize()
local f = CreateFrame("Button", "SFramesToTFrame", UIParent)
f:SetWidth(120)
f:SetHeight(25)
f:SetPoint("BOTTOMLEFT", SFramesTargetFrame, "BOTTOMRIGHT", 5, 0)
f:RegisterForClicks("LeftButtonUp", "RightButtonUp")
f:SetScript("OnClick", function()
if arg1 == "LeftButton" then
TargetUnit("targettarget")
end
end)
-- Health Bar
f.health = SFrames:CreateStatusBar(f, "SFramesToTHealth")
f.health:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1)
f.health:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1)
local hbg = CreateFrame("Frame", nil, f)
hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1)
hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1)
hbg:SetFrameLevel(f:GetFrameLevel() - 1)
SFrames:CreateUnitBackdrop(hbg)
f.health.bg = f.health:CreateTexture(nil, "BACKGROUND")
f.health.bg:SetAllPoints()
f.health.bg:SetTexture(SFrames:GetTexture())
f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1)
f.nameText = SFrames:CreateFontString(f.health, 10, "CENTER")
f.nameText:SetPoint("CENTER", f.health, "CENTER", 0, 0)
self.frame = f
f:Hide()
-- Update loop since targettarget changes don't fire precise events in Vanilla
self.updater = CreateFrame("Frame")
self.updater.timer = 0
self.updater:SetScript("OnUpdate", function()
this.timer = this.timer + arg1
if this.timer >= 0.2 then
SFrames.ToT:Update()
this.timer = 0
end
end)
end
function SFrames.ToT:Update()
if UnitExists("targettarget") then
self.frame:Show()
local hp = UnitHealth("targettarget")
local maxHp = UnitHealthMax("targettarget")
self.frame.health:SetMinMaxValues(0, maxHp)
self.frame.health:SetValue(hp)
self.frame.nameText:SetText(UnitName("targettarget"))
if UnitIsPlayer("targettarget") then
local _, class = UnitClass("targettarget")
local color = SFrames.Config.colors.class[class]
if color then
self.frame.health:SetStatusBarColor(color.r, color.g, color.b)
self.frame.nameText:SetTextColor(color.r, color.g, color.b)
else
self.frame.health:SetStatusBarColor(0, 1, 0)
self.frame.nameText:SetTextColor(1, 1, 1)
end
else
local r, g, b = 0.85, 0.77, 0.36 -- Neutral
if UnitIsEnemy("player", "targettarget") then
r, g, b = 0.78, 0.25, 0.25 -- Enemy
elseif UnitIsFriend("player", "targettarget") then
r, g, b = 0.33, 0.59, 0.33 -- Friend
end
self.frame.health:SetStatusBarColor(r, g, b)
self.frame.nameText:SetTextColor(r, g, b)
end
else
self.frame:Hide()
end
end