/Tukui/modules/unitframes/core/oUF/elements/health.lua
http://github.com/Asphyxia/Tukui · Lua · 112 lines · 89 code · 19 blank · 4 comment · 34 complexity · f7d64d577909789e28b6d9a7f766ae09 MD5 · raw file
- local WoW41 = select(4, GetBuildInfo()) == 40100
- local parent, ns = ...
- local oUF = ns.oUF
- oUF.colors.health = {49/255, 207/255, 37/255}
- local Update = function(self, event, unit, powerType)
- if(self.unit ~= unit or (event == 'UNIT_POWER' and powerType ~= 'HAPPINESS')) then return end
- local health = self.Health
- if(health.PreUpdate) then health:PreUpdate(unit) end
- local min, max = UnitHealth(unit), UnitHealthMax(unit)
- local disconnected = not UnitIsConnected(unit)
- health:SetMinMaxValues(0, max)
- if(disconnected) then
- health:SetValue(max)
- else
- health:SetValue(min)
- end
- health.disconnected = disconnected
- local r, g, b, t
- if(health.colorTapping and UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit)) then
- t = self.colors.tapped
- elseif(health.colorDisconnected and not UnitIsConnected(unit)) then
- t = self.colors.disconnected
- elseif(health.colorClass and UnitIsPlayer(unit)) or
- (health.colorClassNPC and not UnitIsPlayer(unit)) or
- (health.colorClassPet and UnitPlayerControlled(unit) and not UnitIsPlayer(unit)) then
- local _, class = UnitClass(unit)
- t = self.colors.class[class]
- elseif(health.colorReaction and UnitReaction(unit, 'player')) then
- t = self.colors.reaction[UnitReaction(unit, "player")]
- elseif(health.colorSmooth) then
- r, g, b = self.ColorGradient(min / max, unpack(health.smoothGradient or self.colors.smooth))
- elseif(health.colorHealth) then
- t = self.colors.health
- end
- if(t) then
- r, g, b = t[1], t[2], t[3]
- end
- if(b) then
- health:SetStatusBarColor(r, g, b)
- local bg = health.bg
- if(bg) then local mu = bg.multiplier or 1
- bg:SetVertexColor(r * mu, g * mu, b * mu)
- end
- end
- if(health.PostUpdate) then
- return health:PostUpdate(unit, min, max)
- end
- end
- local Path = function(self, ...)
- return (self.Health.Override or Update) (self, ...)
- end
- local ForceUpdate = function(element)
- return Path(element.__owner, 'ForceUpdate', element.__owner.unit)
- end
- local Enable = function(self, unit)
- local health = self.Health
- if(health) then
- health.__owner = self
- health.ForceUpdate = ForceUpdate
- if(health.frequentUpdates and not self:GetScript'OnUpdate') then
- self:RegisterEvent('UNIT_HEALTH_FREQUENT', Path)
- end
- -- XXX: 4.0.6: They overlap, but they don't! So we'll have to eat some double
- -- updates. This will probably cost us less than actually running an OnUpdate
- -- again.
- self:RegisterEvent('UNIT_HEALTH', Path)
- self:RegisterEvent("UNIT_MAXHEALTH", Path)
- self:RegisterEvent('UNIT_CONNECTION', Path)
- self:RegisterEvent('UNIT_POWER', Path)
- -- For tapping.
- self:RegisterEvent('UNIT_FACTION', Path)
- if(not health:GetStatusBarTexture()) then
- health:SetStatusBarTexture[[Interface\TargetingFrame\UI-StatusBar]]
- end
- return true
- end
- end
- local Disable = function(self)
- local health = self.Health
- if(health) then
- self:UnregisterEvent('UNIT_HEALTH_FREQUENT', Path)
- self:UnregisterEvent('UNIT_HEALTH', Path)
- self:UnregisterEvent('UNIT_MAXHEALTH', Path)
- self:UnregisterEvent('UNIT_CONNECTION', Path)
- self:UnregisterEvent('UNIT_POWER', Path)
- self:UnregisterEvent('UNIT_FACTION', Path)
- end
- end
- oUF:AddElement('Health', Path, Enable, Disable)