mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-06 21:50:00 +00:00
performance update
performance update
This commit is contained in:
+98
-86
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
pfUI:RegisterModule("actionbar", "vanilla", function ()
|
||||
local _, class = UnitClass("player")
|
||||
local color = RAID_CLASS_COLORS[class]
|
||||
local cr, cg, cb = color.r , color.g, color.b
|
||||
@@ -395,14 +395,6 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
for line in gfind(body, "[^%\n]+") do
|
||||
_, _, match = string.find(line, '^#showtooltip (.+)')
|
||||
|
||||
-- skip any further manual macro scanning on
|
||||
-- gameclients with native macro spell detection
|
||||
if pfUI.client > 11200 and match then
|
||||
self.spellslot = nil
|
||||
self.booktype = nil
|
||||
return
|
||||
end
|
||||
|
||||
-- allow the user to disable the scan
|
||||
if match and strfind(match, "disable") then
|
||||
return
|
||||
@@ -912,24 +904,40 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
end
|
||||
|
||||
local cat, stealth
|
||||
local function IsCatStealth()
|
||||
local inCatForm = nil -- cached from buff scan
|
||||
local prowlActive = nil -- tracks if prowl is active
|
||||
|
||||
-- Full scan for cat form and prowl (only on login/reload)
|
||||
local function FullScan()
|
||||
if class ~= "DRUID" then return nil end
|
||||
cat, stealth = nil, nil
|
||||
|
||||
|
||||
local foundCat, foundStealth = nil, nil
|
||||
|
||||
for i = 0, 31 do
|
||||
local texture = GetPlayerBuffTexture(i)
|
||||
if not texture then break end
|
||||
|
||||
-- catform icon detected
|
||||
if strfind(texture, "Ability_Druid_CatForm") then
|
||||
if stealth then return true end
|
||||
cat = true
|
||||
foundCat = true
|
||||
end
|
||||
|
||||
-- stealth icon detected
|
||||
if strfind(texture, "Ability_Ambush") then
|
||||
if cat then return true end
|
||||
stealth = true
|
||||
foundStealth = true
|
||||
end
|
||||
end
|
||||
|
||||
inCatForm = foundCat
|
||||
prowlActive = foundCat and foundStealth
|
||||
return prowlActive
|
||||
end
|
||||
|
||||
-- Quick scan only for prowl (when we know we're in cat form)
|
||||
local function HasProwlBuff()
|
||||
for i = 0, 31 do
|
||||
local texture = GetPlayerBuffTexture(i)
|
||||
if not texture then break end
|
||||
if strfind(texture, "Ability_Ambush") then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return nil
|
||||
@@ -956,7 +964,59 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
end
|
||||
|
||||
-- setup page switch frame
|
||||
local prowling = nil
|
||||
local pageswitch = CreateFrame("Frame", "pfActionBarPageSwitch", UIParent)
|
||||
pageswitch:RegisterEvent("PLAYER_AURAS_CHANGED")
|
||||
pageswitch:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
pageswitch:RegisterEvent("UNIT_CASTEVENT")
|
||||
pageswitch:SetScript("OnEvent", function()
|
||||
if class ~= "DRUID" then return end
|
||||
|
||||
-- UNIT_CASTEVENT: detect Cat Form and Prowl cast instantly
|
||||
-- Cat Form: 768 | Prowl: 5215 (R1), 6783 (R2), 9913 (R3)
|
||||
if event == "UNIT_CASTEVENT" then
|
||||
local guid, target, cEvent, spellId = arg1, arg2, arg3, arg4
|
||||
local _, playerGuid = UnitExists("player")
|
||||
if guid == playerGuid and cEvent == "CAST" then
|
||||
if spellId == 5215 or spellId == 6783 or spellId == 9913 then
|
||||
inCatForm = true
|
||||
prowlActive = true
|
||||
prowling = true
|
||||
elseif spellId == 768 then
|
||||
inCatForm = true
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
-- PLAYER_AURAS_CHANGED: smart scanning
|
||||
if event == "PLAYER_AURAS_CHANGED" then
|
||||
if prowlActive then
|
||||
-- We were prowling, check if still prowling
|
||||
if HasProwlBuff() then
|
||||
prowling = true
|
||||
else
|
||||
-- Prowl ended
|
||||
prowlActive = nil
|
||||
prowling = nil
|
||||
-- Also check if still in cat form
|
||||
inCatForm = nil
|
||||
for i = 0, 31 do
|
||||
local texture = GetPlayerBuffTexture(i)
|
||||
if not texture then break end
|
||||
if strfind(texture, "Ability_Druid_CatForm") then
|
||||
inCatForm = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif not inCatForm then
|
||||
-- Not in cat form, do a full scan (might have just shifted)
|
||||
prowling = FullScan()
|
||||
end
|
||||
-- If inCatForm but not prowlActive, no scan needed (wait for UNIT_CASTEVENT)
|
||||
end
|
||||
end)
|
||||
pageswitch:SetScript("OnUpdate", function()
|
||||
-- switch actionbar page depending on meta key that is pressed
|
||||
if C.bars.pagemastershift == "1" and IsShiftKeyDown() then
|
||||
@@ -974,10 +1034,9 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
|
||||
-- switch actionbar page if druid stealth is detected
|
||||
if C.bars.druidstealth == "1" then
|
||||
local stealth = IsCatStealth()
|
||||
if stealth and _G.CURRENT_ACTIONBAR_PAGE == 1 then
|
||||
if prowling and _G.CURRENT_ACTIONBAR_PAGE == 1 then
|
||||
SwitchBar(prowl)
|
||||
elseif not stealth and _G.CURRENT_ACTIONBAR_PAGE == 8 then
|
||||
elseif not prowling and _G.CURRENT_ACTIONBAR_PAGE == 8 then
|
||||
SwitchBar(default)
|
||||
end
|
||||
end
|
||||
@@ -1109,39 +1168,6 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
buttoncache[id] = f
|
||||
end
|
||||
|
||||
-- set required attributes for regular tbc buttons
|
||||
if pfUI.client > 11200 then
|
||||
if bar == 11 then
|
||||
f:SetAttribute("type", "spell")
|
||||
f:SetAttribute('spell', select(2, GetShapeshiftFormInfo(button)))
|
||||
elseif bar == 12 then
|
||||
f:SetAttribute("type1", "pet")
|
||||
f:SetAttribute("action1", button)
|
||||
f:SetAttribute("type2", "macro")
|
||||
f:SetAttribute("macrotext2", "/click PetActionButton".. button .. " RightButton")
|
||||
else
|
||||
bars[bar]:SetAttribute("addchild", f)
|
||||
f:SetAttribute("type", "action")
|
||||
f:SetAttribute("action", id)
|
||||
f:SetAttribute("checkselfcast", true)
|
||||
f:SetAttribute("useparent-unit", true)
|
||||
f:SetAttribute("useparent-statebutton", true)
|
||||
|
||||
for state = 0, 11 do -- add custom states
|
||||
local action = ((state == 0 and bar or state)-1)*12+button
|
||||
f:SetAttribute(string.format("*type-S%d", state), "action")
|
||||
f:SetAttribute(string.format("*type-S%dRight", state), "action")
|
||||
f:SetAttribute(string.format("*action-S%d", state), action)
|
||||
f:SetAttribute(string.format("*action-S%dRight", state), action)
|
||||
if C.bars.rightself == "1" then
|
||||
f:SetAttribute(string.format("*unit-S%dRight", state), "player")
|
||||
else
|
||||
f:SetAttribute(string.format("*unit-S%dRight", state), nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- set keydown option
|
||||
if C.bars.keydown == "1" then
|
||||
f:RegisterForClicks("LeftButtonDown", "RightButtonDown")
|
||||
@@ -1268,40 +1294,26 @@ pfUI:RegisterModule("actionbar", "vanilla:tbc", function ()
|
||||
if enable == "1" then
|
||||
-- handle pet bar
|
||||
if i == 12 then
|
||||
if pfUI.client > 11200 then
|
||||
if InCombatLockdown and InCombatLockdown() then
|
||||
-- don't process those events during combat
|
||||
else
|
||||
-- set state driver for pet bars
|
||||
bars[i]:SetAttribute("unit", "pet")
|
||||
local visibility = pfUI.unlock and pfUI.unlock:IsShown() and "show" or petvisibility
|
||||
if bars[i].visibility ~= visibility then
|
||||
RegisterStateDriver(bars[i], 'visibility', visibility)
|
||||
bars[i].visibility = visibility
|
||||
end
|
||||
end
|
||||
-- only show when pet actions exists
|
||||
if PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown() then
|
||||
bars[i]:Show()
|
||||
else
|
||||
-- only show when pet actions exists
|
||||
if PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown() then
|
||||
bars[i]:Show()
|
||||
else
|
||||
bars[i]:Hide()
|
||||
end
|
||||
bars[i]:Hide()
|
||||
end
|
||||
|
||||
-- show/hide petbar on petbar updates
|
||||
if init then
|
||||
bars[i]:RegisterEvent("PET_BAR_UPDATE")
|
||||
bars[i]:SetScript("OnEvent", function()
|
||||
-- hide obsolete buttons
|
||||
for i=1, NUM_PET_ACTION_SLOTS do
|
||||
if not PetHasActionBar() and bars[12][i] then
|
||||
bars[12][i]:Hide()
|
||||
end
|
||||
end
|
||||
-- refresh layout
|
||||
CreateActionBar(12)
|
||||
end)
|
||||
end
|
||||
-- show/hide petbar on petbar updates
|
||||
if init then
|
||||
bars[i]:RegisterEvent("PET_BAR_UPDATE")
|
||||
bars[i]:SetScript("OnEvent", function()
|
||||
-- hide obsolete buttons
|
||||
for i=1, NUM_PET_ACTION_SLOTS do
|
||||
if not PetHasActionBar() and bars[12][i] then
|
||||
bars[12][i]:Hide()
|
||||
end
|
||||
end
|
||||
-- refresh layout
|
||||
CreateActionBar(12)
|
||||
end)
|
||||
end
|
||||
|
||||
-- handle shapeshift bar
|
||||
|
||||
Reference in New Issue
Block a user