mirror of
https://github.com/parnic/ice-hud.git
synced 2025-06-16 22:51:53 -05:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
5d09cad6cb
|
|||
8fc2e326aa
|
|||
d775603ec0
|
|||
70bba2f186
|
|||
8ac9bee610
|
|||
07bda8e84d
|
@ -707,6 +707,11 @@ function IceCastBar.prototype:SpellCastSucceeded(event, unit, castGuid, spellId)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- handle special spells that are used for quests or other things that don't apply to the player
|
||||||
|
if self.unit == "player" and not IsPlayerSpell(spellId) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
self:StartBar(IceCastBar.Actions.Success, spell.. self:GetShortRank(rank), spellId)
|
self:StartBar(IceCastBar.Actions.Success, spell.. self:GetShortRank(rank), spellId)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -645,10 +645,11 @@ function IceCore.prototype:GetModuleOptions()
|
|||||||
|
|
||||||
for i = 1, table.getn(self.elements) do
|
for i = 1, table.getn(self.elements) do
|
||||||
local modName = self.elements[i]:GetElementName()
|
local modName = self.elements[i]:GetElementName()
|
||||||
|
local modDesc = self.elements[i]:GetElementDescription()
|
||||||
local opt = self.elements[i]:GetOptions()
|
local opt = self.elements[i]:GetOptions()
|
||||||
options[modName] = {
|
options[modName] = {
|
||||||
type = 'group',
|
type = 'group',
|
||||||
desc = L["Module options"],
|
desc = modDesc,
|
||||||
name = modName,
|
name = modName,
|
||||||
args = opt
|
args = opt
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,10 @@ function IceElement.prototype:GetElementName()
|
|||||||
return self.elementName
|
return self.elementName
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceElement.prototype:GetElementDescription()
|
||||||
|
return L["Module options"]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function IceElement.prototype:Create(parent)
|
function IceElement.prototype:Create(parent)
|
||||||
assert(parent, "IceElement 'parent' can't be nil")
|
assert(parent, "IceElement 'parent' can't be nil")
|
||||||
|
@ -100,6 +100,7 @@ modules\PlayerAltMana.lua
|
|||||||
modules\ArcaneCharges.lua
|
modules\ArcaneCharges.lua
|
||||||
modules\RollTheBones.lua
|
modules\RollTheBones.lua
|
||||||
modules\EssencePower.lua
|
modules\EssencePower.lua
|
||||||
|
modules\DruidEnergy.lua
|
||||||
|
|
||||||
#@do-not-package@
|
#@do-not-package@
|
||||||
IceHUD_Options\Json.lua
|
IceHUD_Options\Json.lua
|
||||||
|
10
changelog.md
10
changelog.md
@ -1,5 +1,15 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
v1.14.7:
|
||||||
|
|
||||||
|
- Add option to scale absorb bar by the unit's maximum health.
|
||||||
|
|
||||||
|
v1.14.6:
|
||||||
|
|
||||||
|
- Add ability for buff/debuff watchers to only display when the specified buff/debuff is missing. This also adds the ability to require that the given unit exists. So if you had Unit set to Target, Display mode set to Missing, and Only if unit exists checked, you'd show the bar if you have a target and they don't have the given buff/debuff.
|
||||||
|
- Don't flash the castbar for instant-cast spells that the player didn't cast (such as internal quest spells).
|
||||||
|
- Add DruidEnergy module (disabled by default). This module will show the player's Energy level if they're a Druid and currently shapeshifted to a non-energy-using form (eligible forms are configurable by the user).
|
||||||
|
|
||||||
v1.14.5:
|
v1.14.5:
|
||||||
|
|
||||||
- Fix castbar flashing. There are controls on the player castbar module for flashing when a spell succeeds or fails, and separate controls for flashing when an instant cast completes. Those were broken, but now work again.
|
- Fix castbar flashing. There are controls on the player castbar module for flashing when a spell succeeds or fails, and separate controls for flashing when an instant cast completes. Those were broken, but now work again.
|
||||||
|
@ -10,6 +10,7 @@ local buffOrDebuff = {"buff", "debuff"}
|
|||||||
local validBuffTimers = {"none", "seconds", "minutes:seconds", "minutes"}
|
local validBuffTimers = {"none", "seconds", "minutes:seconds", "minutes"}
|
||||||
local AuraIconWidth = 20
|
local AuraIconWidth = 20
|
||||||
local AuraIconHeight = 20
|
local AuraIconHeight = 20
|
||||||
|
local displayModes = {NORMAL = L["When present"], ALWAYS = L["Always"], WHEN_TARGETING = L["Always, when targeting"], MISSING = L["When missing"]}
|
||||||
|
|
||||||
IceCustomBar.prototype.auraDuration = -1
|
IceCustomBar.prototype.auraDuration = -1
|
||||||
IceCustomBar.prototype.auraEndTime = -1
|
IceCustomBar.prototype.auraEndTime = -1
|
||||||
@ -28,6 +29,16 @@ end
|
|||||||
function IceCustomBar.prototype:Enable(core)
|
function IceCustomBar.prototype:Enable(core)
|
||||||
IceCustomBar.super.prototype.Enable(self, core)
|
IceCustomBar.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
|
-- fix up for new display mode setting
|
||||||
|
if self.moduleSettings.displayWhenTargeting then
|
||||||
|
self.moduleSettings.displayMode = displayModes.WHEN_TARGETING
|
||||||
|
self.moduleSettings.displayWhenTargeting = nil
|
||||||
|
end
|
||||||
|
if self.moduleSettings.displayWhenEmpty then
|
||||||
|
self.moduleSettings.displayMode = displayModes.ALWAYS
|
||||||
|
self.moduleSettings.displayWhenEmpty = nil
|
||||||
|
end
|
||||||
|
|
||||||
if IceHUD.IceCore:ShouldUseDogTags() then
|
if IceHUD.IceCore:ShouldUseDogTags() then
|
||||||
DogTag = LibStub("LibDogTag-3.0", true)
|
DogTag = LibStub("LibDogTag-3.0", true)
|
||||||
if DogTag then
|
if DogTag then
|
||||||
@ -149,8 +160,7 @@ function IceCustomBar.prototype:GetDefaultSettings()
|
|||||||
settings["buffOrDebuff"] = "buff"
|
settings["buffOrDebuff"] = "buff"
|
||||||
settings["barColor"] = {r=1, g=0, b=0, a=1}
|
settings["barColor"] = {r=1, g=0, b=0, a=1}
|
||||||
settings["trackOnlyMine"] = true
|
settings["trackOnlyMine"] = true
|
||||||
settings["displayWhenEmpty"] = false
|
settings["displayMode"] = displayModes.NORMAL
|
||||||
settings["displayWhenTargeting"] = false
|
|
||||||
settings["hideAnimationSettings"] = true
|
settings["hideAnimationSettings"] = true
|
||||||
settings["buffTimerDisplay"] = "minutes"
|
settings["buffTimerDisplay"] = "minutes"
|
||||||
settings["maxDuration"] = 0
|
settings["maxDuration"] = 0
|
||||||
@ -431,38 +441,39 @@ function IceCustomBar.prototype:GetOptions()
|
|||||||
order = 30.8,
|
order = 30.8,
|
||||||
}
|
}
|
||||||
|
|
||||||
opts["displayWhenEmpty"] = {
|
opts["displayMode"] = {
|
||||||
type = 'toggle',
|
type = 'select',
|
||||||
name = L["Display when empty"],
|
values = displayModes,
|
||||||
desc = L["Whether or not to display this bar even if the buff/debuff specified is not present."],
|
name = L["Display mode"],
|
||||||
get = function()
|
desc = L["When to show the bar"],
|
||||||
return self.moduleSettings.displayWhenEmpty
|
get = function(info)
|
||||||
|
return IceHUD:GetSelectValue(info, self.moduleSettings.displayMode)
|
||||||
end,
|
end,
|
||||||
set = function(info, v)
|
set = function(info, v)
|
||||||
self.moduleSettings.displayWhenEmpty = v
|
self.moduleSettings.displayMode = info.option.values[v]
|
||||||
self:UpdateCustomBar()
|
self:UpdateCustomBar()
|
||||||
end,
|
end,
|
||||||
disabled = function()
|
disabled = function()
|
||||||
return not self.moduleSettings.enabled
|
return not self.moduleSettings.enabled
|
||||||
end,
|
end,
|
||||||
order = 30.9
|
order = 30.9,
|
||||||
}
|
}
|
||||||
|
|
||||||
opts["displayWhenTargeting"] = {
|
opts["displayWhenUnitExists"] = {
|
||||||
type = 'toggle',
|
type = 'toggle',
|
||||||
name = L["Display when targeting"],
|
name = L["Only if unit exists"],
|
||||||
desc = L["Whether to display this bar when you target a unit, even if the buff/debuff specified is not present."],
|
desc = L["If checked, the bar will only be displayed (according to the 'Display mode' rules) when the Unit to Track exists (e.g. if set to Target and you're targeting something)."],
|
||||||
get = function()
|
get = function(info)
|
||||||
return self.moduleSettings.displayWhenTargeting
|
return self.moduleSettings.displayWhenUnitExists
|
||||||
end,
|
end,
|
||||||
set = function(info, v)
|
set = function(info, v)
|
||||||
self.moduleSettings.displayWhenTargeting = v
|
self.moduleSettings.displayWhenUnitExists = v
|
||||||
self:UpdateCustomBar()
|
self:UpdateCustomBar()
|
||||||
end,
|
end,
|
||||||
disabled = function()
|
disabled = function()
|
||||||
return not self.moduleSettings.enabled
|
return not self.moduleSettings.enabled
|
||||||
end,
|
end,
|
||||||
order = 30.91
|
order = 30.91,
|
||||||
}
|
}
|
||||||
|
|
||||||
opts["buffTimerDisplay"] = {
|
opts["buffTimerDisplay"] = {
|
||||||
@ -866,9 +877,16 @@ function IceCustomBar.prototype:Show(bShouldShow, bForceHide)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.moduleSettings.displayWhenTargeting and self.target then
|
if self.moduleSettings.displayWhenUnitExists and not UnitExists(self.unit) then
|
||||||
|
IceCustomBar.super.prototype.Show(self, false)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.moduleSettings.displayMode == displayModes.MISSING then
|
||||||
|
IceCustomBar.super.prototype.Show(self, not bShouldShow)
|
||||||
|
elseif self.moduleSettings.displayMode == displayModes.WHEN_TARGETING and self.target then
|
||||||
IceCustomBar.super.prototype.Show(self, true)
|
IceCustomBar.super.prototype.Show(self, true)
|
||||||
elseif self.moduleSettings.displayWhenEmpty then
|
elseif self.moduleSettings.displayMode == displayModes.ALWAYS then
|
||||||
if not self.bIsVisible then
|
if not self.bIsVisible then
|
||||||
IceCustomBar.super.prototype.Show(self, true)
|
IceCustomBar.super.prototype.Show(self, true)
|
||||||
end
|
end
|
||||||
|
123
modules/DruidEnergy.lua
Normal file
123
modules/DruidEnergy.lua
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||||
|
local DruidEnergy = IceCore_CreateClass(IceUnitBar)
|
||||||
|
|
||||||
|
DruidEnergy.prototype.DruidEnergy = nil
|
||||||
|
DruidEnergy.prototype.DruidEnergyMax = nil
|
||||||
|
|
||||||
|
local _, unitClass = UnitClass("player")
|
||||||
|
|
||||||
|
local FORM_NONE = 0
|
||||||
|
local FORM_BEAR = 1
|
||||||
|
local FORM_TRAVEL = 3
|
||||||
|
|
||||||
|
local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
|
||||||
|
if Enum and Enum.PowerType then
|
||||||
|
SPELL_POWER_ENERGY = Enum.PowerType.Energy
|
||||||
|
end
|
||||||
|
|
||||||
|
local shapeshiftFormValues = {NONE = L["No form"], BEAR = L["Bear"], TRAVEL = L["Travel"], OTHER = L["Other"]}
|
||||||
|
local shapeshiftFormIds = {NONE = FORM_NONE, BEAR = FORM_BEAR, TRAVEL = FORM_TRAVEL}
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:init()
|
||||||
|
DruidEnergy.super.prototype.init(self, "DruidEnergy", "player")
|
||||||
|
|
||||||
|
self.side = IceCore.Side.Left
|
||||||
|
self.offset = 5
|
||||||
|
|
||||||
|
self:SetDefaultColor("DruidEnergy", 218, 231, 31)
|
||||||
|
end
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:GetDefaultSettings()
|
||||||
|
local settings = DruidEnergy.super.prototype.GetDefaultSettings(self)
|
||||||
|
|
||||||
|
settings["side"] = IceCore.Side.Left
|
||||||
|
settings["offset"] = 5
|
||||||
|
settings["textVisible"] = {upper = true, lower = false}
|
||||||
|
settings["upperText"] = "[PercentMP(type='Energy'):Round]"
|
||||||
|
settings["lowerText"] = "[FractionalMP(type='Energy'):Color('dae71f'):Bracket]"
|
||||||
|
settings.enabled = false
|
||||||
|
settings.whileInForm = {["BEAR"] = true}
|
||||||
|
|
||||||
|
return settings
|
||||||
|
end
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:GetOptions()
|
||||||
|
local opts = DruidEnergy.super.prototype.GetOptions(self)
|
||||||
|
|
||||||
|
opts["whileInForm"] = {
|
||||||
|
type = 'multiselect',
|
||||||
|
values = shapeshiftFormValues,
|
||||||
|
name = L["Show in form"],
|
||||||
|
desc = L["When the player is in one of the chosen shapeshift forms the bar will be shown, otherwise it will be hidden."],
|
||||||
|
get = function(info, v)
|
||||||
|
for key, value in pairs(self.moduleSettings.whileInForm) do
|
||||||
|
if key == v then
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
set = function(info, v, state)
|
||||||
|
self.moduleSettings.whileInForm[v] = state
|
||||||
|
self:Update()
|
||||||
|
end,
|
||||||
|
disabled = function()
|
||||||
|
return not self.moduleSettings.enabled
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
return opts
|
||||||
|
end
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:Enable(core)
|
||||||
|
DruidEnergy.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
|
self:RegisterEvent("UPDATE_SHAPESHIFT_FORM", "Update")
|
||||||
|
self:RegisterEvent("UNIT_POWER_FREQUENT", "Update")
|
||||||
|
self:RegisterEvent("UNIT_MAXPOWER", "Update")
|
||||||
|
end
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:GetElementDescription()
|
||||||
|
return L["Always shows the Druid's Energy level while in non-energy-using forms."]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:ShouldShow(unit)
|
||||||
|
local currentForm = GetShapeshiftForm()
|
||||||
|
for k, v in pairs(self.moduleSettings.whileInForm) do
|
||||||
|
if currentForm > FORM_TRAVEL and k == "OTHER" then
|
||||||
|
return v
|
||||||
|
elseif currentForm == shapeshiftFormIds[k] then
|
||||||
|
return v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function DruidEnergy.prototype:Update()
|
||||||
|
DruidEnergy.super.prototype.Update(self)
|
||||||
|
|
||||||
|
self.DruidEnergy = UnitPower(self.unit, SPELL_POWER_ENERGY)
|
||||||
|
self.DruidEnergyMax = UnitPowerMax(self.unit, SPELL_POWER_ENERGY)
|
||||||
|
self.DruidEnergyPercentage = self.DruidEnergyMax ~= 0 and (self.DruidEnergy/self.DruidEnergyMax) or 0
|
||||||
|
|
||||||
|
if (not self.alive or not self:ShouldShow(self.unit) or not self.DruidEnergy or not self.DruidEnergyMax or self.DruidEnergyMax == 0) then
|
||||||
|
self:Show(false)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
self:Show(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
|
||||||
|
self:SetBottomText1(math.floor(self.DruidEnergyPercentage * 100))
|
||||||
|
self:SetBottomText2(self:GetFormattedText(self:Round(self.DruidEnergy), self:Round(self.DruidEnergyMax)), "DruidEnergy")
|
||||||
|
end
|
||||||
|
|
||||||
|
self:UpdateBar(self.DruidEnergyMax ~= 0 and self.DruidEnergy / self.DruidEnergyMax or 0, "DruidEnergy")
|
||||||
|
end
|
||||||
|
|
||||||
|
if unitClass == "DRUID" then
|
||||||
|
IceHUD.DruidEnergy = DruidEnergy:new()
|
||||||
|
end
|
@ -1,3 +1,4 @@
|
|||||||
|
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
|
||||||
IceTargetAbsorb = IceCore_CreateClass(IceUnitBar)
|
IceTargetAbsorb = IceCore_CreateClass(IceUnitBar)
|
||||||
|
|
||||||
IceTargetAbsorb.prototype.highestAbsorbSinceLastZero = 0
|
IceTargetAbsorb.prototype.highestAbsorbSinceLastZero = 0
|
||||||
@ -29,6 +30,28 @@ function IceTargetAbsorb.prototype:GetDefaultSettings()
|
|||||||
return settings
|
return settings
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function IceTargetAbsorb.prototype:GetOptions()
|
||||||
|
local opts = IceTargetAbsorb.super.prototype.GetOptions(self)
|
||||||
|
|
||||||
|
opts["scaleToUnitHealth"] = {
|
||||||
|
type = 'toggle',
|
||||||
|
name = L["Scale to health"],
|
||||||
|
desc = L["Whether the bar's maximum value should be set to the unit's maximum health or not. If set, any absorb above that amount will not be shown."],
|
||||||
|
get = function()
|
||||||
|
return self.moduleSettings.scaleToUnitHealth
|
||||||
|
end,
|
||||||
|
set = function(info, v)
|
||||||
|
self.moduleSettings.scaleToUnitHealth = v
|
||||||
|
self:Update()
|
||||||
|
end,
|
||||||
|
disabled = function()
|
||||||
|
return not self.moduleSettings.enabled
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
return opts
|
||||||
|
end
|
||||||
|
|
||||||
function IceTargetAbsorb.prototype:Enable(core)
|
function IceTargetAbsorb.prototype:Enable(core)
|
||||||
IceTargetAbsorb.super.prototype.Enable(self, core)
|
IceTargetAbsorb.super.prototype.Enable(self, core)
|
||||||
|
|
||||||
@ -47,6 +70,7 @@ function IceTargetAbsorb.prototype:MyUnregisterCustomEvents()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function IceTargetAbsorb.prototype:Update()
|
function IceTargetAbsorb.prototype:Update()
|
||||||
|
IceTargetAbsorb.super.prototype.Update(self)
|
||||||
self:UpdateAbsorbAmount()
|
self:UpdateAbsorbAmount()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -63,13 +87,17 @@ function IceTargetAbsorb.prototype:UpdateAbsorbAmount(event, unit)
|
|||||||
self.highestAbsorbSinceLastZero = absorbAmount
|
self.highestAbsorbSinceLastZero = absorbAmount
|
||||||
end
|
end
|
||||||
|
|
||||||
self.absorbPercent = self.highestAbsorbSinceLastZero ~= 0 and absorbAmount / self.highestAbsorbSinceLastZero or 0
|
local maxAbsorb = self.highestAbsorbSinceLastZero
|
||||||
|
if self.moduleSettings.scaleToUnitHealth then
|
||||||
|
maxAbsorb = self.maxHealth
|
||||||
|
end
|
||||||
|
self.absorbPercent = maxAbsorb ~= 0 and IceHUD:Clamp(absorbAmount / maxAbsorb, 0, 1) or 0
|
||||||
|
|
||||||
if absorbAmount <= 0 or self.highestAbsorbSinceLastZero <= 0 then
|
if absorbAmount <= 0 or maxAbsorb <= 0 then
|
||||||
self:Show(false)
|
self:Show(false)
|
||||||
else
|
else
|
||||||
self:Show(true)
|
self:Show(true)
|
||||||
self:UpdateBar(absorbAmount / self.highestAbsorbSinceLastZero, self.ColorName)
|
self:UpdateBar(self.absorbPercent, self.ColorName)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
|
if not IceHUD.IceCore:ShouldUseDogTags() and self.frame:IsVisible() then
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
v1.14.7:
|
||||||
|
|
||||||
|
- Add option to scale absorb bar by the unit's maximum health.
|
||||||
|
|
||||||
|
v1.14.6:
|
||||||
|
|
||||||
|
- Add ability for buff/debuff watchers to only display when the specified buff/debuff is missing. This also adds the ability to require that the given unit exists. So if you had Unit set to Target, Display mode set to Missing, and Only if unit exists checked, you'd show the bar if you have a target and they don't have the given buff/debuff.
|
||||||
|
- Don't flash the castbar for instant-cast spells that the player didn't cast (such as internal quest spells).
|
||||||
|
- Add DruidEnergy module (disabled by default). This module will show the player's Energy level if they're a Druid and currently shapeshifted to a non-energy-using form (eligible forms are configurable by the user).
|
||||||
|
|
||||||
v1.14.5:
|
v1.14.5:
|
||||||
|
|
||||||
- Fix castbar flashing. There are controls on the player castbar module for flashing when a spell succeeds or fails, and separate controls for flashing when an instant cast completes. Those were broken, but now work again.
|
- Fix castbar flashing. There are controls on the player castbar module for flashing when a spell succeeds or fails, and separate controls for flashing when an instant cast completes. Those were broken, but now work again.
|
||||||
|
Reference in New Issue
Block a user