mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 06:40:13 -05:00
Specifically the Algarian Stormrider which has a different flavor of Vigor widget with customized colors. Apparently that's a whole different widget id. So now instead of checking for just the one vigor widget, we look up all widgets in the vigor set and use those to see if any vigor bar is showing.
233 lines
6.0 KiB
Lua
233 lines
6.0 KiB
Lua
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
|
local DragonridingVigor = IceCore_CreateClass(IceClassPowerCounter)
|
|
|
|
local DragonridingBuffs = {
|
|
360954, -- Highland Drake
|
|
368896, -- Renewed Proto-Drake
|
|
368899, -- Windborn Velocidrake
|
|
368901, -- Cliffside Wylderdrake
|
|
368893, -- Winding Slitherdrake
|
|
412088, -- Grotto Netherwing Drake
|
|
}
|
|
|
|
local vigorWidgetSetID = 283
|
|
local vigorWidgetType = 24
|
|
local defaultVigorWidgetID = 4460
|
|
local vigorWidgetIDs = nil
|
|
local knowsAlternateMountEnum = Enum and Enum.PowerType and Enum.PowerType.AlternateMount
|
|
local unitPowerType = Enum and Enum.PowerType and Enum.PowerType.AlternateMount
|
|
unitPowerType = unitPowerType or ALTERNATE_POWER_INDEX
|
|
|
|
function DragonridingVigor.prototype:init()
|
|
DragonridingVigor.super.prototype.init(self, "Vigor")
|
|
|
|
self:SetDefaultColor("VigorNumeric", 150, 150, 255)
|
|
|
|
self.unit = "player"
|
|
self.numericColor = "VigorNumeric"
|
|
self.unitPower = unitPowerType
|
|
self.minLevel = 0
|
|
self.bTreatEmptyAsFull = false
|
|
self.runeWidth = self.runeHeight
|
|
self.shouldRegisterDisplayPower = false
|
|
end
|
|
|
|
function DragonridingVigor.prototype:Enable(core)
|
|
self.numRunes = UnitPowerMax(self.unit, unitPowerType)
|
|
self.runeCoords = { }
|
|
for i = 1, self.numRunes do
|
|
self:SetupNewRune(i)
|
|
end
|
|
|
|
DragonridingVigor.super.prototype.Enable(self, core)
|
|
self:Show(false)
|
|
|
|
self:RegisterEvent("UNIT_AURA", "CheckShouldShow")
|
|
self:RegisterEvent("UPDATE_UI_WIDGET", "UpdateVigorRecharge")
|
|
end
|
|
|
|
function DragonridingVigor.prototype:EnteringWorld()
|
|
DragonridingVigor.super.prototype.EnteringWorld(self)
|
|
|
|
self:CheckShouldShow("PLAYER_ENTERING_WORLD", "player")
|
|
end
|
|
|
|
function DragonridingVigor.prototype:CheckShouldShow(event, unit, info)
|
|
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
|
self:PopulateVigorWidgetIDs()
|
|
end
|
|
|
|
if unit ~= "player" or not vigorWidgetIDs then
|
|
return
|
|
end
|
|
|
|
local shown = false
|
|
for i=1,#vigorWidgetIDs do
|
|
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(vigorWidgetIDs[i])
|
|
if info and info.shownState ~= 0 then
|
|
shown = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if not shown then
|
|
self:Show(false)
|
|
self.suppressHideBlizz = true
|
|
if self.moduleSettings.hideBlizz then
|
|
self:ShowBlizz()
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
self:Show(true)
|
|
|
|
-- if knowsAlternateMountEnum and UnitPowerMax(self.unit, unitPowerType) > 0 then
|
|
-- self:Show(true)
|
|
-- elseif not knowsAlternateMountEnum and IceHUD:HasAnyBuff("player", DragonridingBuffs) then
|
|
-- self:Show(true)
|
|
-- else
|
|
-- self:Show(false)
|
|
-- if self.moduleSettings.hideBlizz then
|
|
-- self:ShowBlizz()
|
|
-- end
|
|
-- end
|
|
end
|
|
|
|
function DragonridingVigor.prototype:UpdateRunePower(event, arg1, arg2)
|
|
self:UpdateVigorRecharge("internal")
|
|
DragonridingVigor.super.prototype.UpdateRunePower(self, event, arg1, arg2)
|
|
end
|
|
|
|
function DragonridingVigor.prototype:PopulateVigorWidgetIDs()
|
|
local widgets = C_UIWidgetManager.GetAllWidgetsBySetID(vigorWidgetSetID)
|
|
if not widgets then
|
|
return
|
|
end
|
|
|
|
for i=1,#widgets do
|
|
if widgets[i].widgetType == vigorWidgetType then
|
|
if not vigorWidgetIDs then
|
|
vigorWidgetIDs = {}
|
|
end
|
|
|
|
table.insert(vigorWidgetIDs, widgets[i].widgetID)
|
|
end
|
|
end
|
|
end
|
|
|
|
function DragonridingVigor.prototype:UpdateVigorRecharge(event, widget)
|
|
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
|
self:PopulateVigorWidgetIDs()
|
|
end
|
|
if not vigorWidgetIDs or #vigorWidgetIDs == 0 then
|
|
return
|
|
end
|
|
|
|
self.partialReady = nil
|
|
self.partialReadyPercent = nil
|
|
if event ~= "internal" and (not widget or widget.widgetSetID ~= vigorWidgetSetID) then
|
|
return
|
|
end
|
|
|
|
local widgetID = defaultVigorWidgetID
|
|
if widget then
|
|
widgetID = widget.widgetID
|
|
end
|
|
|
|
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(widgetID)
|
|
if not info then
|
|
return
|
|
end
|
|
|
|
self.suppressHideBlizz = not info or info.shownState == 0
|
|
|
|
if event ~= "internal" then
|
|
if self.moduleSettings.hideBlizz then
|
|
self:HideBlizz()
|
|
else
|
|
self:ShowBlizz()
|
|
end
|
|
end
|
|
|
|
if info.numFullFrames == info.numTotalFrames then
|
|
return
|
|
end
|
|
if info.fillMax == 0 then
|
|
return
|
|
end
|
|
|
|
self.partialReady = IceHUD:Clamp(info.numFullFrames + 1, 0, info.numTotalFrames)
|
|
self.partialReadyPercent = info.fillValue / info.fillMax
|
|
if event ~= "internal" then
|
|
self:UpdateRunePower()
|
|
end
|
|
end
|
|
|
|
function DragonridingVigor.prototype:SetupNewRune(rune)
|
|
self.runeCoords[rune] = {0, 1, 0, 1}
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetDefaultSettings()
|
|
local defaults = DragonridingVigor.super.prototype.GetDefaultSettings(self)
|
|
|
|
defaults.pulseWhenFull = false
|
|
defaults.runeGap = 4
|
|
defaults.inactiveDisplayMode = "Shown"
|
|
defaults.hideBlizz = true
|
|
defaults.vpos = -25
|
|
|
|
return defaults
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetOptions()
|
|
local opts = DragonridingVigor.super.prototype.GetOptions(self)
|
|
|
|
opts.inactiveDisplayMode.hidden = function() return true end
|
|
|
|
return opts
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetRuneAtlas(rune)
|
|
return "dragonriding_vigor_fillfull"
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetShineAtlas(rune)
|
|
return "Mage-ArcaneCharge-SmallSpark"
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetFrameAtlas(rune)
|
|
return "dragonriding_vigor_frame"
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetBackgroundAtlas(rune)
|
|
return "dragonriding_vigor_background"
|
|
end
|
|
|
|
function DragonridingVigor.prototype:GetPartialRuneAtlas(rune)
|
|
return "dragonriding_vigor_fill"
|
|
end
|
|
|
|
function DragonridingVigor.prototype:ShowBlizz()
|
|
local info = C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo(defaultVigorWidgetID)
|
|
if not info or info.shownState == 0 then
|
|
return
|
|
end
|
|
UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID]:Show()
|
|
end
|
|
|
|
function DragonridingVigor.prototype:HideBlizz()
|
|
if not UIWidgetPowerBarContainerFrame.widgetFrames or not UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID] then
|
|
return
|
|
end
|
|
|
|
if not self.suppressHideBlizz then
|
|
UIWidgetPowerBarContainerFrame.widgetFrames[defaultVigorWidgetID]:Hide()
|
|
end
|
|
end
|
|
|
|
-- Load us up
|
|
if unitPowerType and C_UIWidgetManager and C_UIWidgetManager.GetFillUpFramesWidgetVisualizationInfo then
|
|
IceHUD.DragonridingVigor = DragonridingVigor:new()
|
|
end
|