mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-15 22:30:13 -05:00
122 lines
3.4 KiB
Lua
122 lines
3.4 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
IceTargetAbsorb = IceCore_CreateClass(IceUnitBar)
|
|
|
|
IceTargetAbsorb.prototype.highestAbsorbSinceLastZero = 0
|
|
IceTargetAbsorb.prototype.ColorName = "TargetAbsorb"
|
|
|
|
local UnitGetTotalAbsorbs = UnitGetTotalAbsorbs
|
|
|
|
function IceTargetAbsorb.prototype:init(moduleName, unit, colorName)
|
|
if moduleName == nil or unit == nil then
|
|
IceTargetAbsorb.super.prototype.init(self, "TargetAbsorb", "target")
|
|
else
|
|
IceTargetAbsorb.super.prototype.init(self, moduleName, unit)
|
|
end
|
|
|
|
if colorName ~= nil then
|
|
self.ColorName = colorName
|
|
end
|
|
|
|
self:SetDefaultColor(self.ColorName, 0.99, 0.99, 0.99)
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:GetDefaultSettings()
|
|
local settings = IceTargetAbsorb.super.prototype.GetDefaultSettings(self)
|
|
|
|
settings["side"] = IceCore.Side.Right
|
|
settings["offset"] = 3
|
|
settings["upperText"] = "[TotalAbsorb:VeryShort]"
|
|
|
|
return settings
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:GetOptions()
|
|
local opts = IceTargetAbsorb.super.prototype.GetOptions(self)
|
|
|
|
opts["scaleToUnitHealth"] = {
|
|
type = 'toggle',
|
|
name = L["Scale to health"],
|
|
desc = L["Whether the bar's maximum value should be set to the unit's maximum health or not. If set, any absorb above that amount will not be shown."],
|
|
get = function()
|
|
return self.moduleSettings.scaleToUnitHealth
|
|
end,
|
|
set = function(info, v)
|
|
self.moduleSettings.scaleToUnitHealth = v
|
|
self:Update()
|
|
end,
|
|
disabled = function()
|
|
return not self.moduleSettings.enabled
|
|
end
|
|
}
|
|
|
|
return opts
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:Enable(core)
|
|
IceTargetAbsorb.super.prototype.Enable(self, core)
|
|
|
|
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
|
|
self:MyRegisterCustomEvents()
|
|
|
|
self:UpdateAbsorbAmount()
|
|
|
|
self:Show(false)
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:MyRegisterCustomEvents()
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:MyUnregisterCustomEvents()
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:Update()
|
|
IceTargetAbsorb.super.prototype.Update(self)
|
|
self:UpdateAbsorbAmount()
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:UpdateAbsorbAmount(event, unit)
|
|
if event == "UNIT_ABSORB_AMOUNT_CHANGED" and unit ~= self.unit then
|
|
return
|
|
end
|
|
|
|
local absorbAmount = UnitGetTotalAbsorbs(self.unit) or 0
|
|
|
|
if absorbAmount <= 0 then
|
|
self.highestAbsorbSinceLastZero = 0
|
|
elseif absorbAmount > self.highestAbsorbSinceLastZero then
|
|
self.highestAbsorbSinceLastZero = absorbAmount
|
|
end
|
|
|
|
local maxAbsorb = self.highestAbsorbSinceLastZero
|
|
if self.moduleSettings.scaleToUnitHealth then
|
|
maxAbsorb = self.maxHealth
|
|
end
|
|
self.absorbPercent = maxAbsorb ~= 0 and IceHUD:Clamp(absorbAmount / maxAbsorb, 0, 1) or 0
|
|
|
|
if absorbAmount <= 0 or maxAbsorb <= 0 then
|
|
self:Show(false)
|
|
else
|
|
self:Show(true)
|
|
self:UpdateBar(self.absorbPercent, self.ColorName)
|
|
end
|
|
|
|
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
|
|
if (self.PlayerAltManaMax ~= 100) then
|
|
self:SetBottomText1(self:GetFormattedText(self:Round(absorbAmount)), self.ColorName)
|
|
else
|
|
self:SetBottomText1()
|
|
end
|
|
end
|
|
end
|
|
|
|
function IceTargetAbsorb.prototype:Disable(core)
|
|
IceTargetAbsorb.super.prototype.Disable(self, core)
|
|
|
|
self:UnregisterEvent("UNIT_ABSORB_AMOUNT_CHANGED")
|
|
self:MyUnregisterCustomEvents()
|
|
end
|
|
|
|
if UnitGetTotalAbsorbs ~= nil then
|
|
IceHUD.TargetAbsorb = IceTargetAbsorb:new()
|
|
end
|