mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 22:51:53 -05:00
This change adds support for using LibCasterCasterino to get your target's casting info to enable the TargetCast module. It's not as clean as the newer retail native calls but works well enough for most interrupts. Note: because LibCasterCasterino is using combat log events to get casting info if a spell cast starts and is immediately cancelled or interrupted the log may not get updated and the cast bar will zombie complete. LibCasterCasterino can be found at: https://github.com/rgd87/LibClassicCasterino
210 lines
5.3 KiB
Lua
210 lines
5.3 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
local TargetCast = IceCore_CreateClass(IceCastBar)
|
|
|
|
TargetCast.prototype.notInterruptible = false
|
|
|
|
-- Constructor --
|
|
function TargetCast.prototype:init()
|
|
TargetCast.super.prototype.init(self, "TargetCast")
|
|
|
|
self:SetDefaultColor("CastNotInterruptible", 1, 0, 0)
|
|
|
|
self.unit = "target"
|
|
end
|
|
|
|
function TargetCast.prototype:Enable(core)
|
|
TargetCast.super.prototype.Enable(self, core)
|
|
|
|
if IceHUD.WowVer >= 30200 then
|
|
self:RegisterEvent("UNIT_SPELLCAST_INTERRUPTIBLE", "SpellCastInterruptible")
|
|
self:RegisterEvent("UNIT_SPELLCAST_NOT_INTERRUPTIBLE", "SpellCastNotInterruptible")
|
|
end
|
|
end
|
|
|
|
|
|
function TargetCast.prototype:SpellCastInterruptible(event, unit)
|
|
if unit and unit ~= self.unit then
|
|
return
|
|
end
|
|
|
|
self.notInterruptible = false
|
|
self:UpdateInterruptibleColor()
|
|
end
|
|
|
|
function TargetCast.prototype:SpellCastNotInterruptible(event, unit)
|
|
if unit and unit ~= self.unit then
|
|
return
|
|
end
|
|
|
|
self.notInterruptible = true
|
|
self:UpdateInterruptibleColor()
|
|
end
|
|
|
|
function TargetCast.prototype:UpdateBar(scale, color, alpha)
|
|
TargetCast.super.prototype.UpdateBar(self, scale, color, alpha)
|
|
self:UpdateInterruptibleColor()
|
|
end
|
|
|
|
function TargetCast.prototype:UpdateInterruptibleColor()
|
|
if self.moduleSettings.displayNonInterruptible then
|
|
if self.notInterruptible then
|
|
self.barFrame.bar:SetVertexColor(self:GetColor("CastNotInterruptible"))
|
|
else
|
|
self.barFrame.bar:SetVertexColor(self:GetColor(self:GetCurrentCastingColor()))
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- 'Public' methods -----------------------------------------------------------
|
|
|
|
-- OVERRIDE
|
|
function TargetCast.prototype:GetDefaultSettings()
|
|
local settings = TargetCast.super.prototype.GetDefaultSettings(self)
|
|
|
|
settings["side"] = IceCore.Side.Right
|
|
settings["offset"] = 3
|
|
settings["flashInstants"] = "Never"
|
|
-- Fulzamoth 2019-09-27 : let the flash handler work if in Classic and LibClassicCasterino exists
|
|
if LibClassicCasterino then
|
|
settings["flashFailures"] = ""
|
|
else
|
|
settings["flashFailures"] = "Never"
|
|
end
|
|
settings["shouldAnimate"] = false
|
|
settings["hideAnimationSettings"] = true
|
|
settings["usesDogTagStrings"] = false
|
|
settings["displayNonInterruptible"] = true
|
|
|
|
return settings
|
|
end
|
|
|
|
|
|
-- OVERRIDE
|
|
function TargetCast.prototype:TargetChanged(unit)
|
|
TargetCast.super.prototype.TargetChanged(self, unit)
|
|
|
|
if not (self.target) then
|
|
self:StopBar()
|
|
return
|
|
end
|
|
|
|
if UnitCastingInfo then
|
|
local spell = UnitCastingInfo(self.unit)
|
|
local notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 9 or 8, UnitCastingInfo(self.unit))
|
|
if spell then
|
|
self.notInterruptible = notInterruptibleCast
|
|
self:StartBar(IceCastBar.Actions.Cast)
|
|
return
|
|
end
|
|
end
|
|
|
|
if UnitChannelInfo then
|
|
local channel = UnitChannelInfo(self.unit)
|
|
notInterruptible = select((IceHUD.WowVer < 80000 and not IceHUD.WowClassic) and 8 or 7, UnitChannelInfo(self.unit))
|
|
if channel then
|
|
self.notInterruptible = notInterruptibleChannel
|
|
self:StartBar(IceCastBar.Actions.Channel)
|
|
return
|
|
end
|
|
end
|
|
|
|
self:StopBar()
|
|
end
|
|
|
|
|
|
function TargetCast.prototype:GetOptions()
|
|
local opts = TargetCast.super.prototype.GetOptions(self)
|
|
|
|
opts["barVisible"] = {
|
|
type = 'toggle',
|
|
name = L["Bar visible"],
|
|
desc = L["Toggle bar visibility"],
|
|
get = function()
|
|
return self.moduleSettings.barVisible['bar']
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.barVisible['bar'] = v
|
|
if v then
|
|
self.barFrame:Show()
|
|
else
|
|
self.barFrame:Hide()
|
|
end
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
order = 28
|
|
}
|
|
|
|
opts["bgVisible"] = {
|
|
type = 'toggle',
|
|
name = L["Bar background visible"],
|
|
desc = L["Toggle bar background visibility"],
|
|
get = function()
|
|
return self.moduleSettings.barVisible['bg']
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.barVisible['bg'] = v
|
|
if v then
|
|
self.frame.bg:Show()
|
|
else
|
|
self.frame.bg:Hide()
|
|
end
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
order = 29
|
|
}
|
|
|
|
opts["displayNonInterruptible"] = {
|
|
type = 'toggle',
|
|
name = L["Display non-interruptible color"],
|
|
desc = L["Toggles whether or not to show the CastNonInterruptible color for this bar when a cast is non-interruptible"],
|
|
width = 'double',
|
|
get = function()
|
|
return self.moduleSettings.displayNonInterruptible
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.displayNonInterruptible = v
|
|
self:Redraw()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end,
|
|
order = 30
|
|
}
|
|
|
|
return opts
|
|
end
|
|
|
|
function TargetCast.prototype:StartBar(action, message)
|
|
local spell, notInterruptible
|
|
if UnitCastingInfo then
|
|
spell = UnitCastingInfo(self.unit)
|
|
notInterruptible = select(IceHUD.WowVer < 80000 and 9 or 8, UnitCastingInfo(self.unit))
|
|
end
|
|
if UnitChannelInfo and not spell then
|
|
spell = UnitChannelInfo(self.unit)
|
|
notInterruptible = select(IceHUD.WowVer < 80000 and 8 or 7, UnitChannelInfo(self.unit))
|
|
|
|
if not spell then
|
|
return
|
|
end
|
|
end
|
|
|
|
self.notInterruptible = notInterruptible
|
|
|
|
TargetCast.super.prototype.StartBar(self, action, message)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
-- Fulzamoth 2019-09-27 : load in Classic if LibClassicCasterino exists
|
|
-- Load us up
|
|
if not IceHUD.WowClassic or LibClassicCasterino then
|
|
IceHUD.TargetCast = TargetCast:new()
|
|
end
|