From 23729f5960e7b3c45c5278d0ec037895d534300e Mon Sep 17 00:00:00 2001 From: Sumsebrum Date: Thu, 27 Jan 2022 01:30:28 +0100 Subject: [PATCH] move DetectSpec to EventListener --- EventListener.lua | 64 +++++++++++++++++++++++++-------- Modules/Cooldowns.lua | 84 ++++++++++--------------------------------- 2 files changed, 67 insertions(+), 81 deletions(-) diff --git a/EventListener.lua b/EventListener.lua index 4d97d35..c7f2172 100644 --- a/EventListener.lua +++ b/EventListener.lua @@ -1,4 +1,4 @@ -local select, string_gsub, tostring, pairs = select, string.gsub, tostring, pairs +local select, string_gsub, tostring, pairs, ipairs = select, string.gsub, tostring, pairs, ipairs local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF @@ -11,10 +11,11 @@ local FindAuraByName = AuraUtil.FindAuraByName local GetTime = GetTime local Gladdy = LibStub("Gladdy") +local L = Gladdy.L local Cooldowns = Gladdy.modules["Cooldowns"] local Diminishings = Gladdy.modules["Diminishings"] -local EventListener = Gladdy:NewModule("EventListener", nil, { +local EventListener = Gladdy:NewModule("EventListener", 100, { test = true, }) @@ -51,12 +52,6 @@ function EventListener:Reset() self:SetScript("OnEvent", nil) end -function Gladdy:DetectSpec(unit, spec) - if spec then - self.modules["Cooldowns"]:DetectSpec(unit, spec) - end -end - function Gladdy:SpotEnemy(unit, auraScan) local button = self.buttons[unit] if not unit or not button then @@ -92,7 +87,7 @@ function Gladdy:SpotEnemy(unit, auraScan) if Gladdy.specBuffs[spellName] then -- Check for auras that detect a spec local unitPet = string_gsub(unit, "%d$", "pet%1") if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then - Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName]) + EventListener:DetectSpec(unit, Gladdy.specBuffs[spellName]) end end end @@ -144,7 +139,7 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED() unitClass = Gladdy.buttons[srcUnit].race end Cooldowns:CooldownUsed(srcUnit, unitClass, spellId) - Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) + self:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) end end @@ -157,7 +152,7 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED() Gladdy:SpotEnemy(srcUnit, true) end if not Gladdy.buttons[srcUnit].spec then - Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) + self:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) end end end @@ -255,7 +250,7 @@ function EventListener:UNIT_AURA(unit) if not button.spec and Gladdy.specBuffs[spellName] then local unitPet = string_gsub(unit, "%d$", "pet%1") if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then - Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName]) + self:DetectSpec(unit, Gladdy.specBuffs[spellName]) end end if Gladdy.exceptionNames[spellID] then @@ -271,7 +266,7 @@ function EventListener:UNIT_SPELLCAST_START(unit) if Gladdy.buttons[unit] then local spellName = UnitCastingInfo(unit) if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then - Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName]) + self:DetectSpec(unit, Gladdy.specSpells[spellName]) end end end @@ -280,7 +275,7 @@ function EventListener:UNIT_SPELLCAST_CHANNEL_START(unit) if Gladdy.buttons[unit] then local spellName = UnitChannelInfo(unit) if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then - Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName]) + self:DetectSpec(unit, Gladdy.specSpells[spellName]) end end end @@ -289,7 +284,46 @@ function EventListener:UNIT_SPELLCAST_SUCCEEDED(unit) if Gladdy.buttons[unit] then local spellName = UnitCastingInfo(unit) if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then - Gladdy:DetectSpec(unit, Gladdy.specSpells[spellName]) + self:DetectSpec(unit, Gladdy.specSpells[spellName]) end end end + +local function notIn(spec, list) + for _,v in ipairs(list) do + if spec == v then + return false + end + end + return true +end + +function EventListener:DetectSpec(unit, spec) + local button = Gladdy.buttons[unit] + if (not button or not spec or button.spec) then + return + end + if button.class == "PALADIN" and notIn(spec, {L["Holy"], L["Retribution"], L["Protection"]}) + or button.class == "SHAMAN" and notIn(spec, {L["Restoration"], L["Enhancement"], L["Elemental"]}) + or button.class == "ROGUE" and notIn(spec, {L["Subtlety"], L["Assassination"], L["Combat"]}) + or button.class == "WARLOCK" and notIn(spec, {L["Demonology"], L["Destruction"], L["Affliction"]}) + or button.class == "PRIEST" and notIn(spec, {L["Shadow"], L["Discipline"], L["Holy"]}) + or button.class == "MAGE" and notIn(spec, {L["Frost"], L["Fire"], L["Arcane"]}) + or button.class == "DRUID" and notIn(spec, {L["Restoration"], L["Feral"], L["Balance"]}) + or button.class == "HUNTER" and notIn(spec, {L["Beast Mastery"], L["Marksmanship"], L["Survival"]}) + or button.class == "WARRIOR" and notIn(spec, {L["Arms"], L["Protection"], L["Fury"]}) then + return + end + if not button.spec then + button.spec = spec + Gladdy:SendMessage("UNIT_SPEC", unit, spec) + end +end + +function EventListener:Test(unit) + local button = Gladdy.buttons[unit] + if (Gladdy.testData[unit].testSpec) then + button.spec = nil + self:DetectSpec(unit, button.testSpec) + end +end diff --git a/Modules/Cooldowns.lua b/Modules/Cooldowns.lua index 61ec21a..64ccdfb 100644 --- a/Modules/Cooldowns.lua +++ b/Modules/Cooldowns.lua @@ -278,30 +278,22 @@ function Cooldowns:Test(unit) local button = Gladdy.buttons[unit] if Gladdy.db.cooldown then button.spellCooldownFrame:Show() - self:UpdateTestCooldowns(unit) else button.spellCooldownFrame:Hide() - self:UpdateTestCooldowns(unit) end - + self:UpdateTestCooldowns(unit) end function Cooldowns:UpdateTestCooldowns(unit) local button = Gladdy.buttons[unit] - - if (button.testSpec and button.testSpec == Gladdy.testData[unit].testSpec) then - self:UpdateCooldowns(button) - button.spec = nil - self:DetectSpec(unit, button.testSpec) - - -- use class spells - for spellId,_ in pairs(Gladdy:GetCooldownList()[button.class]) do - self:CooldownUsed(unit, button.class, spellId) - end - -- use race spells - for spellId,_ in pairs(Gladdy:GetCooldownList()[button.race]) do - self:CooldownUsed(unit, button.race, spellId) - end + self:UpdateCooldowns(button) + -- use class spells + for spellId,_ in pairs(Gladdy:GetCooldownList()[button.class]) do + self:CooldownUsed(unit, button.class, spellId) + end + -- use race spells + for spellId,_ in pairs(Gladdy:GetCooldownList()[button.race]) do + self:CooldownUsed(unit, button.race, spellId) end end @@ -310,11 +302,17 @@ end --------------------- function Cooldowns:ENEMY_SPOTTED(unit) + if (not Gladdy.buttons[unit]) then + return + end self:UpdateCooldowns(Gladdy.buttons[unit]) end -function Cooldowns:SPEC_DETECTED(unit, spec) - self:DetectSpec(unit, spec) +function Cooldowns:SPEC_DETECTED(unit) + if (not Gladdy.buttons[unit]) then + return + end + self:UpdateCooldowns(Gladdy.buttons[unit]) end function Cooldowns:UNIT_DESTROYED(unit) @@ -445,41 +443,9 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, expirationTimeInSecond end --------------------- --- Detect Spec +-- Update Cooldowns --------------------- -local function notIn(spec, list) - for _,v in ipairs(list) do - if spec == v then - return false - end - end - return true -end - -function Cooldowns:DetectSpec(unit, spec) - local button = Gladdy.buttons[unit] - if (not button or not spec or button.spec) then - return - end - if button.class == "PALADIN" and notIn(spec, {L["Holy"], L["Retribution"], L["Protection"]}) - or button.class == "SHAMAN" and notIn(spec, {L["Restoration"], L["Enhancement"], L["Elemental"]}) - or button.class == "ROGUE" and notIn(spec, {L["Subtlety"], L["Assassination"], L["Combat"]}) - or button.class == "WARLOCK" and notIn(spec, {L["Demonology"], L["Destruction"], L["Affliction"]}) - or button.class == "PRIEST" and notIn(spec, {L["Shadow"], L["Discipline"], L["Holy"]}) - or button.class == "MAGE" and notIn(spec, {L["Frost"], L["Fire"], L["Arcane"]}) - or button.class == "DRUID" and notIn(spec, {L["Restoration"], L["Feral"], L["Balance"]}) - or button.class == "HUNTER" and notIn(spec, {L["Beast Mastery"], L["Marksmanship"], L["Survival"]}) - or button.class == "WARRIOR" and notIn(spec, {L["Arms"], L["Protection"], L["Fury"]}) then - return - end - if not button.spec then - button.spec = spec - Gladdy:SendMessage("UNIT_SPEC", unit, spec) - Cooldowns:UpdateCooldowns(button) - end -end - function Cooldowns:AddCooldown(spellID, value, button) -- see if we have shared cooldowns without a cooldown defined -- e.g. hunter traps have shared cooldowns, so only display one trap instead all of them @@ -517,20 +483,6 @@ function Cooldowns:UpdateCooldowns(button) return end - if spec then - if class == "PALADIN" and notIn(spec, {L["Holy"], L["Retribution"], L["Protection"]}) - or class == "SHAMAN" and notIn(spec, {L["Restoration"], L["Enhancement"], L["Elemental"]}) - or class == "ROGUE" and notIn(spec, {L["Subtlety"], L["Assassination"], L["Combat"]}) - or class == "WARLOCK" and notIn(spec, {L["Demonology"], L["Destruction"], L["Affliction"]}) - or class == "PRIEST" and notIn(spec, {L["Shadow"], L["Discipline"], L["Holy"]}) - or class == "MAGE" and notIn(spec, {L["Frost"], L["Fire"], L["Arcane"]}) - or class == "DRUID" and notIn(spec, {L["Restoration"], L["Feral"], L["Balance"]}) - or class == "HUNTER" and notIn(spec, {L["Beast Mastery"], L["Marksmanship"], L["Survival"]}) - or class == "WARRIOR" and notIn(spec, {L["Arms"], L["Protection"], L["Fury"]}) then - return - end - end - for k, v in pairs(Gladdy:GetCooldownList()[class]) do if Gladdy.db.cooldownCooldowns[tostring(k)] then if (type(v) ~= "table" or (type(v) == "table" and v.spec == nil)) then