v1.0.5 – Major debuff tracking improvements for large raids, including a reworked SuperWoW cast-based aura tracking system, safer resist handling, same-name enemy fixes and boss reset cleanup.
115 lines
3.0 KiB
Lua
115 lines
3.0 KiB
Lua
BNP = BNP or {}
|
|
|
|
local MIN_SCALE = 0.50
|
|
local MAX_SCALE = 1.50
|
|
local DEFAULT_SCALE = 1.00
|
|
|
|
local function Clamp(value)
|
|
if value < MIN_SCALE then return MIN_SCALE end
|
|
if value > MAX_SCALE then return MAX_SCALE end
|
|
return value
|
|
end
|
|
|
|
function BNP:GetNameplateScale()
|
|
BNP_DB = BNP_DB or {}
|
|
return Clamp(tonumber(BNP_DB.nameplateScale) or DEFAULT_SCALE)
|
|
end
|
|
|
|
local function EffectiveScale()
|
|
local uiScale = 1.0
|
|
if UIParent and UIParent.GetScale then
|
|
uiScale = UIParent:GetScale() or 1.0
|
|
end
|
|
return uiScale * BNP:GetNameplateScale()
|
|
end
|
|
|
|
local function EnsureScaleWrapper(plate)
|
|
if not plate or plate.BNPScaleWrapper then return end
|
|
|
|
local originalWidth = plate:GetWidth()
|
|
local originalHeight = plate:GetHeight()
|
|
|
|
local wrapper = CreateFrame("Frame", nil, plate)
|
|
wrapper:SetAllPoints(plate)
|
|
wrapper.plate = plate
|
|
wrapper.originalWidth = originalWidth
|
|
wrapper.originalHeight = originalHeight
|
|
|
|
plate.BNPScaleWrapper = wrapper
|
|
|
|
-- Match ShaguTweaks: move Blizzard nameplate visuals into a child frame.
|
|
-- Never SetScale() on the original WorldFrame nameplate itself, otherwise
|
|
-- its projected screen position shifts toward the unit's feet.
|
|
if plate.healthbar then
|
|
plate.healthbar:SetParent(wrapper)
|
|
plate.healthbar:SetFrameLevel(1)
|
|
end
|
|
|
|
local regions = { plate:GetRegions() }
|
|
local i, object
|
|
for i, object in pairs(regions) do
|
|
if object and object.SetParent then
|
|
object:SetParent(wrapper)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BNP:ApplyNameplateScale(plate)
|
|
if not plate then return end
|
|
EnsureScaleWrapper(plate)
|
|
|
|
local wrapper = plate.BNPScaleWrapper
|
|
if not wrapper then return end
|
|
|
|
local scale = EffectiveScale()
|
|
wrapper:SetScale(scale)
|
|
|
|
-- ShaguTweaks also adjusts the original frame bounds so Blizzard's world
|
|
-- positioning remains correct while the child visuals honor UI scale.
|
|
plate:SetWidth(wrapper.originalWidth * scale)
|
|
plate:SetHeight(wrapper.originalHeight * scale)
|
|
end
|
|
|
|
function BNP:ApplyNameplateScaleAll()
|
|
local plate
|
|
for plate in pairs(self.plates) do
|
|
self:ApplyNameplateScale(plate)
|
|
end
|
|
end
|
|
|
|
function BNP:SetNameplateScale(value)
|
|
value = tonumber(value)
|
|
if not value then
|
|
self:Print("Usage: /bnp scale 0.5-1.5")
|
|
return
|
|
end
|
|
|
|
value = Clamp(value)
|
|
BNP_DB = BNP_DB or {}
|
|
BNP_DB.nameplateScale = value
|
|
self:ApplyNameplateScaleAll()
|
|
|
|
self:Print("Nameplate scale multiplier set to " .. tostring(value) .. ".")
|
|
end
|
|
|
|
function BNP:ResetNameplateScale()
|
|
BNP_DB = BNP_DB or {}
|
|
BNP_DB.nameplateScale = DEFAULT_SCALE
|
|
self:ApplyNameplateScaleAll()
|
|
self:Print("Nameplate scale multiplier reset to 1.0 (Shagu/UI scale behavior).")
|
|
end
|
|
|
|
if BNP.libnameplate then
|
|
table.insert(BNP.libnameplate.OnInit, function(plate)
|
|
local current = plate or this
|
|
if not current then return end
|
|
BNP:ApplyNameplateScale(current)
|
|
end)
|
|
|
|
table.insert(BNP.libnameplate.OnShow, function(plate)
|
|
local current = plate or this
|
|
if not current then return end
|
|
BNP:ApplyNameplateScale(current)
|
|
end)
|
|
end
|