Files
ice-hud/IceUnitBar.lua
2006-07-17 13:47:18 +00:00

101 lines
2.5 KiB
Lua

local AceOO = AceLibrary("AceOO-2.0")
IceUnitBar = AceOO.Class(IceBarElement)
IceUnitBar.virtual = true
IceUnitBar.prototype.unit = nil
IceUnitBar.prototype.alive = nil
IceUnitBar.prototype.combat = nil
IceUnitBar.prototype.tapped = nil
IceUnitBar.prototype.health = nil
IceUnitBar.prototype.maxHealth = nil
IceUnitBar.prototype.healthPercentage = nil
IceUnitBar.prototype.mana = nil
IceUnitBar.prototype.maxMana = nil
IceUnitBar.prototype.manaPercentage = nil
IceUnitBar.prototype.unitClass = nil
-- Constructor --
function IceUnitBar.prototype:init(name, unit)
IceUnitBar.super.prototype.init(self, name)
assert(unit, "IceUnitBar 'unit' is nil")
self.unit = unit
_, self.unitClass = UnitClass(self.unit)
self:SetColor("dead", 0.5, 0.5, 0.5)
self:SetColor("tapped", 0.8, 0.8, 0.8)
end
-- 'Public' methods -----------------------------------------------------------
function IceUnitBar.prototype:Enable()
IceUnitBar.super.prototype.Enable(self)
self:RegisterEvent("PLAYER_UNGHOST", "Alive")
self:RegisterEvent("PLAYER_ALIVE", "Alive")
self:RegisterEvent("PLAYER_DEAD", "Dead")
self:RegisterEvent("PLAYER_REGEN_DISABLED", "InCombat")
self:RegisterEvent("PLAYER_REGEN_ENABLED", "OutCombat")
self.alive = not UnitIsDeadOrGhost(self.unit)
self.combat = UnitAffectingCombat(self.unit)
end
-- 'Protected' methods --------------------------------------------------------
-- To be overridden
function IceUnitBar.prototype:Update(unit)
if (self.combat) then
self.alpha = IceElement.Alpha + 0.2
self.backgroundAlpha = IceBarElement.BackgroundAlpha
else
self.alpha = IceElement.Alpha
self.backgroundAlpha = IceBarElement.BackgroundAlpha
end
self.tapped = UnitIsTapped(self.unit) and (not UnitIsTappedByPlayer(self.unit))
self.health = UnitHealth(self.unit)
self.maxHealth = UnitHealthMax(self.unit)
self.healthPercentage = math.floor( (self.health/self.maxHealth)*100 )
self.mana = UnitMana(self.unit)
self.maxMana = UnitManaMax(self.unit)
self.manaPercentage = math.floor( (self.mana/self.maxMana)*100 )
end
function IceUnitBar.prototype:Alive()
-- instead of maintaining a state for 3 different things
-- (dead, dead/ghost, alive) just afford the extra function call here
self.alive = not UnitIsDeadOrGhost(self.unit)
self:Update(self.unit)
end
function IceUnitBar.prototype:Dead()
self.alive = false
self:Update(self.unit)
end
function IceUnitBar.prototype:InCombat()
self.combat = true
self:Update(self.unit)
end
function IceUnitBar.prototype:OutCombat()
self.combat = false
self:Update(self.unit)
end