move DetectSpec to EventListener

This commit is contained in:
Sumsebrum 2022-01-27 01:30:28 +01:00
parent 0b512af2b7
commit 23729f5960
2 changed files with 67 additions and 81 deletions

View File

@ -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 CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo
local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
@ -11,10 +11,11 @@ local FindAuraByName = AuraUtil.FindAuraByName
local GetTime = GetTime local GetTime = GetTime
local Gladdy = LibStub("Gladdy") local Gladdy = LibStub("Gladdy")
local L = Gladdy.L
local Cooldowns = Gladdy.modules["Cooldowns"] local Cooldowns = Gladdy.modules["Cooldowns"]
local Diminishings = Gladdy.modules["Diminishings"] local Diminishings = Gladdy.modules["Diminishings"]
local EventListener = Gladdy:NewModule("EventListener", nil, { local EventListener = Gladdy:NewModule("EventListener", 100, {
test = true, test = true,
}) })
@ -51,12 +52,6 @@ function EventListener:Reset()
self:SetScript("OnEvent", nil) self:SetScript("OnEvent", nil)
end end
function Gladdy:DetectSpec(unit, spec)
if spec then
self.modules["Cooldowns"]:DetectSpec(unit, spec)
end
end
function Gladdy:SpotEnemy(unit, auraScan) function Gladdy:SpotEnemy(unit, auraScan)
local button = self.buttons[unit] local button = self.buttons[unit]
if not unit or not button then 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 if Gladdy.specBuffs[spellName] then -- Check for auras that detect a spec
local unitPet = string_gsub(unit, "%d$", "pet%1") local unitPet = string_gsub(unit, "%d$", "pet%1")
if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then if UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster) then
Gladdy:DetectSpec(unit, Gladdy.specBuffs[spellName]) EventListener:DetectSpec(unit, Gladdy.specBuffs[spellName])
end end
end end
end end
@ -144,7 +139,7 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
unitClass = Gladdy.buttons[srcUnit].race unitClass = Gladdy.buttons[srcUnit].race
end end
Cooldowns:CooldownUsed(srcUnit, unitClass, spellId) Cooldowns:CooldownUsed(srcUnit, unitClass, spellId)
Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) self:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
end end
end end
@ -157,7 +152,7 @@ function EventListener:COMBAT_LOG_EVENT_UNFILTERED()
Gladdy:SpotEnemy(srcUnit, true) Gladdy:SpotEnemy(srcUnit, true)
end end
if not Gladdy.buttons[srcUnit].spec then if not Gladdy.buttons[srcUnit].spec then
Gladdy:DetectSpec(srcUnit, Gladdy.specSpells[spellName]) self:DetectSpec(srcUnit, Gladdy.specSpells[spellName])
end end
end end
end end
@ -255,7 +250,7 @@ function EventListener:UNIT_AURA(unit)
if not button.spec and Gladdy.specBuffs[spellName] then if not button.spec and Gladdy.specBuffs[spellName] then
local unitPet = string_gsub(unit, "%d$", "pet%1") local unitPet = string_gsub(unit, "%d$", "pet%1")
if unitCaster and (UnitIsUnit(unit, unitCaster) or UnitIsUnit(unitPet, unitCaster)) then 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
end end
if Gladdy.exceptionNames[spellID] then if Gladdy.exceptionNames[spellID] then
@ -271,7 +266,7 @@ function EventListener:UNIT_SPELLCAST_START(unit)
if Gladdy.buttons[unit] then if Gladdy.buttons[unit] then
local spellName = UnitCastingInfo(unit) local spellName = UnitCastingInfo(unit)
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then 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 end
end end
@ -280,7 +275,7 @@ function EventListener:UNIT_SPELLCAST_CHANNEL_START(unit)
if Gladdy.buttons[unit] then if Gladdy.buttons[unit] then
local spellName = UnitChannelInfo(unit) local spellName = UnitChannelInfo(unit)
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then 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 end
end end
@ -289,7 +284,46 @@ function EventListener:UNIT_SPELLCAST_SUCCEEDED(unit)
if Gladdy.buttons[unit] then if Gladdy.buttons[unit] then
local spellName = UnitCastingInfo(unit) local spellName = UnitCastingInfo(unit)
if Gladdy.specSpells[spellName] and not Gladdy.buttons[unit].spec then 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 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

View File

@ -278,30 +278,22 @@ function Cooldowns:Test(unit)
local button = Gladdy.buttons[unit] local button = Gladdy.buttons[unit]
if Gladdy.db.cooldown then if Gladdy.db.cooldown then
button.spellCooldownFrame:Show() button.spellCooldownFrame:Show()
self:UpdateTestCooldowns(unit)
else else
button.spellCooldownFrame:Hide() button.spellCooldownFrame:Hide()
self:UpdateTestCooldowns(unit)
end end
self:UpdateTestCooldowns(unit)
end end
function Cooldowns:UpdateTestCooldowns(unit) function Cooldowns:UpdateTestCooldowns(unit)
local button = Gladdy.buttons[unit] local button = Gladdy.buttons[unit]
self:UpdateCooldowns(button)
if (button.testSpec and button.testSpec == Gladdy.testData[unit].testSpec) then -- use class spells
self:UpdateCooldowns(button) for spellId,_ in pairs(Gladdy:GetCooldownList()[button.class]) do
button.spec = nil self:CooldownUsed(unit, button.class, spellId)
self:DetectSpec(unit, button.testSpec) end
-- use race spells
-- use class spells for spellId,_ in pairs(Gladdy:GetCooldownList()[button.race]) do
for spellId,_ in pairs(Gladdy:GetCooldownList()[button.class]) do self:CooldownUsed(unit, button.race, spellId)
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 end
end end
@ -310,11 +302,17 @@ end
--------------------- ---------------------
function Cooldowns:ENEMY_SPOTTED(unit) function Cooldowns:ENEMY_SPOTTED(unit)
if (not Gladdy.buttons[unit]) then
return
end
self:UpdateCooldowns(Gladdy.buttons[unit]) self:UpdateCooldowns(Gladdy.buttons[unit])
end end
function Cooldowns:SPEC_DETECTED(unit, spec) function Cooldowns:SPEC_DETECTED(unit)
self:DetectSpec(unit, spec) if (not Gladdy.buttons[unit]) then
return
end
self:UpdateCooldowns(Gladdy.buttons[unit])
end end
function Cooldowns:UNIT_DESTROYED(unit) function Cooldowns:UNIT_DESTROYED(unit)
@ -445,41 +443,9 @@ function Cooldowns:CooldownUsed(unit, unitClass, spellId, expirationTimeInSecond
end 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) function Cooldowns:AddCooldown(spellID, value, button)
-- see if we have shared cooldowns without a cooldown defined -- 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 -- 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 return
end 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 for k, v in pairs(Gladdy:GetCooldownList()[class]) do
if Gladdy.db.cooldownCooldowns[tostring(k)] then if Gladdy.db.cooldownCooldowns[tostring(k)] then
if (type(v) ~= "table" or (type(v) == "table" and v.spec == nil)) then if (type(v) ~= "table" or (type(v) == "table" and v.spec == nil)) then