mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
- 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.)
112 lines
2.9 KiB
Lua
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 |