feat(necromancer): add Necromancer mana bar (mana + runic power at once)
All checks were successful
release / release (push) Successful in 2s
All checks were successful
release / release (push) Successful in 2s
Mirrors the Druid mana bar for the CoA Necromancer (class token NECROMANCER): the main power bar shows the active power type while a second bar shows the other one, so mana and runic power are both visible at the same time. Adaptive — recolors to whichever resource it is currently showing, so it works regardless of which power CoA treats as primary. Off by default; toggle under Player bars (auto-hidden for non-Necromancers).
This commit is contained in:
parent
d241fd1b5e
commit
2d9e9329db
6 changed files with 85 additions and 2 deletions
|
|
@ -2029,14 +2029,14 @@ local function loadUnitOptions()
|
||||||
},
|
},
|
||||||
sep2 = {order = 1.75, type = "description", name = "", hidden = function(info)
|
sep2 = {order = 1.75, type = "description", name = "", hidden = function(info)
|
||||||
local moduleKey = info[#(info) - 1]
|
local moduleKey = info[#(info) - 1]
|
||||||
return ( moduleKey ~= "healthBar" and moduleKey ~= "powerBar" and moduleKey ~= "druidBar" ) or not ShadowUF.db.profile.advanced
|
return ( moduleKey ~= "healthBar" and moduleKey ~= "powerBar" and moduleKey ~= "druidBar" and moduleKey ~= "necromancerBar" ) or not ShadowUF.db.profile.advanced
|
||||||
end},
|
end},
|
||||||
invert = {
|
invert = {
|
||||||
order = 2,
|
order = 2,
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
name = L["Invert colors"],
|
name = L["Invert colors"],
|
||||||
desc = L["Flips coloring so the bar color is shown as the background color and the background as the bar"],
|
desc = L["Flips coloring so the bar color is shown as the background color and the background as the bar"],
|
||||||
hidden = function(info) return ( info[#(info) - 1] ~= "healthBar" and info[#(info) - 1] ~= "powerBar" and info[#(info) - 1] ~= "druidBar" ) or not ShadowUF.db.profile.advanced end,
|
hidden = function(info) return ( info[#(info) - 1] ~= "healthBar" and info[#(info) - 1] ~= "powerBar" and info[#(info) - 1] ~= "druidBar" and info[#(info) - 1] ~= "necromancerBar" ) or not ShadowUF.db.profile.advanced end,
|
||||||
arg = "$parent.invert",
|
arg = "$parent.invert",
|
||||||
},
|
},
|
||||||
order = {
|
order = {
|
||||||
|
|
@ -2997,6 +2997,14 @@ local function loadUnitOptions()
|
||||||
hidden = hideRestrictedOption,
|
hidden = hideRestrictedOption,
|
||||||
arg = "druidBar.enabled",
|
arg = "druidBar.enabled",
|
||||||
},
|
},
|
||||||
|
necromancerBar = {
|
||||||
|
order = 1.5,
|
||||||
|
type = "toggle",
|
||||||
|
name = string.format(L["Enable %s"], L["Necromancer mana bar"]),
|
||||||
|
desc = L["Adds a second power bar to the player frame showing your mana and runic power at the same time."],
|
||||||
|
hidden = hideRestrictedOption,
|
||||||
|
arg = "necromancerBar.enabled",
|
||||||
|
},
|
||||||
xpBar = {
|
xpBar = {
|
||||||
order = 2,
|
order = 2,
|
||||||
type = "toggle",
|
type = "toggle",
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,7 @@ function ShadowUF:LoadUnitDefaults()
|
||||||
self.defaults.profile.units.player.runeBar = {enabled = false}
|
self.defaults.profile.units.player.runeBar = {enabled = false}
|
||||||
self.defaults.profile.units.player.totemBar = {enabled = false}
|
self.defaults.profile.units.player.totemBar = {enabled = false}
|
||||||
self.defaults.profile.units.player.druidBar = {enabled = false}
|
self.defaults.profile.units.player.druidBar = {enabled = false}
|
||||||
|
self.defaults.profile.units.player.necromancerBar = {enabled = false}
|
||||||
self.defaults.profile.units.player.xpBar = {enabled = false}
|
self.defaults.profile.units.player.xpBar = {enabled = false}
|
||||||
self.defaults.profile.units.player.fader = {enabled = false, combatAlpha = 1.0, inactiveAlpha = 0.60}
|
self.defaults.profile.units.player.fader = {enabled = false, combatAlpha = 1.0, inactiveAlpha = 0.60}
|
||||||
self.defaults.profile.units.player.indicators.lfdRole = {enabled = true, size = 0, x = 0, y = 0}
|
self.defaults.profile.units.player.indicators.lfdRole = {enabled = true, size = 0, x = 0, y = 0}
|
||||||
|
|
|
||||||
|
|
@ -51,5 +51,6 @@ modules\incheal.lua
|
||||||
modules\range.lua
|
modules\range.lua
|
||||||
modules\empty.lua
|
modules\empty.lua
|
||||||
modules\druid.lua
|
modules\druid.lua
|
||||||
|
modules\necromancer.lua
|
||||||
|
|
||||||
CoAClassColors.lua
|
CoAClassColors.lua
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,8 @@ L["Down"] = "Down"
|
||||||
L["Druid form"] = "Druid form"
|
L["Druid form"] = "Druid form"
|
||||||
L["Druid form (Short)"] = "Druid form (Short)"
|
L["Druid form (Short)"] = "Druid form (Short)"
|
||||||
L["Druid mana bar"] = "Druid mana bar"
|
L["Druid mana bar"] = "Druid mana bar"
|
||||||
|
L["Necromancer mana bar"] = "Necromancer mana bar"
|
||||||
|
L["Adds a second power bar to the player frame showing your mana and runic power at the same time."] = "Adds a second power bar to the player frame showing your mana and runic power at the same time."
|
||||||
L["Due to the nature of fake units, cast bars for %s are not super efficient and can take at most 0.10 seconds to notice a change in cast."] = "Due to the nature of fake units, cast bars for %s are not super efficient and can take at most 0.10 seconds to notice a change in cast."
|
L["Due to the nature of fake units, cast bars for %s are not super efficient and can take at most 0.10 seconds to notice a change in cast."] = "Due to the nature of fake units, cast bars for %s are not super efficient and can take at most 0.10 seconds to notice a change in cast."
|
||||||
L["Dungeon role"] = "Dungeon role"
|
L["Dungeon role"] = "Dungeon role"
|
||||||
L["Edge size"] = "Edge size"
|
L["Edge size"] = "Edge size"
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,7 @@ function ShadowUF:LoadDefaultLayout(useMerge)
|
||||||
healthBar = {background = true, colorType = "class", reactionType = "npc", height = 1.20, order = 10},
|
healthBar = {background = true, colorType = "class", reactionType = "npc", height = 1.20, order = 10},
|
||||||
powerBar = {background = true, height = 1.0, order = 20},
|
powerBar = {background = true, height = 1.0, order = 20},
|
||||||
druidBar = {background = true, height = 0.40, order = 25},
|
druidBar = {background = true, height = 0.40, order = 25},
|
||||||
|
necromancerBar = {background = true, height = 0.40, order = 26},
|
||||||
xpBar = {background = true, height = 0.25, order = 55},
|
xpBar = {background = true, height = 0.25, order = 55},
|
||||||
castBar = {background = true, height = 0.60, order = 40, icon = "HIDE", name = {enabled = true, size = 0, anchorTo = "$parent", rank = true, anchorPoint = "CLI", x = 1, y = 0}, time = {enabled = true, size = 0, anchorTo = "$parent", anchorPoint = "CRI", x = -1, y = 0}},
|
castBar = {background = true, height = 0.60, order = 40, icon = "HIDE", name = {enabled = true, size = 0, anchorTo = "$parent", rank = true, anchorPoint = "CLI", x = 1, y = 0}, time = {enabled = true, size = 0, anchorTo = "$parent", anchorPoint = "CRI", x = -1, y = 0}},
|
||||||
runeBar = {background = false, height = 0.40, order = 70},
|
runeBar = {background = false, height = 0.40, order = 70},
|
||||||
|
|
|
||||||
70
ShadowedUnitFrames/modules/necromancer.lua
Normal file
70
ShadowedUnitFrames/modules/necromancer.lua
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
local Necromancer = {}
|
||||||
|
ShadowUF:RegisterModule(Necromancer, "necromancerBar", ShadowUF.L["Necromancer mana bar"], true, "NECROMANCER")
|
||||||
|
|
||||||
|
-- Power type enums (3.3.5): 0 = mana, 6 = runic power.
|
||||||
|
local MANA, RUNIC_POWER = 0, 6
|
||||||
|
|
||||||
|
-- The Necromancer juggles mana and runic power. The main power bar shows
|
||||||
|
-- whichever is the active power type; this secondary bar shows the other one
|
||||||
|
-- so both are visible at once (same idea as the Druid mana bar in forms).
|
||||||
|
local function secondaryPower(unit)
|
||||||
|
local active = UnitPowerType(unit)
|
||||||
|
if( active == RUNIC_POWER ) then return MANA end
|
||||||
|
if( active == MANA ) then return RUNIC_POWER end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function Necromancer:OnEnable(frame)
|
||||||
|
frame.necromancerBar = frame.necromancerBar or ShadowUF.Units:CreateBar(frame)
|
||||||
|
|
||||||
|
frame:RegisterUnitEvent("UNIT_MAXMANA", self, "Update")
|
||||||
|
frame:RegisterUnitEvent("UNIT_MANA", self, "Update")
|
||||||
|
frame:RegisterUnitEvent("UNIT_RUNIC_POWER", self, "Update")
|
||||||
|
frame:RegisterUnitEvent("UNIT_MAXRUNIC_POWER", self, "Update")
|
||||||
|
frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", self, "PowerChanged")
|
||||||
|
|
||||||
|
frame:RegisterUpdateFunc(self, "PowerChanged")
|
||||||
|
frame:RegisterUpdateFunc(self, "Update")
|
||||||
|
end
|
||||||
|
|
||||||
|
function Necromancer:OnDisable(frame)
|
||||||
|
frame:UnregisterAll(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Necromancer:UpdateColor(frame, power)
|
||||||
|
local color = ShadowUF.db.profile.powerColors[power == RUNIC_POWER and "RUNIC_POWER" or "MANA"]
|
||||||
|
|
||||||
|
if( not ShadowUF.db.profile.units[frame.unitType].necromancerBar.invert ) then
|
||||||
|
frame.necromancerBar:SetStatusBarColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
|
||||||
|
if( not frame.necromancerBar.background.overrideColor ) then
|
||||||
|
frame.necromancerBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.backgroundAlpha)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
frame.necromancerBar.background:SetVertexColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.alpha)
|
||||||
|
|
||||||
|
color = frame.necromancerBar.background.overrideColor or color
|
||||||
|
frame.necromancerBar:SetStatusBarColor(color.r, color.g, color.b, ShadowUF.db.profile.bars.backgroundAlpha)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Necromancer:OnLayoutApplied(frame)
|
||||||
|
if( frame.visibility.necromancerBar ) then
|
||||||
|
self:UpdateColor(frame, secondaryPower(frame.unit) or MANA)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Show the bar whenever there is a second power type to display, and recolor it
|
||||||
|
-- to match whichever resource that currently is.
|
||||||
|
function Necromancer:PowerChanged(frame)
|
||||||
|
local power = secondaryPower(frame.unit)
|
||||||
|
ShadowUF.Layout:SetBarVisibility(frame, "necromancerBar", power ~= nil)
|
||||||
|
if( power ) then
|
||||||
|
self:UpdateColor(frame, power)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Necromancer:Update(frame)
|
||||||
|
local power = secondaryPower(frame.unit) or MANA
|
||||||
|
frame.necromancerBar:SetMinMaxValues(0, UnitPowerMax(frame.unit, power))
|
||||||
|
frame.necromancerBar:SetValue(UnitIsDeadOrGhost(frame.unit) and 0 or not UnitIsConnected(frame.unit) and 0 or UnitPower(frame.unit, power))
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue