Files
ice-hud/modules/EclipseBar.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

219 lines
6.0 KiB
Lua

local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local EclipseBar = IceCore_CreateClass(IceBarElement)
local IceHUD = _G.IceHUD
EclipseBar.prototype.barUpdateColor = "EclipseLunar"
EclipseBar.prototype.direction = "none"
local DirectionToColorMapping = {
none = "Text",
sun = "EclipseSolar",
moon = "EclipseLunar",
}
function EclipseBar.prototype:init()
EclipseBar.super.prototype.init(self, "EclipseBar")
self:SetDefaultColor("EclipseLunar", 35, 104, 231)
self:SetDefaultColor("EclipseLunarActive", 35, 104, 231)
self:SetDefaultColor("EclipseSolar", 190, 210, 31)
self:SetDefaultColor("EclipseSolarActive", 238, 251, 31)
end
function EclipseBar.prototype:GetOptions()
local opts = EclipseBar.super.prototype.GetOptions(self)
opts.reverse.hidden = true
return opts
end
function EclipseBar.prototype:GetDefaultSettings()
local defaults = EclipseBar.super.prototype.GetDefaultSettings(self)
defaults.textVisible.lower = false
defaults.offset = -1
defaults.enabled = true
defaults.usesDogTagStrings = false
defaults.textVerticalOffset = 13
defaults.textHorizontalOffset = 12
defaults.shouldAnimate = false
defaults.hideAnimationSettings = true
defaults.lockUpperTextAlpha = false
defaults.bHideMarkerSettings = true
defaults.markers[1] = {
position = 0,
color = {r=1, g=0, b=0, a=1},
height = 6,
}
return defaults
end
function EclipseBar.prototype:Enable(core)
EclipseBar.super.prototype.Enable(self, core)
self:RegisterEvent("UPDATE_SHAPESHIFT_FORM", "UpdateShown")
self:RegisterEvent("PLAYER_TALENT_UPDATE", "UpdateShown")
self:RegisterEvent("MASTERY_UPDATE", "UpdateShown")
self:RegisterEvent("UNIT_AURA", "UpdateEclipseBuffs")
self:RegisterEvent("ECLIPSE_DIRECTION_CHANGE", "UpdateEclipseDirection")
self:UpdateEclipseDirection(nil, GetEclipseDirection() == "sun", GetEclipseDirection() == "none")
self:UpdateEclipseBuffs()
self:UpdateShown()
end
function EclipseBar.prototype:Disable(core)
EclipseBar.super.prototype.Disable(self, core)
end
-- note that isNone is not passed by the ECLIPSE_DIRECTION_CHANGE event, only manually via :Enable
function EclipseBar.prototype:UpdateEclipseDirection(event, isLunar, isNone)
self.direction = isLunar and "sun" or isNone and "none" or "moon"
self:UpdateEclipsePower()
end
function EclipseBar.prototype:SetBarVisibility(visible)
EclipseBar.super.prototype.SetBarVisibility(self, visible)
if not self.solarBar then
return
end
if visible then
self.solarBar:Show()
else
self.solarBar:Hide()
end
end
function EclipseBar.prototype:CreateFrame()
EclipseBar.super.prototype.CreateFrame(self)
self:CreateSolarBar()
self:UpdateShown()
self:UpdateAlpha()
end
function EclipseBar.prototype:ShouldRegisterOnUpdate()
return false
end
function EclipseBar.prototype:CreateSolarBar()
if not (self.solarBar) then
self.solarBar = CreateFrame("Frame", nil, self.frame)
end
local solarTop = not IceHUD:xor(self.moduleSettings.reverse, self.moduleSettings.inverse)
self.solarBar:SetFrameStrata("BACKGROUND")
self.solarBar:SetWidth(self.settings.barWidth + (self.moduleSettings.widthModifier or 0))
self.solarBar:SetHeight(self.settings.barHeight)
self.solarBar:ClearAllPoints()
if solarTop then
self.solarBar:SetPoint("TOPLEFT", self.frame, "TOPLEFT")
else
self.solarBar:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT")
end
if not (self.solarBar.bar) then
self.solarBar.bar = self.solarBar:CreateTexture(nil, "LOW")
end
self.solarBar.bar:SetTexture(IceElement.TexturePath .. self:GetMyBarTexture())
self.solarBar.bar:SetAllPoints(self.solarBar)
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1))
local pos = 0.5
local min_y = 0
local max_y = pos
if not solarTop then
min_y = 1-pos
max_y = 1
end
if self.moduleSettings.side == IceCore.Side.Left then
self.solarBar.bar:SetTexCoord(1, 0, min_y, max_y)
else
self.solarBar.bar:SetTexCoord(0, 1, min_y, max_y)
end
self.solarBar.bar:Show()
self.solarBar:SetHeight(self.settings.barHeight * pos)
end
function EclipseBar.prototype:UpdateShown()
local form = GetShapeshiftFormID()
if form == MOONKIN_FORM or not form then
if GetPrimaryTalentTree() == 1 then
self:Show(true)
else
self:Show(false)
end
else
self:Show(false)
end
end
function EclipseBar.prototype:UseTargetAlpha(scale)
return UnitPower("player", SPELL_POWER_ECLIPSE) ~= 0 and self.combat
end
function EclipseBar.prototype:UpdateEclipseBuffs()
local buffStatus = IceHUD:HasBuffs("player", {ECLIPSE_BAR_SOLAR_BUFF_ID, ECLIPSE_BAR_LUNAR_BUFF_ID})
local hasSolar = buffStatus[1]
local hasLunar = buffStatus[2]
if hasSolar then
self.barUpdateColor = "EclipseSolarActive"
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolarActive", 1))
elseif hasLunar then
self.barUpdateColor = "EclipseLunarActive"
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseLunarActive", 1))
else
self.barUpdateColor = "EclipseLunar"
self.solarBar.bar:SetVertexColor(self:GetColor("EclipseSolar", 1))
end
end
function EclipseBar.prototype:UpdateEclipsePower()
local power = UnitPower("player", SPELL_POWER_ECLIPSE)
local maxPower = UnitPowerMax("player", SPELL_POWER_ECLIPSE)
-- bad api, bad.
if maxPower <= 0 or power > maxPower then
return
end
self:SetBottomText1(abs((power/maxPower) * 100), DirectionToColorMapping[self.direction])
-- i'm rather fond of this solution so i'm keeping it around...the correct fix was in IceBarElement to set the upper text color
-- but hey, this would have been sweet.
--[[
local r,g,b = self:GetColor(DirectionToColorMapping[self.direction])
self:SetBottomText1(string.format("|c%x%x%x%x%d|r",
self.alpha * 255,
r * 255,
g * 255,
b * 255,
abs((power/maxPower) * 100)))
]]
local pos = (power/maxPower) / 2
self:PositionMarker(1, pos)
end
function EclipseBar.prototype:MyOnUpdate()
self:Update()
self:UpdateEclipsePower()
self:UpdateBar(0.5, self.barUpdateColor, 1)
self:UpdateAlpha()
end
local _, unitClass = UnitClass("player")
if (unitClass == "DRUID" and IceHUD.WowVer >= 40000) then
IceHUD.EclipseBar = EclipseBar:new()
end