From 45686f5a3691ffcfd198064f6781226d4a801529 Mon Sep 17 00:00:00 2001 From: Parnic Date: Tue, 22 Dec 2015 00:39:39 -0600 Subject: [PATCH] Fixed GCD occasionally showing when it shouldn't Ticket #199 - thanks nandchan! --- modules/GlobalCoolDown.lua | 45 ++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/modules/GlobalCoolDown.lua b/modules/GlobalCoolDown.lua index 6e93803..2668cc7 100644 --- a/modules/GlobalCoolDown.lua +++ b/modules/GlobalCoolDown.lua @@ -22,14 +22,17 @@ function GlobalCoolDown.prototype:Enable(core) self.moduleSettings.inverse = "NORMAL" end + self:RegisterEvent("UNIT_SPELLCAST_SENT","SpellCastSent") + --self:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN", "CooldownStateChanged") self:RegisterEvent("UNIT_SPELLCAST_START","CooldownStateChanged") self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_START","CooldownStateChanged") self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED","CooldownStateChanged") - self:RegisterEvent("UNIT_SPELLCAST_SENT","SpellCastSent") - self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED","CooldownAborted") - self:RegisterEvent("UNIT_SPELLCAST_FAILED","CooldownAborted") + self:RegisterEvent("UNIT_SPELLCAST_CHANNEL_STOP","SpellCastStop") + self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED","SpellCastStop") + self:RegisterEvent("UNIT_SPELLCAST_FAILED","SpellCastStop") + self:RegisterEvent("UNIT_SPELLCAST_STOP","SpellCastStop") self:RegisterEvent("CVAR_UPDATE", "CVarUpdate") @@ -47,15 +50,6 @@ function GlobalCoolDown.prototype:CVarUpdate() self.fixedLatency = tonumber(GetCVar("maxSpellStartRecoveryoffset")) / 1000.0 end -function GlobalCoolDown.prototype:CooldownAborted(event, unit, spell) - if unit ~= "player" or not spell or not self.CurrSpell or self.CurrSpell ~= spell then - return - end - - self.CurrLerpTime = self.moduleSettings.desiredLerpTime - self.CurrSpell = nil -end - -- OVERRIDE function GlobalCoolDown.prototype:GetDefaultSettings() local settings = GlobalCoolDown.super.prototype.GetDefaultSettings(self) @@ -137,6 +131,18 @@ function GlobalCoolDown.prototype:SpellCastSent(event, unit, spell) self.spellCastSent = GetTime() end +function GlobalCoolDown.prototype:SpellCastStop(event, unit, spell, _, _, spellId) + if unit ~= "player" or not spellId or not self.CurrSpellId or self.CurrSpellId ~= spellId then + return + end + + self.CurrSpellId = nil + + if event == "UNIT_SPELLCAST_INTERRUPTED" or event == "UNIT_SPELLCAST_FAILED" then + self.CurrLerpTime = self.moduleSettings.desiredLerpTime + end +end + function GlobalCoolDown.prototype:GetSpellCastTime(spell) if not spell then return nil, nil @@ -161,6 +167,16 @@ function GlobalCoolDown.prototype:CooldownStateChanged(event, unit, spell, _, _, return end + -- Ignore all events unrelated to the spell currently being cast + if self.CurrSpellId and self.CurrSpellId ~= spellId then + return + end + + -- Update the current spell ID for all events indicating a spellcast is starting + if event ~= "UNIT_SPELLCAST_SUCCEEDED" then + self.CurrSpellId = spellId + end + if not self.moduleSettings.showDuringCast then local castTime = self:GetSpellCastTime(spellId) local channeledSpellName = UnitChannelInfo(unit) @@ -183,7 +199,6 @@ function GlobalCoolDown.prototype:CooldownStateChanged(event, unit, spell, _, _, self.CurrLerpTime = 0 self.lastLerpTime = GetTime() self.moduleSettings.desiredLerpTime = dur or 1 - self.CurrSpell = spell self:UpdateBar(0, "GlobalCoolDown") self:Show(true) @@ -202,10 +217,6 @@ function GlobalCoolDown.prototype:CooldownStateChanged(event, unit, spell, _, _, self.spellCastSent = nil end end - - if event == "UNIT_SPELLCAST_SUCCEEDED" then - self.CurrSpell = nil - end end function GlobalCoolDown.prototype:MyOnUpdate()