Extract event handler to its own file & optimize

This commit is contained in:
OldManAlpha 2025-06-29 13:56:29 -07:00
parent b072396873
commit f66b9bf706
3 changed files with 120 additions and 138 deletions

View File

@ -174,42 +174,6 @@ local function OpenUnitFramesIterator()
end
end
--This is just to respond to events "EventHandlerFrame" never appears on the screen
local EventHandlerFrame = CreateFrame("Frame", "PTEventHandlerFrame", UIParent)
EventHandlerFrame:RegisterEvent("ADDON_LOADED"); -- This triggers once for every addon that was loaded after this addon
EventHandlerFrame:RegisterEvent("PLAYER_LOGOUT"); -- Fired when about to log out
EventHandlerFrame:RegisterEvent("PLAYER_QUITING"); -- Fired when a player has the quit option on screen
EventHandlerFrame:RegisterEvent("UNIT_HEALTH") --“UNIT_HEALTH” fires when a units health changes
EventHandlerFrame:RegisterEvent("UNIT_MAXHEALTH")
EventHandlerFrame:RegisterEvent("UNIT_AURA") -- Register for the "UNIT_AURA" event to update buffs and debuffs
EventHandlerFrame:RegisterEvent("PLAYER_ENTERING_WORLD") -- Fired when the player enters the world, reloads the UI, or zones between map instances. Basically, it triggers whenever a loading screen appears2. This includes logging in, respawning at a graveyard, entering/leaving an instance, and other situations where a loading screen is presented.
EventHandlerFrame:RegisterEvent("PARTY_MEMBERS_CHANGED") -- Fired when someone joins or leaves the group
EventHandlerFrame:RegisterEvent("PLAYER_TARGET_CHANGED")
EventHandlerFrame:RegisterEvent("RAID_ROSTER_UPDATE")
EventHandlerFrame:RegisterEvent("UNIT_PET")
EventHandlerFrame:RegisterEvent("PLAYER_PET_CHANGED")
EventHandlerFrame:RegisterEvent("SPELLS_CHANGED")
EventHandlerFrame:RegisterEvent("RAID_TARGET_UPDATE")
EventHandlerFrame:RegisterEvent("UNIT_MANA")
EventHandlerFrame:RegisterEvent("UNIT_DISPLAYPOWER")
EventHandlerFrame:RegisterEvent("UNIT_RAGE")
EventHandlerFrame:RegisterEvent("UNIT_ENERGY")
EventHandlerFrame:RegisterEvent("UNIT_FOCUS")
EventHandlerFrame:RegisterEvent("UNIT_MAXMANA")
local lastModifier = "None"
EventHandlerFrame:SetScript("OnUpdate", function()
local modifier = GetKeyModifier()
if lastModifier ~= modifier then
lastModifier = modifier
if SpellsTooltip:IsVisible() then
ReapplySpellsTooltip()
end
end
end)
function Debug(msg)
DEFAULT_CHAT_FRAME:AddMessage(msg)
end
@ -644,7 +608,7 @@ local function initUnitFrames()
OpenUnitFramesIterator()
end
function EventAddonLoaded()
function OnAddonLoaded()
local freshInstall = false
if PTSpells == nil then
freshInstall = true
@ -1499,112 +1463,11 @@ function CheckTarget()
UnitFrameGroups["Target"]:EvaluateShown()
end
function IsRelevantUnit(unit)
--return not string.find(unit, "0x")
return AllUnitsSet[unit] ~= nil or GUIDCustomUnitMap[unit]
end
function EventHandler()
if event == "ADDON_LOADED" then
GuidRoster = PTGuidRoster
if arg1 ~= "Puppeteer" then
return
end
EventAddonLoaded()
EventHandlerFrame:UnregisterEvent("ADDON_LOADED")
elseif event == "PLAYER_ENTERING_WORLD" then
CheckGroup()
if PTOptions.DisablePartyFrames.InParty then
SetPartyFramesEnabled(false)
end
elseif event == "PLAYER_LOGOUT" or event == "PLAYER_QUITING" then
elseif event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH" then
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
for ui in UnitFrames(unit) do
ui:UpdateHealth()
end
elseif event == "UNIT_MANA" or event == "UNIT_RAGE" or event == "UNIT_ENERGY" or
event == "UNIT_FOCUS" or event == "UNIT_MAXMANA" or event == "UNIT_DISPLAYPOWER" then
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
for ui in UnitFrames(unit) do
ui:UpdatePower()
end
if unit == "player" then
ReapplySpellsTooltip()
end
elseif event == "UNIT_AURA" then
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
PTUnit.Get(unit):UpdateAuras()
for ui in UnitFrames(unit) do
ui:UpdateAuras()
ui:UpdateHealth() -- Update health because there may be an aura that changes health bar color
end
elseif event == "PARTY_MEMBERS_CHANGED" or event == "RAID_ROSTER_UPDATE" then
CheckGroup()
elseif event == "UNIT_PET" or event == "PLAYER_PET_CHANGED" then
local unit = arg1
if IsRelevantUnit(unit) then
CheckGroup()
end
elseif event == "PLAYER_TARGET_CHANGED" then
for _, ui in ipairs(AllUnitFrames) do
ui:EvaluateTarget()
end
local exists, guid = UnitExists("target")
if guid then
PTUnit.UpdateGuidCaches()
end
PTUnit.Get("target"):UpdateAll()
if util.IsSuperWowPresent() then
GuidRoster.SetUnitGuid("target", guid)
PTHealPredict.SetRelevantGUIDs(GuidRoster.GetTrackedGuids())
end
if exists then
EvaluateTracking("target", true)
end
if PTOptions.Hidden then
return
end
CheckTarget()
elseif event == "SPELLS_CHANGED" then
PuppeteerSettings.UpdateTrackedDebuffTypes()
elseif event == "RAID_TARGET_UPDATE" then
for _, ui in ipairs(AllUnitFrames) do
ui:UpdateRaidMark()
end
end
end
EventHandlerFrame:SetScript("OnEvent", EventHandler)
function print(msg)
if not PTOptions or not PTOptions["Debug"] then
return

