Files
ice-hud/modules/Vengeance.lua
Parnic e003fab854 - removed most of the rest of the garbage that was being generated during combat or when changing targets
- reduced cpu usage by 33%-50% across the board (and more in some cases) by changing how updates are registered and how often they run. now the 'update period' slider actually matters. it defaults to 0.033 meaning that frames update about 30 times a second instead of every frame
- fixed the "always" display mode for cooldown bars to respect alpha settings (ooc/with target/in combat/etc.)
2010-10-25 02:05:58 +00:00

112 lines
2.9 KiB
Lua

local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local Vengeance = IceCore_CreateClass(IceUnitBar)
local VENGEANCE_SPELL_ID = 93098
Vengeance.prototype.current = nil
Vengeance.prototype.max = nil
Vengeance.prototype.tooltipBuffer = nil
-- constructor
function Vengeance.prototype:init()
Vengeance.super.prototype.init(self, "Vengeance", "player")
self.current = 0
self.tooltipBuffer = CreateFrame("GameTooltip","tooltipBuffer",nil,"GameTooltipTemplate")
self.tooltipBuffer:SetOwner(WorldFrame, "ANCHOR_NONE")
self:SetDefaultColor("Vengeance", 200, 45, 45)
self.bTreatEmptyAsFull = true
end
-- default settings
function Vengeance.prototype:GetDefaultSettings()
local defaults = Vengeance.super.prototype.GetDefaultSettings(self)
defaults.enabled = false
defaults.usesDogTagStrings = false
defaults.lockUpperTextAlpha = false
defaults.shouldAnimate = false
defaults.hideAnimationSettings = true
defaults.offset = 5
defaults.side = IceCore.Side.Left
return defaults
end
-- enable plugin
function Vengeance.prototype:Enable(core)
Vengeance.super.prototype.Enable(self, core)
-- Avoiding iteration where I can
self:RegisterEvent("UNIT_AURA", "UpdateCurrent")
self:RegisterEvent("UNIT_MAXHEALTH", "UpdateMax")
self:UpdateMax()
end
-- disable plugin
function Vengeance.prototype:Disable(core)
Vengeance.super.prototype.Disable(self, core)
self:UnregisterAllEvents()
end
function Vengeance.prototype:UpdateCurrent(event, unit)
if (unit and (unit ~= self.unit)) then
return
end
local spellName = GetSpellInfo(VENGEANCE_SPELL_ID)
local name = UnitAura(self.unit, spellName)
if name then
-- Buff found, copy it into the buffer for scanning
self.tooltipBuffer:ClearLines()
self.tooltipBuffer:SetUnitBuff(self.unit, name)
-- Grab all regions
local regions = {self.tooltipBuffer:GetRegions()}
-- Convert FontStrings to strings, replace anything else with ""
for i=1, #regions do
local region = regions[i]
regions[i] = region:GetObjectType() == "FontString" and region:GetText() or ""
end
-- Find the number, save it
self.current = tonumber(string.match(table.concat(regions),"%d+")) or 0
else
self.current = 0
end
self:Update()
end
function Vengeance.prototype:UpdateMax(event, unit)
if (unit and (unit ~= self.unit)) then
return
end
self.max = floor(0.1*UnitHealthMax(self.unit))
self:Update()
end
function Vengeance.prototype:Update()
Vengeance.super.prototype.Update(self)
if self.current == 0 then
self:Show(false)
return
else
self:Show(true)
end
self:UpdateBar(self.current / self.max, "Vengeance")
self:SetBottomText1(floor((self.current / self.max) * 100) .. "%")
self:SetBottomText2(tostring(self.current) .."/"..tostring(self.max))
end
-- Load for tanks only
local _, unitClass = UnitClass("player")
if (unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" and IceHUD.WowVer >= 40000) then
IceHUD.Vengeance = Vengeance:new()
end