From 35a10bfc1d2fbfd24bdacb72cb2b07974fdb8db3 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Wed, 21 May 2014 13:07:27 +0000 Subject: [PATCH] De-couple OvaleFuture from OvaleComboPoints and OvalePower. Add a way for modules to register additional information that they would like to save to a spellcast at the time that it is cast. This information can be later retrieved by other modules. Let OvaleComboPoints and OvalePower manage spellcast.combo and spellcast.holy, respectively. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1475 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleComboPoints.lua | 42 ++++++++++++++++++++++++++++++++++ OvaleFuture.lua | 61 +++++++++++++++++--------------------------------- OvalePower.lua | 48 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 41 deletions(-) diff --git a/OvaleComboPoints.lua b/OvaleComboPoints.lua index c5d2d7e..3837df8 100644 --- a/OvaleComboPoints.lua +++ b/OvaleComboPoints.lua @@ -15,7 +15,9 @@ Ovale.OvaleComboPoints = OvaleComboPoints -- -- Forward declarations for module dependencies. +local OvaleAura = nil local OvaleData = nil +local OvaleFuture = nil local OvaleGUID = nil local OvaleState = nil @@ -25,16 +27,54 @@ local MAX_COMBO_POINTS = MAX_COMBO_POINTS -- Player's class. local _, self_class = API_UnitClass("player") + +-- Table of functions to update spellcast information to register with OvaleFuture. +local self_updateSpellcastInfo = {} -- -- OvaleComboPoints.combo = 0 -- +-- +-- Manage spellcast.combo information. +local function SaveToSpellcast(spellcast) + if spellcast.spellId then + local si = OvaleData.spellInfo[spellcast.spellId] + if si.combo == "finisher" then + -- If a buff is present that removes the combo point cost of the spell, + -- then treat it as a maximum combo-point finisher. + if si.buff_combo_none then + if OvaleAura:GetAura("player", si.buff_combo_none) then + spellcast.combo = MAX_COMBO_POINTS + end + end + local min_combo = si.min_combo or si.mincombo or 1 + if OvaleComboPoints.combo >= min_combo then + spellcast.combo = OvaleComboPoints.combo + end + end + end +end + +local function UpdateFromSpellcast(dest, spellcast) + if spellcast.combo then + dest.combo = spellcast.combo + end +end + +do + self_updateSpellcastInfo.SaveToSpellcast = SaveToSpellcast + self_updateSpellcastInfo.UpdateFromSpellcast = UpdateFromSpellcast +end +-- + -- function OvaleComboPoints:OnInitialize() -- Resolve module dependencies. + OvaleAura = Ovale.OvaleAura OvaleData = Ovale.OvaleData + OvaleFuture = Ovale.OvaleFuture OvaleGUID = Ovale.OvaleGUID OvaleState = Ovale.OvaleState end @@ -48,12 +88,14 @@ function OvaleComboPoints:OnEnable() self:RegisterEvent("UNIT_COMBO_POINTS") self:RegisterEvent("UNIT_TARGET", "UNIT_COMBO_POINTS") OvaleState:RegisterState(self, self.statePrototype) + OvaleFuture:RegisterSpellcastInfo(self_updateSpellcastInfo) end end function OvaleComboPoints:OnDisable() if self_class == "ROGUE" or self_class == "DRUID" then OvaleState:UnregisterState(self) + OvaleFuture:UnregisterSpellcastInfo(self_updateSpellcastInfo) self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED") self:UnregisterEvent("PLAYER_ENTERING_WORLD") self:UnregisterEvent("PLAYER_LOGIN") diff --git a/OvaleFuture.lua b/OvaleFuture.lua index a2c3e4c..da901ec 100644 --- a/OvaleFuture.lua +++ b/OvaleFuture.lua @@ -19,11 +19,9 @@ local OvalePool = Ovale.OvalePool -- Forward declarations for module dependencies. local OvaleAura = nil -local OvaleComboPoints = nil local OvaleData = nil local OvaleGUID = nil local OvalePaperDoll = nil -local OvalePower = nil local OvaleScore = nil local OvaleSpellBook = nil local OvaleState = nil @@ -65,6 +63,9 @@ local self_lastTarget = nil -- Time at which a player aura was last added. local self_timeAuraAdded = nil +-- Table of external functions to save additional data about a spellcast. +local self_updateSpellcastInfo = {} + local OVALE_UNKNOWN_GUID = 0 -- These CLEU events are eventually received after a successful spellcast. @@ -187,38 +188,10 @@ local function AddSpellToQueue(spellId, lineId, startTime, endTime, channeled, a end end - -- Save the number of combo points used if this spell is a finisher. - if si.combo == "finisher" then - -- If a buff is present that removes the combo point cost of the spell, - -- then treat it as a maximum combo-point finisher. - if si.buff_combo_none then - if OvaleAura:GetAura("player", si.buff_combo_none) then - spellcast.combo = MAX_COMBO_POINTS - end - end - local min_combo = si.min_combo or si.mincombo or 1 - if OvaleComboPoints.combo >= min_combo then - spellcast.combo = OvaleComboPoints.combo - end - end - - -- Save the number of holy power used if this spell is a finisher. - if si.holy == "finisher" then - local max_holy = si.max_holy or 3 - -- If a buff is present that removes the holy power cost of the spell, - -- then treat it as using the maximum amount of holy power. - if si.buff_holy_none then - if OvaleAura:GetAura("player", si.buff_holy_none) then - spellcast.holy = max_holy - end - end - local holy = OvalePower.power.holy - if holy > 0 then - if holy > max_holy then - spellcast.holy = max_holy - else - spellcast.holy = holy - end + -- Save additional information to the spellcast that are registered with this module. + for tbl in pairs(self_updateSpellcastInfo) do + if tbl.SaveToSpellcast then + tbl.SaveToSpellcast(spellcast) end end @@ -328,11 +301,9 @@ end function OvaleFuture:OnInitialize() -- Resolve module dependencies. OvaleAura = Ovale.OvaleAura - OvaleComboPoints = Ovale.OvaleComboPoints OvaleData = Ovale.OvaleData OvaleGUID = Ovale.OvaleGUID OvalePaperDoll = Ovale.OvalePaperDoll - OvalePower = Ovale.OvalePower OvaleScore = Ovale.OvaleScore OvaleSpellBook = Ovale.OvaleSpellBook OvaleState = Ovale.OvaleState @@ -603,11 +574,11 @@ function OvaleFuture:UpdateSnapshotFromSpellcast(dest, spellcast) if spellcast.damageMultiplier then dest.damageMultiplier = spellcast.damageMultiplier end - if spellcast.combo then - dest.combo = spellcast.combo - end - if spellcast.holy then - dest.holy = spellcast.holy + -- Update additional information from the spellcast that are registered with this module. + for tbl in pairs(self_updateSpellcastInfo) do + if tbl.UpdateFromSpellcast then + tbl.UpdateFromSpellcast(dest, spellcast) + end end end @@ -630,6 +601,14 @@ function OvaleFuture:InFlight(spellId) return false end +function OvaleFuture:RegisterSpellcastInfo(functionTable) + self_updateSpellcastInfo[functionTable] = true +end + +function OvaleFuture:UnregisterSpellcastInfo(functionTable) + self_updateSpellcastInfo[functionTable] = nil +end + function OvaleFuture:Debug() if next(self_activeSpellcast) then Ovale:Print("Spells in flight:") diff --git a/OvalePower.lua b/OvalePower.lua index 2f1cf03..883e4c0 100644 --- a/OvalePower.lua +++ b/OvalePower.lua @@ -14,6 +14,8 @@ Ovale.OvalePower = OvalePower -- -- Forward declarations for module dependencies. +local OvaleAura = nil +local OvaleFuture = nil local OvaleData = nil local OvaleState = nil @@ -38,6 +40,9 @@ local SPELL_POWER_RAGE = SPELL_POWER_RAGE local SPELL_POWER_RUNIC_POWER = SPELL_POWER_RUNIC_POWER local SPELL_POWER_SHADOW_ORBS = SPELL_POWER_SHADOW_ORBS local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS + +-- Table of functions to update spellcast information to register with OvaleFuture. +local self_updateSpellcastInfo = {} -- -- @@ -99,10 +104,51 @@ do end -- +-- +-- Manage spellcast.holy information. +local function SaveToSpellcast(spellcast) + if spellcast.spellId then + local si = OvaleData.spellInfo[spellcast.spellId] + -- Save the number of holy power used if this spell is a finisher. + if si.holy == "finisher" then + local max_holy = si.max_holy or 3 + -- If a buff is present that removes the holy power cost of the spell, + -- then treat it as using the maximum amount of holy power. + if si.buff_holy_none then + if OvaleAura:GetAura("player", si.buff_holy_none) then + spellcast.holy = max_holy + end + end + local holy = OvalePower.power.holy + if holy > 0 then + if holy > max_holy then + spellcast.holy = max_holy + else + spellcast.holy = holy + end + end + end + end +end + +local function UpdateFromSpellcast(dest, spellcast) + if spellcast.holy then + dest.holy = spellcast.holy + end +end + +do + self_updateSpellcastInfo.SaveToSpellcast = SaveToSpellcast + self_updateSpellcastInfo.UpdateFromSpellcast = UpdateFromSpellcast +end +-- + -- function OvalePower:OnInitialize() -- Resolve module dependencies. + OvaleAura = Ovale.OvaleAura OvaleData = Ovale.OvaleData + OvaleFuture = Ovale.OvaleFuture OvaleState = Ovale.OvaleState end @@ -121,10 +167,12 @@ function OvalePower:OnEnable() self:RegisterEvent("UNIT_SPELL_HASTE", "UNIT_RANGEDDAMAGE") self:RegisterMessage("Ovale_StanceChanged", "EventHandler") OvaleState:RegisterState(self, self.statePrototype) + OvaleFuture:RegisterSpellcastInfo(self_updateSpellcastInfo) end function OvalePower:OnDisable() OvaleState:UnregisterState(self) + OvaleFuture:UnregisterSpellcastInfo(self_updateSpellcastInfo) self:UnregisterEvent("ACTIVE_TALENT_GROUP_CHANGED") self:UnregisterEvent("PLAYER_ALIVE") self:UnregisterEvent("PLAYER_ENTERING_WORLD") -- 1.7.9.5