From 421732fa0bf2afbbf8e5690137d09b23ce2d5002 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Tue, 26 Nov 2013 14:05:31 +0000 Subject: [PATCH] Drain table pools when leaving combat. Also do more extensive clean-up when the addon is disabled. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1214 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleAura.lua | 51 ++++++++++++++++++++++++++++++++++---------------- OvaleCompile.lua | 11 ++++++++--- OvaleDamageTaken.lua | 1 + OvaleFuture.lua | 8 ++++++++ OvalePaperDoll.lua | 1 + 5 files changed, 53 insertions(+), 19 deletions(-) diff --git a/OvaleAura.lua b/OvaleAura.lua index 270ebcb..aee9d36 100644 --- a/OvaleAura.lua +++ b/OvaleAura.lua @@ -211,20 +211,28 @@ end function OvaleAura:OnEnable() self_guid = API_UnitGUID("player") self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") - self:RegisterEvent("PLAYER_ENTERING_WORLD") - self:RegisterEvent("PLAYER_REGEN_ENABLED", "Cleanup") + self:RegisterEvent("PLAYER_ALIVE") + self:RegisterEvent("PLAYER_ENTERING_WORLD", "ScanAllUnitAuras") + self:RegisterEvent("PLAYER_REGEN_ENABLED") + self:RegisterEvent("PLAYER_UNGHOST", "PLAYER_ALIVE") self:RegisterEvent("UNIT_AURA") - self:RegisterMessage("Ovale_GroupChanged", "Cleanup") + self:RegisterMessage("Ovale_GroupChanged", "RemoveAurasOnInactiveUnits") OvaleState:RegisterState(self, self.statePrototype) end function OvaleAura:OnDisable() OvaleState:UnregisterState(self) self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + self:UnregisterEvent("PLAYER_ALIVE") self:UnregisterEvent("PLAYER_ENTERING_WORLD") self:UnregisterEvent("PLAYER_REGEN_ENABLED") + self:UnregisterEvent("PLAYER_UNGHOST") self:UnregisterEvent("UNIT_AURA") self:UnregisterMessage("Ovale_GroupChanged") + for guid in pairs(self_aura) do + RemoveAurasOnGUID(self_aura, guid) + end + self_pool:Drain() end function OvaleAura:COMBAT_LOG_EVENT_UNFILTERED(event, ...) @@ -263,25 +271,30 @@ function OvaleAura:COMBAT_LOG_EVENT_UNFILTERED(event, ...) end end -function OvaleAura:PLAYER_ENTERING_WORLD(event) - Ovale:DebugPrint(OVALE_AURA_DEBUG, event) - -- Update auras on all visible units. - for unitId in pairs(OvaleGUID.UNIT_AURA_UNITS) do - self:UNIT_AURA(event, unitId) - end - self:Cleanup() +function OvaleAura:PLAYER_ALIVE(event) + Ovale:DebugPrintf(OVALE_AURA_DEBUG, "%s", event) + self:ScanAurasOnGUID(self_guid) +end + +function OvaleAura:PLAYER_REGEN_ENABLED(event) + self:RemoveAurasOnInactiveUnits() + self_pool:Drain() end function OvaleAura:UNIT_AURA(event, unitId) Ovale:DebugPrintf(OVALE_AURA_DEBUG, "%s: %s", event, unitId) - local guid = OvaleGUID:GetGUID(unitId) - if guid then - self:ScanAurasOnGUID(guid) + self:ScanAuras(unitId) +end + +function OvaleAura:ScanAllUnitAuras() + -- Update auras on all visible units. + for unitId in pairs(OvaleGUID.UNIT_AURA_UNITS) do + self:ScanAuras(unitId) end end -function OvaleAura:Cleanup() - -- Rmove all auras from GUIDs that can no longer be referenced by a unit ID, +function OvaleAura:RemoveAurasOnInactiveUnits() + -- Remove all auras from GUIDs that can no longer be referenced by a unit ID, -- i.e., not in the group or not targeted by anyone in the group or focus. for guid in pairs(self_aura) do local unitId = OvaleGUID:GetUnitId(guid) @@ -290,7 +303,6 @@ function OvaleAura:Cleanup() self_serial[guid] = nil end end - self_pool:Drain() end function OvaleAura:IsActiveAura(aura, now) @@ -446,6 +458,13 @@ function OvaleAura:ScanAurasOnGUID(guid) end end +function OvaleAura:ScanAuras(unitId) + local guid = OvaleGUID:GetGUID(unitId) + if guid then + return self:ScanAurasOnGUID(guid) + end +end + function OvaleAura:GetAuraByGUID(guid, spellId, filter, mine) -- If this GUID has no auras in the database, then do an aura scan. if not self_serial[guid] then diff --git a/OvaleCompile.lua b/OvaleCompile.lua index 2f7f731..5706ddc 100644 --- a/OvaleCompile.lua +++ b/OvaleCompile.lua @@ -857,6 +857,7 @@ function OvaleCompile:OnInitialize() end function OvaleCompile:OnEnable() + self:RegisterMessage("PLAYER_REGEN_ENABLED") self:RegisterMessage("Ovale_CheckBoxValueChanged", "EventHandler") self:RegisterMessage("Ovale_EquipmentChanged") self:RegisterMessage("Ovale_GlyphsChanged", "EventHandler") @@ -879,9 +880,8 @@ function OvaleCompile:OnDisable() self_pool:Drain() end -function OvaleCompile:EventHandler(event) - Ovale:DebugPrint(OVALE_COMPILE_DEBUG, event) - self:Compile() +function OvaleCompile:PLAYER_REGEN_ENABLED(event) + self_pool:Drain() end function OvaleCompile:Ovale_EquipmentChanged(event) @@ -896,6 +896,11 @@ function OvaleCompile:Ovale_StanceChanged(event) end end +function OvaleCompile:EventHandler(event) + Ovale:DebugPrint(OVALE_COMPILE_DEBUG, event) + self:Compile() +end + function OvaleCompile:Compile() local profile = OvaleOptions:GetProfile() local source = profile.source diff --git a/OvaleDamageTaken.lua b/OvaleDamageTaken.lua index e9eedbd..910302d 100644 --- a/OvaleDamageTaken.lua +++ b/OvaleDamageTaken.lua @@ -62,6 +62,7 @@ end function OvaleDamageTaken:OnDisable() self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") self:UnregisterEvent("PLAYER_REGEN_ENABLED") + self_pool:Drain() end function OvaleDamageTaken:COMBAT_LOG_EVENT_UNFILTERED(event, ...) diff --git a/OvaleFuture.lua b/OvaleFuture.lua index 55ac872..8720435 100644 --- a/OvaleFuture.lua +++ b/OvaleFuture.lua @@ -287,6 +287,7 @@ function OvaleFuture:OnEnable() self_guid = API_UnitGUID("player") self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") self:RegisterEvent("PLAYER_ENTERING_WORLD") + self:RegisterEvent("PLAYER_REGEN_ENABLED") self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START") self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP") self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED") @@ -302,6 +303,7 @@ function OvaleFuture:OnDisable() OvaleState:UnregisterState(self) self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") self:UnregisterEvent("PLAYER_ENTERING_WORLD") + self:UnregisterEvent("PLAYER_REGEN_ENABLED") self:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_START") self:UnregisterEvent("UNIT_SPELLCAST_CHANNEL_STOP") self:UnregisterEvent("UNIT_SPELLCAST_INTERRUPTED") @@ -310,6 +312,8 @@ function OvaleFuture:OnDisable() self:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED") self:UnregisterMessage("Ovale_AuraAdded") self:UnregisterMessage("Ovale_InactiveUnit") + self:PLAYER_ENTERING_WORLD("OnDisable") + self_pool:Drain() end function OvaleFuture:PLAYER_ENTERING_WORLD(event) @@ -319,6 +323,10 @@ function OvaleFuture:PLAYER_ENTERING_WORLD(event) end end +function OvaleFuture:PLAYER_REGEN_ENABLED(event) + self_pool:Drain() +end + function OvaleFuture:Ovale_AuraAdded(event, timestamp, guid, spellId, caster) if guid == self_guid then self_timeAuraAdded = timestamp diff --git a/OvalePaperDoll.lua b/OvalePaperDoll.lua index 4156473..9e1692c 100644 --- a/OvalePaperDoll.lua +++ b/OvalePaperDoll.lua @@ -197,6 +197,7 @@ function OvalePaperDoll:OnDisable() self:UnregisterEvent("UNIT_STATS") self:UnregisterMessage("Ovale_EquipmentChanged") self:UnregisterMessage("Ovale_StanceChanged") + self_pool:Drain() end function OvalePaperDoll:COMBAT_RATING_UPDATE(event) -- 1.7.9.5