mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-31 16:06:57 +00:00
The sweep options reached the frames only through the cooldown module's CooldownFrame_SetTimer hook, which set alpha 0 for a hidden animation and SetReverse(true) for a reversed one. With that module disabled, Show Timer Animation and Reverse did nothing, and reverse never turned back off without a reload. The player buff sweeps had no other path at all. Each owner now configures its own frame. Player buffs drive their Cooldown with SetCooldown and Clear, and only while Show Timer Animation is on. Unit frame auras, raid aura indicators and nameplate debuffs hide the sweep with SetDrawSwipe and SetDrawBling. Every frame with a reverse option calls SetReverse. The hook keeps the timer text and Hide Foreign Cooldown Animations. Nameplate debuffs hid the sweep with alpha, which the plate's SetAlpha copied down on every target change (ClassicAPI keeps 1.12's alpha under default plates), so hidden sweeps came back. Their settings now come from UpdateDebuffConfig alone. Bag slots get a native Cooldown like bank slots, in place of the template's indicator Model, so Reverse Cooldown Animation covers bags and Hide Foreign Cooldown Animations no longer hides them. The buff, unit frame, nameplate and totem options apply without a reload. Fixes #72.
144 lines
4.8 KiB
Lua
144 lines
4.8 KiB
Lua
pfUI:RegisterModule("totems", function ()
|
|
local slotColors = {
|
|
[FIRE_TOTEM_SLOT] = CreateColor(.5, .2, .1),
|
|
[EARTH_TOTEM_SLOT] = CreateColor(.2, .4, .1),
|
|
[WATER_TOTEM_SLOT] = CreateColor(.1, .4, .6),
|
|
[AIR_TOTEM_SLOT] = CreateColor(.4, .1, .7),
|
|
}
|
|
|
|
local totems = CreateFrame("Frame", "pfTotems", UIParent)
|
|
totems:RegisterEvent("PLAYER_TOTEM_UPDATE")
|
|
totems:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
totems:SetScript("OnEvent", function()
|
|
this:RefreshList()
|
|
end)
|
|
|
|
totems.OnEnter = function(self)
|
|
local id = this:GetID()
|
|
local spellID = select(7, GetTotemInfo(id))
|
|
if not spellID or spellID == 0 then return end
|
|
GameTooltip:SetOwner(this, "ANCHOR_LEFT")
|
|
GameTooltip:SetSpellByID(spellID)
|
|
GameTooltip:AddDoubleLine(T["Left Click"], T["Recast Totem"], nil, nil, nil, WHITE_FONT_COLOR:GetRGB())
|
|
GameTooltip:AddDoubleLine(T["Right Click"], T["Target Totem"], nil, nil, nil, WHITE_FONT_COLOR:GetRGB())
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
totems.OnLeave = GameTooltip_Hide
|
|
|
|
totems.OnClick = function(self)
|
|
local id = this:GetID()
|
|
if arg1 == "LeftButton" then
|
|
local spellID = select(7, GetTotemInfo(id))
|
|
if spellID and spellID > 0 then CastSpell(FindSpellBookSlotByID(spellID)) end
|
|
elseif arg1 == "RightButton" then
|
|
TargetTotem(id)
|
|
end
|
|
end
|
|
|
|
totems.RefreshList = function(self)
|
|
local count = 0
|
|
for i = 1, MAX_TOTEMS do
|
|
local _, _, start, duration, icon = GetTotemInfo(i)
|
|
|
|
if start and start > 0 and icon and icon ~= "" then
|
|
count = count + 1
|
|
|
|
self.bar[count]:Show()
|
|
self.bar[count]:SetBackdropBorderColor(slotColors[i]:GetRGB())
|
|
self.bar[count].icon:SetTexture(icon)
|
|
self.bar[count]:SetID(i)
|
|
|
|
CooldownFrame_SetTimer(self.bar[count].cd, start, duration, 1)
|
|
end
|
|
end
|
|
|
|
self:UpdateSize(count)
|
|
end
|
|
|
|
totems.UpdateSize = function(self, count)
|
|
if not count or count == 0 then
|
|
-- hide entire panel
|
|
self:Hide()
|
|
else
|
|
-- hide remaining totems and show panel
|
|
for i = count + 1, MAX_TOTEMS do self.bar[i]:Hide() end
|
|
self:Show()
|
|
end
|
|
|
|
count = count and count > 0 and count or MAX_TOTEMS
|
|
|
|
local thickness = self.iconsize + self.spacing*2
|
|
local length = thickness * count
|
|
if pfUI_config.totems.direction == "HORIZONTAL" then
|
|
self:SetSize(length, thickness)
|
|
else
|
|
self:SetSize(thickness, length)
|
|
end
|
|
end
|
|
|
|
totems.UpdateConfig = function(self)
|
|
local rawborder, border = GetBorderSize()
|
|
self.iconsize = pfUI_config.totems.iconsize
|
|
self.direction = pfUI_config.totems.direction
|
|
self.spacing = tonumber(pfUI_config.totems.spacing) * GetPerfectPixel()
|
|
self.showbg = pfUI_config.totems.showbg == "1" and true or nil
|
|
|
|
for i = 1, MAX_TOTEMS do
|
|
self.bar = self.bar or {}
|
|
self.bar[i] = self.bar[i] or CreateFrame("Button", "pfTotemsBar"..i, totems)
|
|
self.bar[i]:ClearAllPoints()
|
|
|
|
if pfUI_config.totems.direction == "HORIZONTAL" then
|
|
if self.bar[i-1] then
|
|
self.bar[i]:SetPoint("LEFT", self.bar[i-1], "RIGHT", self.spacing*2, 0)
|
|
else
|
|
self.bar[i]:SetPoint("TOPLEFT", self, "TOPLEFT", self.spacing, -self.spacing)
|
|
end
|
|
else
|
|
if self.bar[i-1] then
|
|
self.bar[i]:SetPoint("TOP", self.bar[i-1], "BOTTOM", 0, -self.spacing*2)
|
|
else
|
|
self.bar[i]:SetPoint("TOPLEFT", self, "TOPLEFT", self.spacing, -self.spacing)
|
|
end
|
|
end
|
|
|
|
self.bar[i]:SetSize(self.iconsize, self.iconsize)
|
|
CreateBackdrop(self.bar[i], nil, true)
|
|
|
|
self.bar[i].icon = self.bar[i].icon or self.bar[i]:CreateTexture(nil, "ARTWORK")
|
|
self.bar[i].icon:SetTexCoord(.08, .92, .08, .92)
|
|
SetAllPointsOffset(self.bar[i].icon, self.bar[i], 2,-2)
|
|
|
|
self.bar[i].cdbg = self.bar[i].cdbg or CreateFrame("Frame", nil, self.bar[i])
|
|
self.bar[i].cdbg:SetSize(self.iconsize - 3, self.iconsize - 3)
|
|
self.bar[i].cdbg:SetPoint("CENTER", self.bar[i], "CENTER", 0, 0)
|
|
self.bar[i].cd = self.bar[i].cd or CreateFrame("Cooldown", "pfTotemsBar"..i.."Cooldown", self.bar[i].cdbg, "CooldownFrameTemplate")
|
|
self.bar[i].cd.pfCooldownStyleAnimation = 1
|
|
self.bar[i].cd:SetReverse(pfUI_config.totems.cooldown_reverse == "1")
|
|
self.bar[i].cd.pfCooldownType = "ALL"
|
|
|
|
self.bar[i]:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
|
self.bar[i]:SetScript("OnClick", self.OnClick)
|
|
self.bar[i]:SetScript("OnEnter", self.OnEnter)
|
|
self.bar[i]:SetScript("OnLeave", self.OnLeave)
|
|
end
|
|
|
|
self:RefreshList()
|
|
self:ClearAllPoints()
|
|
self:SetPoint("BOTTOM", 0, 75)
|
|
UpdateMovable(self, true)
|
|
|
|
if self.showbg then
|
|
CreateBackdrop(self)
|
|
self.backdrop:Show()
|
|
elseif self.backdrop then
|
|
self.backdrop:Hide()
|
|
end
|
|
end
|
|
|
|
-- add totems to the pfUI global space
|
|
pfUI.totems = totems
|
|
pfUI.totems:UpdateConfig()
|
|
end)
|