diff --git a/IceHUD.toc b/IceHUD.toc index 13466f5..7dd99bd 100644 --- a/IceHUD.toc +++ b/IceHUD.toc @@ -78,6 +78,7 @@ modules\HolyPower.lua modules\Shards.lua modules\EclipseBar.lua modules\Vengeance.lua +modules\PlayerAlternatePower.lua #@do-not-package@ IceHUD_Options\Options.lua diff --git a/modules/PlayerAlternatePower.lua b/modules/PlayerAlternatePower.lua new file mode 100644 index 0000000..775a453 --- /dev/null +++ b/modules/PlayerAlternatePower.lua @@ -0,0 +1,133 @@ +local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false) +local PlayerAlternatePower = IceCore_CreateClass(IceUnitBar) + +-- Constructor -- +function PlayerAlternatePower.prototype:init(moduleName, unit) + if not moduleName or not unit then + PlayerAlternatePower.super.prototype.init(self, "PlayerAlternatePower", "player") + else + PlayerAlternatePower.super.prototype.init(self, moduleName, unit) + end +end + +function PlayerAlternatePower.prototype:GetDefaultSettings() + local settings = PlayerAlternatePower.super.prototype.GetDefaultSettings(self) + + settings["side"] = IceCore.Side.Left + settings["offset"] = -1 + settings["upperText"] = "[PercentAltP:Round]" + settings["lowerText"] = "[FractionalAltP]" + settings["hideBlizz"] = false + + return settings +end + +function PlayerAlternatePower.prototype:Enable(core) + self.bTreatEmptyAsFull = true + PlayerAlternatePower.super.prototype.Enable(self, core) + + self:RegisterEvent("UNIT_POWER", "UpdateEvent") + self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent") + self:RegisterEvent("UNIT_POWER_BAR_SHOW", "PowerBarShow") + self:RegisterEvent("UNIT_POWER_BAR_HIDE", "PowerBarHide") + + self.power = 0 + self.maxPower = 0 + self.powerPercent = 0 + + self:Update(self.unit) + + if self.maxPower == 0 then + self:Show(false) + end + if self.moduleSettings.hideBlizz then + self:HideBlizz() + end +end + +function PlayerAlternatePower.prototype:PowerBarShow(event, unit) + if unit ~= self.unit then + return + end + + self:Show(true) + self:Update(self.unit) +end + +function PlayerAlternatePower.prototype:PowerBarHide(event, unit) + if unit ~= self.unit then + return + end + + self:Show(false) + self:Update(self.unit) +end + +function PlayerAlternatePower.prototype:UpdateEvent(event, unit) + self:Update(unit) +end + +function PlayerAlternatePower.prototype:Update(unit) + PlayerAlternatePower.super.prototype.Update(self) + if (unit and (unit ~= self.unit)) then + return + end + + self.maxPower = UnitPowerMax(self.unit, ALTERNATE_POWER_INDEX) + self.power = UnitPower(self.unit, ALTERNATE_POWER_INDEX) + if self.maxPower > 0 then + self.powerPercent = self.power / self.maxPower + else + self.powerPercent = 0 + end + + self:UpdateBar(self.powerPercent) + + local texture, r, g, b = UnitAlternatePowerTextureInfo(self.unit, ALT_POWER_TEX_FILL) + self.barFrame.bar:SetVertexColor(r, g, b, self.alpha) + + if not IceHUD.IceCore:ShouldUseDogTags() then + self:SetBottomText1(math.floor(self.powerPercent * 100)) + self:SetBottomText2(self:GetFormattedText(self.power, self.maxPower), color) + end +end + +function PlayerAlternatePower.prototype:GetOptions() + local opts = PlayerAlternatePower.super.prototype.GetOptions(self) + + opts["hideBlizz"] = { + type = "toggle", + name = L["Hide Blizzard Frame"], + desc = L["Hides Blizzard Player frame and disables all events related to it"], + get = function() + return self.moduleSettings.hideBlizz + end, + set = function(info, value) + self.moduleSettings.hideBlizz = value + if value then + self:HideBlizz() + else + self:ShowBlizz() + end + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 51 + } + + return opts +end + +function PlayerAlternatePower.prototype:ShowBlizz() + PlayerPowerBarAlt:GetScript("OnLoad")(PlayerPowerBarAlt) +end + +function PlayerAlternatePower.prototype:HideBlizz() + PlayerPowerBarAlt:Hide() + + PlayerPowerBarAlt:UnregisterAllEvents() +end + +-- Load us up +IceHUD.PlayerAlternatePower = PlayerAlternatePower:new()