From 0eebd7494da908092277068d564b4692cd8db19c Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sat, 2 Mar 2013 17:58:03 +0000 Subject: [PATCH] Better encapsulation of damage meter modules. OvaleRecount and OvaleSkada are full-fledged Ovale modules and encapsulate the code for adding a new reporting mode for their respective damage meter addon. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@709 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- Ovale.lua | 32 +++++------ OvaleRecount.lua | 57 +++++++++++++++----- OvaleSkada.lua | 157 ++++++++++++++++++++++++++++++++++-------------------- 3 files changed, 154 insertions(+), 92 deletions(-) diff --git a/Ovale.lua b/Ovale.lua index eac3bcf..daca869 100644 --- a/Ovale.lua +++ b/Ovale.lua @@ -11,13 +11,13 @@ local _, Ovale = ... _G.Ovale = LibStub("AceAddon-3.0"):NewAddon(Ovale, "Ovale", "AceConsole-3.0", "AceEvent-3.0") -- -local Recount = Recount -local Skada = Skada local L = LibStub("AceLocale-3.0"):GetLocale("Ovale") local ipairs, pairs, strsplit, tinsert, tsort = ipairs, pairs, string.split, table.insert, table.sort local SendAddonMessage, UnitAura, UnitCanAttack = SendAddonMessage, UnitAura, UnitCanAttack local UnitExists, UnitHasVehicleUI, UnitIsDead = UnitExists, UnitHasVehicleUI, UnitIsDead + +local damageMeterModules = {} -- -- @@ -184,25 +184,17 @@ function Ovale:PLAYER_REGEN_DISABLED() self:UpdateVisibility() end +function Ovale:AddDamageMeter(name, module) + damageMeterModules[name] = module +end + +function Ovale:RemoveDamageMeter(name) + damageMeterModules[name] = nil +end + function Ovale:SendScoreToDamageMeter(name, guid, scored, scoreMax) - if Recount then - local source = Recount.db2.combatants[name] - if source then - Recount:AddAmount(source,"Ovale",scored) - Recount:AddAmount(source,"OvaleMax",scoreMax) - end - end - if Skada then - if not guid or not Skada.current or not Skada.total then return end - local player = Skada:get_player(Skada.current, guid, nil) - if not player then return end - if not player.ovale then player.ovale = 0 end - if not player.ovaleMax then player.ovaleMax = 0 end - player.ovale = player.ovale + scored - player.ovaleMax = player.ovaleMax + scoreMax - player = Skada:get_player(Skada.total, guid, nil) - player.ovale = player.ovale + scored - player.ovaleMax = player.ovaleMax + scoreMax + for _, module in pairs(damageMeterModules) do + module:SendScoreToDamageMeter(name, guid, scored, scoreMax) end end diff --git a/OvaleRecount.lua b/OvaleRecount.lua index eb3d68c..f26c133 100644 --- a/OvaleRecount.lua +++ b/OvaleRecount.lua @@ -7,18 +7,26 @@ file accompanying this program. ----------------------------------------------------------------------]] -local Recount = Recount -local RL -if Recount then - RL = LibStub("AceLocale-3.0"):GetLocale("Recount") +local _, Ovale = ... +OvaleRecount = Ovale:NewModule("OvaleRecount") + +-- +local Recount = LibStub("AceAddon-3.0"):GetAddon("Recount", true) +local L = LibStub("AceLocale-3.0"):GetLocale("Recount", true) +if not L then + L = setmetatable({}, { __index = function(t, k) t[k] = k; return k; end }) end +-- -local function DataModes(self,data, num) - if not data then return 0, 0 end +-- +local function DataModes(self, data, num) + if not data then + return 0, 0 + end local fight = data.Fights[Recount.db.profile.CurDataSet] local score if fight and fight.Ovale and fight.OvaleMax then - score = fight.Ovale*1000/fight.OvaleMax + score = fight.Ovale * 1000 / fight.OvaleMax else score = 0 end @@ -28,14 +36,35 @@ local function DataModes(self,data, num) return score, nil end -local function TooltipFuncs(self,name,data) - local SortedData,total +local function TooltipFuncs(self, name, data) + local SortedData, total GameTooltip:ClearLines() GameTooltip:AddLine(name) - -- Recount:AddSortedTooltipData(RL["Top 3"].." Ovale",data and data.Fights[Recount.db.profile.CurDataSet] and data.Fights[Recount.db.profile.CurDataSet].Ovale,3) - -- GameTooltip:AddLine("<"..RL["Click for more Details"]..">",0,0.9,0) + -- Recount:AddSortedTooltipData(L["Top 3"].." Ovale",data and data.Fights[Recount.db.profile.CurDataSet] and data.Fights[Recount.db.profile.CurDataSet].Ovale,3) + -- GameTooltip:AddLine("<"..L["Click for more Details"]..">",0,0.9,0) +end +-- + +-- +function OvaleRecount:OnInitialize() + if not Recount then return end + Recount:AddModeTooltip("Ovale", DataModes, TooltipFuncs, nil, nil, nil, nil) +end + +function OvaleRecount:OnEnable() + Ovale:AddDamageMeter("OvaleRecount", self) +end + +function OvaleRecount:OnDisable() + Ovale:RemoveDamageMeter("OvaleRecount") end -if Recount then - Recount:AddModeTooltip("Ovale",DataModes,TooltipFuncs,nil,nil,nil,nil) -end \ No newline at end of file +function OvaleRecount:SendScoreToDamageMeter(name, guid, scored, scoreMax) + if not Recount then return end + local source = Recount.db2.combatants[name] + if source then + Recount:AddAmount(source, "Ovale", scored) + Recount:AddAmount(source, "OvaleMax", scoreMax) + end +end +-- diff --git a/OvaleSkada.lua b/OvaleSkada.lua index 4bae9a0..5d480a5 100644 --- a/OvaleSkada.lua +++ b/OvaleSkada.lua @@ -7,78 +7,119 @@ file accompanying this program. ----------------------------------------------------------------------]] -local Skada = Skada +local _, Ovale = ... +OvaleSkada = Ovale:NewModule("OvaleSkada") -if Skada then - local module = Skada:NewModule("Ovale Spell Priority") +-- +local Skada = LibStub("AceAddon-3.0"):GetAddon("Skada", true) +local SkadaModule = {} - local function getValue(set) - if set.ovaleMax and set.ovaleMax>0 then - return math.floor(1000*set.ovale/set.ovaleMax) - else - return nil - end +local ipairs = ipairs +local math = math +local tostring = tostring +-- + +-- +OvaleSkada.module = Skada and Skada:NewModule("Ovale Spell Priority", SkadaModule) or nil +-- + +-- +local function getValue(set) + if set.ovaleMax and set.ovaleMax > 0 then + return math.floor(1000 * set.ovale / set.ovaleMax) + else + return nil end +end + +function SkadaModule:OnEnable() + self.metadata = { showspots = true } + Skada:AddMode(self) +end + +function SkadaModule:OnDisable() + Skada:RemoveMode(self) +end - function module:Update(win, set) - local max = 0 - local nr = 1 - - for i, player in ipairs(set.players) do - if player.ovaleMax > 0 then - - local d = win.dataset[nr] or {} - win.dataset[nr] = d - d.value = getValue(player) - d.label = player.name - d.class = player.class - d.id = player.id - d.valuetext = tostring(getValue(player)) - if d.value > max then - max = d.value - end - nr = nr + 1 +function SkadaModule:Update(win, set) + local max = 0 + local nr = 1 + + for i, player in ipairs(set.players) do + if player.ovaleMax and player.ovaleMax > 0 then + local d = win.dataset[nr] or {} + win.dataset[nr] = d + d.value = getValue(player) + d.label = player.name + d.class = player.class + d.id = player.id + d.valuetext = tostring(getValue(player)) + if d.value > max then + max = d.value end + nr = nr + 1 end - - win.metadata.maxvalue = max end - function module:OnEnable() - module.metadata = {showspots = true} - - Skada:AddMode(self) - end + win.metadata.maxvalue = max +end - function module:OnDisable() - Skada:RemoveMode(self) - end +function SkadaModule:AddToTooltip(set, tooltip) + GameTooltip:AddDoubleLine("Ovale", getValue(set), 1, 1, 1) +end - function module:AddToTooltip(set, tooltip) - GameTooltip:AddDoubleLine("Ovale", getValue(set), 1,1,1) +-- Called by Skada when a new player is added to a set. +function SkadaModule:AddPlayerAttributes(player) + if not player.ovale then + player.ovale = 0 + end + if not player.ovaleMax then + player.ovaleMax = 0 end +end - -- Called by Skada when a new player is added to a set. - function module:AddPlayerAttributes(player) - if not player.ovale then - player.ovale = 0 - end - if not player.ovaleMax then - player.ovaleMax = 0 - end +-- Called by Skada when a new set is created. +function SkadaModule:AddSetAttributes(set) + if not set.ovale then + set.ovale = 0 + end + if not set.ovaleMax then + set.ovaleMax = 0 end +end - -- Called by Skada when a new set is created. - function module:AddSetAttributes(set) - if not set.ovale then - set.ovale = 0 - end - if not set.ovaleMax then - set.ovaleMax = 0 - end +function SkadaModule:GetSetSummary(set) + return getValue(set) +end +-- + +-- +function OvaleSkada:OnEnable() + Ovale:AddDamageMeter("OvaleSkada", self) + if not self.module:IsEnabled() then + self.module:Enable() end +end - function module:GetSetSummary(set) - return getValue(set) +function OvaleSkada:OnDisable() + Ovale:RemoveDamageMeter("OvaleSkada") + if self.module:IsEnabled() then + self.module:Disable() end -end \ No newline at end of file +end + +function OvaleSkada:SendScoreToDamageMeter(name, guid, scored, scoreMax) + if not Skada then return end + if not guid or not Skada.current or not Skada.total then return end + + local player = Skada:get_player(Skada.current, guid, nil) + if not player then return end + + self.module:AddPlayerAttributes(player) + player.ovale = player.ovale + scored + player.ovaleMax = player.ovaleMax + scoreMax + player = Skada:get_player(Skada.total, guid, nil) + player.ovale = player.ovale + scored + player.ovaleMax = player.ovaleMax + scoreMax +end +-- -- 1.7.9.5