mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
This displays the Vigor charges for the player whenever they're on a Dragonriding mount (which is detected via explicit buff ID scanning from a hardcoded list...I'd like to make that more robust so I don't have to keep up with new mounts being added, but I'm not sure how to do it another way just yet). The Alternate Power bar is hidden if the Vigor module is enabled so that we don't end up with duplicate Vigor trackers (although right now it flashes on the screen before the mount buff is detected, so I'd also like to fix that...). I've effectively had to implement my own Vigor module from scratch by poking into the internals of the Vigor widget by its ID in order to determine the recharge amount on the final Vigor charge because there's currently no API to get this information otherwise. Hopefully this gets added; if it does, I'll happily rip out this widget inspection junk. Aside from the partial charge stuff, this is just a skinned version of an Alternate Power indicator that only shows when the user is on a dragonriding mount. ClassPowerCounter doesn't sound like a particularly appropriate base class for this, but since Vigor is implemented as Alternate Power, it worked out nicely.
147 lines
3.6 KiB
Lua
147 lines
3.6 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
local PlayerAlternatePower = IceCore_CreateClass(IceUnitBar)
|
|
|
|
-- Constructor --
|
|
function PlayerAlternatePower.prototype:init(moduleName, unit)
|
|
PlayerAlternatePower.super.prototype.init(self, moduleName or "PlayerAlternatePower", "player")
|
|
|
|
self.bTreatEmptyAsFull = true
|
|
self.power = 0
|
|
self.maxPower = 0
|
|
self.powerPercent = 0
|
|
self.powerIndex = ALTERNATE_POWER_INDEX
|
|
self.powerName = "MANA"
|
|
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)
|
|
PlayerAlternatePower.super.prototype.Enable(self, core)
|
|
|
|
self:RegisterEvent(IceHUD.UnitPowerEvent, "UpdateEvent")
|
|
if IceHUD.EventExistsUnitMaxPower then
|
|
self:RegisterEvent("UNIT_MAXPOWER", "UpdateEvent")
|
|
end
|
|
self:RegisterEvent("UNIT_POWER_BAR_SHOW", "PowerBarShow")
|
|
self:RegisterEvent("UNIT_POWER_BAR_HIDE", "PowerBarHide")
|
|
|
|
self.wantToShow = true
|
|
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.wantToShow = true
|
|
self:Show(true)
|
|
self:Update(self.unit)
|
|
end
|
|
|
|
function PlayerAlternatePower.prototype:PowerBarHide(event, unit)
|
|
if unit ~= self.unit then
|
|
return
|
|
end
|
|
|
|
self.wantToShow = false
|
|
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
|
|
|
|
if IceHUD.DragonridingVigor and IceHUD.DragonridingVigor.bIsVisible then
|
|
self:Show(false)
|
|
elseif self.wantToShow then
|
|
self:Show(true)
|
|
end
|
|
|
|
self.maxPower = UnitPowerMax(self.unit, self.powerIndex)
|
|
self.power = UnitPower(self.unit, self.powerIndex)
|
|
if self.maxPower > 0 then
|
|
self.powerPercent = self.power / self.maxPower
|
|
else
|
|
self.powerPercent = 0
|
|
end
|
|
|
|
self:UpdateBar(self.powerPercent)
|
|
|
|
local info = PowerBarColor[self.powerName];
|
|
self.barFrame.bar:SetVertexColor(info.r, info.g, info.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["lowThresholdColor"] = nil
|
|
|
|
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
|
|
if ALTERNATE_POWER_INDEX then
|
|
IceHUD.PlayerAlternatePower = PlayerAlternatePower:new()
|
|
end
|