View File

@ -27,6 +27,7 @@ libs\UnitProxy.lua
libs\Util.lua
Puppeteer.lua
core\EventHandler.lua
core\DistanceScanner.lua
core\Command.lua

118
core/EventHandler.lua Normal file
View File

@ -0,0 +1,118 @@
PTUtil.SetEnvironment(Puppeteer)
local _G = getfenv(0)
local util = PTUtil
local function RegisterEventHandler(events, handler)
if type(events) == "string" then
events = {events}
end
local frame = CreateFrame("Frame", "PTEventHandler_"..events[1])
for _, event in ipairs(events) do
frame:RegisterEvent(event)
end
frame:SetScript("OnEvent", handler)
end
RegisterEventHandler("ADDON_LOADED", function()
if arg1 ~= "Puppeteer" then
return
end
GuidRoster = PTGuidRoster
OnAddonLoaded()
end)
RegisterEventHandler("PLAYER_ENTERING_WORLD", function()
CheckGroup()
if PTOptions.DisablePartyFrames.InParty then
SetPartyFramesEnabled(false)
end
end)
RegisterEventHandler({"UNIT_HEALTH", "UNIT_MAXHEALTH"}, function()
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
for ui in UnitFrames(unit) do
ui:UpdateHealth()
end
end)
RegisterEventHandler({"UNIT_MANA", "UNIT_RAGE", "UNIT_ENERGY", "UNIT_FOCUS", "UNIT_MAXMANA", "UNIT_DISPLAYPOWER"}, function()
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
for ui in UnitFrames(unit) do
ui:UpdatePower()
end
if unit == "player" then
ReapplySpellsTooltip()
end
end)
RegisterEventHandler("UNIT_AURA", function()
local unit = arg1
if not IsRelevantUnit(unit) then
return
end
PTUnit.Get(unit):UpdateAuras()
for ui in UnitFrames(unit) do
ui:UpdateAuras()
ui:UpdateHealth() -- Update health because there may be an aura that changes health bar color
end
end)
RegisterEventHandler({"PARTY_MEMBERS_CHANGED", "RAID_ROSTER_UPDATE"}, function()
CheckGroup()
end)
RegisterEventHandler({"UNIT_PET", "PLAYER_PET_CHANGED"}, function()
local unit = arg1
if IsRelevantUnit(unit) then
CheckGroup()
end
end)
RegisterEventHandler("PLAYER_TARGET_CHANGED", function()
for _, ui in ipairs(AllUnitFrames) do
ui:EvaluateTarget()
end
local exists, guid = UnitExists("target")
if guid then
PTUnit.UpdateGuidCaches()
end
PTUnit.Get("target"):UpdateAll()
if util.IsSuperWowPresent() then
GuidRoster.SetUnitGuid("target", guid)
PTHealPredict.SetRelevantGUIDs(GuidRoster.GetTrackedGuids())
end
if exists then
EvaluateTracking("target", true)
end
if PTOptions.Hidden then
return
end
CheckTarget()
end)
RegisterEventHandler("SPELLS_CHANGED", function()
PuppeteerSettings.UpdateTrackedDebuffTypes()
end)
RegisterEventHandler("RAID_TARGET_UPDATE", function()
for _, ui in ipairs(AllUnitFrames) do
ui:UpdateRaidMark()
end
end)
local GetKeyModifier = util.GetKeyModifier
local keyListener = CreateFrame("Frame", "PTKeyListener")
local lastModifier = "None"
keyListener:SetScript("OnUpdate", function()
local modifier = GetKeyModifier()
if lastModifier ~= modifier then
lastModifier = modifier
if SpellsTooltip:IsVisible() then
ReapplySpellsTooltip()
end
end
end)