Compare commits

...

22 Commits

Author SHA1 Message Date
f74233dcfa Tweaked and updated the FAQ a bit 2016-09-05 23:23:12 -05:00
0c729d77e9 Amended 29dc1b89 to be controlled by its own option
Instead of changing a behavior that's years old out from under people, let's make it opt-in.
2016-09-05 21:50:43 -05:00
7ec918ecb6 Added user-submitted Roll the Bones module (ticket #220, thanks Zahariel!) 2016-09-04 16:14:03 -05:00
29dc1b8955 Allow "scale mana color" to work with class-specific mana types 2016-09-04 08:05:00 -05:00
e36b87a407 Fixed TargetInfo debuffs not having the same frame as buffs 2016-08-31 23:07:54 -05:00
880e2e3278 Added support for the Pain mana type 2016-08-18 23:00:06 -05:00
a5de40f087 Added colors for Maelstrom mana
Fixed TargetMana to use Insanity, Fury, and Maelstrom colors correctly
2016-08-15 23:16:57 -05:00
6090814d4e Fixed error on startup in 7.0 for users with old MaelstromCount, SunderCount, or LacerateCount modules in their settings. 2016-08-15 23:10:58 -05:00
c78f618149 Fixed speed and reliability of absorb bars reacting to changes 2016-08-07 17:16:57 -05:00
6133a59ef3 Added Maelstrom to the list of powers to treat 0 as full for opacity purposes 2016-08-07 16:44:13 -05:00
a201aa5149 Fixed incorrect texture drawing behind power counters
Looks like at some point I modified how "darkened" inactive powers worked and ended up drawing two copies of the darkened power counter for each inactive power. "runebg" is superfluous since we're just setting the color of the actual counter to black and partially transparent instead. For some power counters, such as Paladins, the runebg texture was actually wrong and drawing the entire atlas rather than just the texture we wanted.
2016-07-26 21:37:45 -05:00
34d3060df3 Fixed castbar interruption on 7.0 clients
Looks like some things changed in spellcast events on 7.0 which necessitate using the spellcast GUID to identify when a specific cast starts or stops. Now we use those GUIDs which restores the castbar to its appropriate behavior. (ticket #215)
2016-07-25 13:02:14 -05:00
9e7b34d43c Disabled Resolved for 7.0 clients 2016-07-25 12:33:20 -05:00
2d4d32fa1f Fixed SnD error introduced in 46152e92 2016-07-24 19:01:54 -05:00
ca544384b8 Fixed bar rotation breaking low thresholds
I guess something in the 7.0 client must have changed how animations work for inherited frames because it would appear that the RotateFrame call for the child flashFrame is now causing issues somehow. Removing the call allows the flash/low threshold frame to travel alongside the parent frame when rotating.
2016-07-24 17:04:07 -05:00
46152e92f4 Fixed rotation not resetting on profile change
When the player had one profile with a bar rotated 90 degrees and another profile with the same bar not rotated, the non-rotated profile would fail to put the bar back in its original location. Thanks for the detailed report, spacegato!
2016-07-24 16:52:12 -05:00
f0cafee719 Added recent FAQs 2016-07-23 21:43:49 -05:00
f8c7875501 Fixed HarmonyPower Hide Blizzard option generating errors 2016-07-22 11:45:35 -05:00
715f9584fb Fixed "Hide Blizzard" option in Holy Power module in 7.0 2016-07-20 12:42:03 -05:00
6824721947 Fixed TargetMana to match PlayerMana colors/alpha
Forgot to update this module to match the new 7.0/Legion stuff like PlayerMana was already doing. I really should be sharing all this code, but alas.
2016-07-19 23:49:54 -05:00
0ac00068b3 Added new mana types to consider 0 as "full"
For the purposes of alpha settings, 0 is "full" for several mana types, such as the new/changed 7.0 ones (astral power, insanity, fury).
2016-07-19 23:45:51 -05:00
5ca6f20944 Fixed minor inefficient texture access
Also fixed an issue where we were looking for a variable that was not declared in the scope we were looking for it in.
2016-07-19 10:11:58 -05:00
18 changed files with 1594 additions and 1152 deletions

View File

@ -946,6 +946,8 @@ function IceBarElement.prototype:CreateFrame()
if self.moduleSettings.rotateBar then
self:RotateHorizontal()
else
self:ResetRotation()
end
end

File diff suppressed because it is too large Load Diff

View File

@ -272,7 +272,7 @@ end
function IceCore.prototype:RedirectRemovedModules()
local _, class = UnitClass("player")
if class == "WARRIOR" and self.settings.modules["SunderCount"] and IceHUD.WowVer < 60000 then
if class == "WARRIOR" and self.settings.modules["SunderCount"] and GetSpellInfo(SUNDER_SPELL_ID) and IceHUD.WowVer < 60000 then
if self.settings.modules["SunderCount"].enabled or self.settings.modules["SunderCount"].enabled == nil then
local bFound = false
@ -309,7 +309,7 @@ function IceCore.prototype:RedirectRemovedModules()
self.settings.modules["SunderCount"] = nil
end
if class == "DRUID" and self.settings.modules["LacerateCount"] then
if class == "DRUID" and self.settings.modules["LacerateCount"] and GetSpellInfo(LACERATE_SPELL_ID) then
if self.settings.modules["LacerateCount"].enabled or self.settings.modules["LacerateCount"].enabled == nil then
local bFound = false
for k,v in pairs(self.elements) do
@ -346,7 +346,7 @@ function IceCore.prototype:RedirectRemovedModules()
self.settings.modules["LacerateCount"] = nil
end
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] then
if class == "SHAMAN" and self.settings.modules["MaelstromCount"] and GetSpellInfo(MAELSTROM_SPELL_ID) then
if self.settings.modules["MaelstromCount"].enabled or self.settings.modules["MaelstromCount"].enabled == nil then
local bFound = false
for k,v in pairs(self.elements) do

View File

@ -89,6 +89,7 @@ modules\FocusAbsorb.lua
modules\Stagger.lua
modules\PlayerAltMana.lua
modules\ArcaneCharges.lua
modules\RollTheBones.lua
#@do-not-package@
IceHUD_Options\Options.lua

View File

@ -65,19 +65,25 @@ Expand "|cffffdc42Module Settings|r", expand PlayerHealth (or TargetHealth for t
Expand "|cffffdc42Module Settings|r", expand PlayerInfo (or TargetInfo for targets), select Buff Settings or Debuff Settings, and un-check "show buffs" (or "show debuffs").
|cff9999ff12. How do I turn off these big huge bars that pulse whenever one of my abilities procs?|r
This isn't |cff9999ffIceHUD|r - it's Blizzard's new Spell Alerts they added in 4.0.1. Interface options => Combat => "Show Spell Alerts" to turn them off or search for a mod to tweak their positioning/size/etc.
This isn't |cff9999ffIceHUD|r - it's Blizzard's Spell Alerts they added in 4.0.1. Interface options => Combat => "Spell Alert Opacity" to turn them off or search for a mod to tweak their positioning/size/etc.
|cff9999ff13. I don't like where some of the bars are placed. How do I put the health/mana on the left/right?|r
Expand "|cffffdc42Module Settings|r", expand whatever module you want to move (e.g. PlayerHealth, PlayerMana), and adjust the "Side" and "Offset" settings. "Side" controls whether it's on the left or the right and "Offset" controls how far from center it is.
|cff9999ff14. Which module displays Monk Chi power?|r
This module is called HarmonyPower. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
This module is called |cffdcff42HarmonyPower|r. Harmony was the original name for Chi back when 5.0 was in beta, so I used Blizzard's name for it while I was developing for Cataclysm. I feel like it's too late to change now that many people are familiar with the Harmony name.
|cff9999ff15. How do I add commas/periods into big numbers like health?|r
If you have DogTags enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
If you have |cff42ffffDogTags|r enabled, you can open the Text Settings for the module in question and add SeparateDigits() around the tag you're trying to split up. To display Health/MaxHealth with commas, use: [(SeparateDigits(HP):HPColor "/" SeparateDigits(MaxHP):HPColor):Bracket]. To use periods instead of commas, use: [(SeparateDigits(HP, "."):HPColor "/" SeparateDigits(MaxHP, "."):HPColor):Bracket]. Use the /dog help menu to build your own similar tags for Mana, etc.
|cff9999ff16. The countdown timers on buffs and debuffs completely obscure the icon. How do I disable the timer text?|r
IceHUD is not responsible for this countdown text and cannot control it. The 6.0 patch added an option in the game client to display counts on top of cooldowns. Look at the Action Bars menu under the game's Interface options. You can turn the text on or off there. Mods like OmniCC or CooldownCount will generally give you the same feature but allow you to control when, where, and how the text shows up.]]
|cff9999ffIceHUD|r is not responsible for this countdown text and cannot control it. The 6.0 patch added an option in the game client to display counts on top of cooldowns. Look at the Action Bars menu under the game's Interface options. You can turn the text on or off there. Mods like |cff42ffffOmniCC|r or |cff42ffffCooldownCount|r will generally give you the same feature but allow you to control when, where, and how the text shows up.
|cff9999ff17. When I rotate some modules 90 degrees, such as the castbar, the bar appears to wiggle up and down as it fills or empties. How do I fix this?|r
This is a side effect of the animation API that I'm co-opting to force a rotation without having to provide duplicates of every bar texture in the mod. Any bar moving sufficiently quickly and updating rapidly will cause this. |cff9999ffIceHUD|r is intended to be a vertically-oriented mod, so the rotation feature is there for people who are willing to accept the side effects that come with it. My suggestion is to use one of the many horizontally-oriented bar mods out there if you're wanting horizontal bars. |cff42ffffQuartz|r is a good castbar replacement that you can use and disable |cff9999ffIceHUD|r's built-in castbar, for example.
|cff9999ff18. How do I get rid of the bars that showed up beneath the player in the 7.0 patch?|r
Blizzard added a "Personal Resource Display" feature in the 7.0 game client. You can disable it in the Game options -> Interface -> Names -> Personal Resource Display.]]
}
}
},

View File

@ -197,13 +197,15 @@ end
function IceUnitBar.prototype:RotateHorizontal()
IceUnitBar.super.prototype.RotateHorizontal(self)
self:RotateFrame(self.flashFrame)
if IceHUD.WowVer < 70000 then
self:RotateFrame(self.flashFrame)
end
end
function IceUnitBar.prototype:ResetRotation()
IceUnitBar.super.prototype.ResetRotation(self)
if self.flashFrame.anim then
if IceHUD.WowVer < 70000 and self.flashFrame and self.flashFrame.anim then
self.flashFrame.anim:Stop()
end
end

File diff suppressed because it is too large Load Diff

View File

@ -684,11 +684,6 @@ function IceClassPowerCounter.prototype:SetDisplayMode()
for i=1, self.numRunes do
self:SetupRuneTexture(i)
self.frame.graphical[i]:Show()
if self.moduleSettings.inactiveDisplayMode == "Darkened" then
self.frame.graphical[i].runebg:Show()
else
self.frame.graphical[i].runebg:Hide()
end
end
end
end
@ -723,8 +718,6 @@ function IceClassPowerCounter.prototype:CreateRune(i)
self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "ARTWORK")
self.frame.graphical[i].rune:SetVertexColor(0, 0, 0)
self.frame.graphical[i].runebg = self.frame.graphical[i]:CreateTexture(nil, "BACKGROUND")
self.frame.graphical[i].runebg:SetVertexColor(0, 0, 0)
self:SetupRuneTexture(i)
self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY")
@ -749,14 +742,10 @@ function IceClassPowerCounter.prototype:CreateRune(i)
self.frame.graphical[i]:SetHeight(self.runeHeight)
self.frame.graphical[i].rune:SetWidth(self.runeWidth)
self.frame.graphical[i].rune:SetHeight(self.runeHeight)
self.frame.graphical[i].runebg:SetWidth(self.runeWidth)
self.frame.graphical[i].runebg:SetHeight(self.runeHeight)
if self.currentGrowMode == self.growModes["width"] then
self.frame.graphical[i].rune:SetPoint("LEFT", self.frame.graphical[i], "LEFT")
self.frame.graphical[i].runebg:SetPoint("LEFT", self.frame.graphical[i], "LEFT")
else
self.frame.graphical[i].rune:SetPoint("BOTTOM", self.frame.graphical[i], "BOTTOM")
self.frame.graphical[i].runebg:SetPoint("BOTTOM", self.frame.graphical[i], "BOTTOM")
end
end
@ -774,7 +763,6 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
-- make sure any texture aside from the special one is square and has the proper coordinates
self.frame.graphical[rune].rune:SetTexCoord(a, b, c, d)
self.frame.graphical[rune].runebg:SetTexCoord(a, b, c, d)
self.frame.graphical[rune]:SetWidth(width)
self.frame:SetWidth(width*self.numRunes)
local runeAdjust = rune - (self.numRunes / 2) - 0.5
@ -787,7 +775,7 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
if self:GetRuneMode() == "Graphical" then
local tex = self:GetRuneTexture(rune)
if tex then
self.frame.graphical[rune].rune:SetTexture(self:GetRuneTexture(rune))
self.frame.graphical[rune].rune:SetTexture(tex)
else
self.frame.graphical[rune].rune:SetAtlas(self:GetRuneAtlas(rune), self:UseAtlasSize(rune))
end
@ -800,11 +788,6 @@ function IceClassPowerCounter.prototype:SetupRuneTexture(rune)
elseif self:GetRuneMode() == "Graphical Clean Circle" then
self.frame.graphical[rune].rune:SetTexture(IceElement.TexturePath .. "ComboCleanCurves")
end
if tex then
self.frame.graphical[rune].runebg:SetTexture(self.frame.graphical[rune].rune:GetTexture())
else
self.frame.graphical[rune].runebg:SetAtlas(self.frame.graphical[rune].rune:GetAtlas())
end
end
function IceClassPowerCounter.prototype:GetAlphaAdd()

View File

@ -91,15 +91,23 @@ function HarmonyPower.prototype:GetRuneTexture(rune)
end
function HarmonyPower.prototype:ShowBlizz()
MonkHarmonyBar:Show()
local frame = MonkHarmonyBarFrame
if frame == nil then
frame = MonkHarmonyBar
end
MonkHarmonyBar:GetScript("OnLoad")(MonkHarmonyBar)
frame:Show()
frame:GetScript("OnLoad")(frame)
end
function HarmonyPower.prototype:HideBlizz()
MonkHarmonyBar:Hide()
local frame = MonkHarmonyBarFrame
if frame == nil then
frame = MonkHarmonyBar
end
MonkHarmonyBar:UnregisterAllEvents()
frame:Hide()
frame:UnregisterAllEvents()
end
-- Load us up

View File

@ -78,15 +78,23 @@ function HolyPower.prototype:GetRuneTexture(rune)
end
function HolyPower.prototype:ShowBlizz()
PaladinPowerBar:Show()
local frame = PaladinPowerBarFrame
if frame == nil then
frame = PaladinPowerBar
end
PaladinPowerBar:GetScript("OnLoad")(PaladinPowerBar)
frame:Show()
frame:GetScript("OnLoad")(frame)
end
function HolyPower.prototype:HideBlizz()
PaladinPowerBar:Hide()
local frame = PaladinPowerBarFrame
if frame == nil then
frame = PaladinPowerBar
end
PaladinPowerBar:UnregisterAllEvents()
frame:Hide()
frame:UnregisterAllEvents()
end
function HolyPower.prototype:UpdateRunePower(event)

View File

@ -17,11 +17,5 @@ function PlayerAbsorb.prototype:GetDefaultSettings()
return settings
end
function PlayerAbsorb.prototype:MyRegisterCustomEvents()
end
function PlayerAbsorb.prototype:MyUnregisterCustomEvents()
end
-- Load us up
IceHUD.PlayerAbsorb = PlayerAbsorb:new()

View File

@ -19,6 +19,8 @@ function PlayerMana.prototype:init()
if IceHUD.WowVer >= 70000 then
self:SetDefaultColor("PlayerInsanity", 150, 50, 255)
self:SetDefaultColor("PlayerFury", 255, 50, 255)
self:SetDefaultColor("PlayerMaelstrom", 62, 54, 152)
self:SetDefaultColor("PlayerPain", 255, 50, 255)
end
end
@ -98,6 +100,27 @@ end
order = 53
}
opts["scaleManaColorForAll"] = {
type = "toggle",
name = L["Scale for non-mana users"],
desc = L["Uses the 'color bar by mana %' setting/colors even for classes that don't use Mana"],
width = 'double',
get = function()
return self.moduleSettings.scaleManaColorForAll
end,
set = function(info, value)
self.moduleSettings.scaleManaColorForAll = value
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
hidden = function()
return not self.moduleSettings.scaleManaColor
end,
order = 53.1
}
return opts
end
@ -237,15 +260,16 @@ function PlayerMana.prototype:ManaType(event, unit)
end
end
if self.manaType == SPELL_POWER_RAGE or self.manaType == SPELL_POWER_RUNIC_POWER then
self.bTreatEmptyAsFull = true
else
self.bTreatEmptyAsFull = false
end
self.bTreatEmptyAsFull = self:TreatEmptyAsFull()
self:Update(self.unit)
end
function PlayerMana.prototype:TreatEmptyAsFull()
return self.manaType == SPELL_POWER_RAGE or self.manaType == SPELL_POWER_RUNIC_POWER
or (IceHUD.WowVer >= 70000 and (self.manaType == SPELL_POWER_LUNAR_POWER or self.manaType == SPELL_POWER_INSANITY
or self.manaType == SPELL_POWER_FURY or self.manaType == SPELL_POWER_PAIN or self.manaType == SPELL_POWER_MAELSTROM))
end
function PlayerMana.prototype:UpdateEvent(event, unit, powertype)
self:Update(unit, powertype)
@ -279,11 +303,10 @@ function PlayerMana.prototype:Update(unit, powertype)
end
local color = "PlayerMana"
if (self.moduleSettings.scaleManaColor) then
color = "ScaledManaColor"
end
if not (self.alive) then
color = "Dead"
elseif (self.moduleSettings.scaleManaColor and (UnitPowerType(self.unit) == SPELL_POWER_MANA or self.moduleSettings.scaleManaColorForAll)) then
color = "ScaledManaColor"
else
if (self.manaType == SPELL_POWER_RAGE) then
color = "PlayerRage"
@ -297,6 +320,10 @@ function PlayerMana.prototype:Update(unit, powertype)
color = "PlayerInsanity"
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_FURY) then
color = "PlayerFury"
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_MAELSTROM) then
color = "PlayerMaelstrom"
elseif (IceHUD.WowVer >= 70000 and self.manaType == SPELL_POWER_PAIN) then
color = "PlayerPain"
end
end
@ -304,8 +331,8 @@ function PlayerMana.prototype:Update(unit, powertype)
self:ConditionalUpdateFlash()
if (self.manaPercentage == 1 and self.manaType ~= SPELL_POWER_RAGE and self.manaType ~= SPELL_POWER_RUNIC_POWER)
or (self.manaPercentage == 0 and (self.manaType == SPELL_POWER_RAGE or self.manaType == SPELL_POWER_RUNIC_POWER)) then
if (self.manaPercentage == 1 and not self:TreatEmptyAsFull())
or (self.manaPercentage == 0 and self:TreatEmptyAsFull()) then
self:SetupOnUpdate(false)
else
self:SetupOnUpdate(true)

View File

@ -80,6 +80,6 @@ end
-- Load for tanks only
local _, unitClass = UnitClass("player")
if ((unitClass == "DEATHKNIGHT" or unitClass == "DRUID" or unitClass == "PALADIN" or unitClass == "WARRIOR" or unitClass == "MONK")
and IceHUD.WowVer >= 60000) then
and IceHUD.WowVer >= 60000 and IceHUD.WowVer < 70000) then
IceHUD.Resolve = Resolve:new()
end

397
modules/RollTheBones.lua Normal file
View File

@ -0,0 +1,397 @@
local L = LibStub("AceLocale-3.0"):GetLocale("IceHUD", false)
local RollTheBones = IceCore_CreateClass(IceUnitBar)
local IceHUD = _G.IceHUD
local baseTime = 12
local gapPerComboPoint = 6
local maxComboPoints = 5
local rtbEndTime = 0
local rtbDuration = 0
local CurrMaxRtBDuration = 0
local PotentialRtBDuration = 0
local RtBBuffs = {199603, 193358, 193357, 193359, 199600, 193356}
local RtBSet = {}
for _, v in ipairs(RtBBuffs) do
RtBSet[v] = true
end
-- Constructor --
function RollTheBones.prototype:init()
RollTheBones.super.prototype.init(self, "RollTheBones", "player")
self.moduleSettings = {}
self.moduleSettings.desiredLerpTime = 0
self.moduleSettings.shouldAnimate = false
self:SetDefaultColor("RollTheBones", 0.75, 1, 0.2)
self:SetDefaultColor("RollTheBonesPotential", 1, 1, 1)
self.bTreatEmptyAsFull = true
end
-- 'Public' methods -----------------------------------------------------------
-- OVERRIDE
function RollTheBones.prototype:Enable(core)
RollTheBones.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_AURA", "UpdateRollTheBones")
self:RegisterEvent("UNIT_POWER", "ComboPointsChanged")
if not self.moduleSettings.alwaysFullAlpha then
self:Show(false)
else
self:UpdateRollTheBones()
end
self:SetBottomText1("")
end
function RollTheBones.prototype:Disable(core)
RollTheBones.super.prototype.Disable(self, core)
end
function RollTheBones.prototype:ComboPointsChanged(...)
if select('#', ...) >= 3 and select(1, ...) == "UNIT_POWER" and select(3, ...) ~= "COMBO_POINTS" then
return
end
self:TargetChanged()
self:UpdateDurationBar()
end
-- OVERRIDE
function RollTheBones.prototype:GetDefaultSettings()
local settings = RollTheBones.super.prototype.GetDefaultSettings(self)
settings["enabled"] = false
settings["shouldAnimate"] = false
settings["desiredLerpTime"] = nil
settings["lowThreshold"] = 0
settings["side"] = IceCore.Side.Right
settings["offset"] = 6
settings["upperText"]="RtB:"
settings["showAsPercentOfMax"] = true
settings["durationAlpha"] = 0.6
settings["usesDogTagStrings"] = false
settings["lockLowerFontAlpha"] = false
settings["lowerTextString"] = ""
settings["lowerTextVisible"] = false
settings["hideAnimationSettings"] = true
settings["bAllowExpand"] = true
settings["bShowWithNoTarget"] = true
return settings
end
-- OVERRIDE
function RollTheBones.prototype:GetOptions()
local opts = RollTheBones.super.prototype.GetOptions(self)
opts["textSettings"].args["upperTextString"]["desc"] = "The text to display under this bar. # will be replaced with the number of Roll the Bones seconds remaining."
opts["textSettings"].args["upperTextString"].hidden = false
opts["showAsPercentOfMax"] =
{
type = 'toggle',
name = L["Show bar as % of maximum"],
desc = L["If this is checked, then the RtB buff time shows as a percent of the maximum attainable (taking set bonuses and talents into account). Otherwise, the bar always goes from full to empty when applying RtB no matter the duration."],
get = function()
return self.moduleSettings.showAsPercentOfMax
end,
set = function(info, v)
self.moduleSettings.showAsPercentOfMax = v
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["durationAlpha"] =
{
type = "range",
name = L["Potential RtB time bar alpha"],
desc = L["What alpha value to use for the bar that displays how long your RtB will last if you activate it. (This gets multiplied by the bar's current alpha to stay in line with the bar on top of it)"],
min = 0,
max = 100,
step = 5,
get = function()
return self.moduleSettings.durationAlpha * 100
end,
set = function(info, v)
self.moduleSettings.durationAlpha = v / 100.0
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end
}
opts["bShowWithNoTarget"] =
{
type = 'toggle',
name = L["Show with no target"],
desc = L["Whether or not to display when you have no target selected but have combo points available"],
get = function()
return self.moduleSettings.bShowWithNoTarget
end,
set = function(info, v)
self.moduleSettings.bShowWithNoTarget = v
self:ComboPointsChanged()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
}
return opts
end
function RollTheBones.prototype:CreateFrame()
RollTheBones.super.prototype.CreateFrame(self)
self:CreateDurationBar()
end
function RollTheBones.prototype:CreateDurationBar()
self.durationFrame = self:BarFactory(self.durationFrame, "BACKGROUND","ARTWORK")
-- Rokiyo: Do we need to call this here?
self.CurrScale = 0
self.durationFrame.bar:SetVertexColor(self:GetColor("RollTheBonesPotential", self.moduleSettings.durationAlpha))
self.durationFrame.bar:SetHeight(0)
self:UpdateBar(1, "undef")
-- force update the bar...if we're in here, then either the UI was just loaded or the player is jacking with the options.
-- either way, make sure the duration bar matches accordingly
self:UpdateDurationBar()
end
function RollTheBones.prototype:RotateHorizontal()
RollTheBones.super.prototype.RotateHorizontal(self)
self:RotateFrame(self.durationFrame)
end
function RollTheBones.prototype:ResetRotation()
RollTheBones.super.prototype.ResetRotation(self)
if self.durationFrame and self.durationFrame.anim then
self.durationFrame.anim:Stop()
end
end
-- 'Protected' methods --------------------------------------------------------
function RollTheBones.prototype:GetBuffDuration(unitName, ids)
local i = 1
local buff, rank, texture, count, type, duration, endTime, remaining, spellId
buff, _, _, count, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
while buff do
if (spellId and ids[spellId]) then
if endTime and not remaining then
remaining = endTime - GetTime()
end
return duration, remaining
end
i = i + 1;
buff, _, _, count, type, duration, endTime, _, _, _, spellId = UnitBuff(unitName, i)
end
return nil, nil
end
function RollTheBones.prototype:MyOnUpdate()
RollTheBones.super.prototype.MyOnUpdate(self)
if self.bUpdateRtb then
self:UpdateRollTheBones(nil, self.unit, true)
end
if self.target or self.moduleSettings.bShowWithNoTarget then
self:UpdateDurationBar()
end
end
local function RTBGetComboPoints(unit)
return UnitPower(unit, SPELL_POWER_COMBO_POINTS)
end
-- use this to figure out if Roll the Bones is available or not. neither IsSpellKnown nor IsPlayerSpell are correct for it
-- when SnD is known, but this is.
local function HasSpell(id)
local spell = GetSpellInfo(id)
return spell == GetSpellInfo(spell)
end
local function ShouldHide()
return not HasSpell(193316)
end
function RollTheBones.prototype:UpdateRollTheBones(event, unit, fromUpdate)
if unit and unit ~= self.unit then
return
end
local now = GetTime()
local remaining = nil
if not fromUpdate then
rtbDuration, remaining = self:GetBuffDuration(self.unit, RtBSet)
if not remaining then
rtbEndTime = 0
else
rtbEndTime = remaining + now
end
end
if rtbEndTime and rtbEndTime >= now then
if not fromUpdate then
self.bUpdateRtb = true
end
self:Show(true)
if not remaining then
remaining = rtbEndTime - now
end
local denominator = (self.moduleSettings.showAsPercentOfMax and CurrMaxRtBDuration or rtbDuration)
self:UpdateBar(denominator ~= 0 and remaining / denominator or 0, "RollTheBones")
else
self:UpdateBar(0, "RollTheBones")
if RTBGetComboPoints(self.unit) == 0 or (not UnitExists("target") and not self.moduleSettings.bShowWithNoTarget) or ShouldHide() then
if self.bIsVisible then
self.bUpdateRtb = nil
end
if not self.moduleSettings.alwaysFullAlpha or ShouldHide() then
self:Show(false)
end
end
end
-- somewhat redundant, but we also need to check potential remaining time
if (remaining ~= nil) or PotentialRtBDuration > 0 then
local potText = " (" .. PotentialRtBDuration .. ")"
self:SetBottomText1(self.moduleSettings.upperText .. tostring(floor(remaining or 0)) .. (self.moduleSettings.durationAlpha ~= 0 and potText or ""))
end
end
function RollTheBones.prototype:TargetChanged()
if self.moduleSettings.bShowWithNoTarget and RTBGetComboPoints(self.unit) > 0 then
self.target = true
else
self.target = UnitExists("target")
end
self:Update(self.unit)
self:UpdateDurationBar()
self:UpdateRollTheBones()
end
function RollTheBones.prototype:UpdateDurationBar(event, unit)
if unit and unit ~= self.unit then
return
end
local points = RTBGetComboPoints(self.unit)
-- check for Deeper Stratagem
local _, _, _, DeeperStratagem = GetTalentInfo(3, 1, 1)
if DeeperStratagem then
-- first, set the cached upper limit of RtB duration
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints + 1)
else
CurrMaxRtBDuration = self:GetMaxBuffTime(maxComboPoints)
end
if event then
self:UpdateRollTheBones()
end
-- player doesn't want to show the percent of max or the alpha is zeroed out, so don't bother with the duration bar
if not self.moduleSettings.showAsPercentOfMax or self.moduleSettings.durationAlpha == 0 or (points == 0 and not self:IsVisible())
or ShouldHide() then
self.durationFrame:Hide()
return
end
self.durationFrame:Show()
-- if we have combo points and a target selected, go ahead and show the bar so the duration bar can be seen
if points > 0 and (UnitExists("target") or self.moduleSettings.bShowWithNoTarget) then
self:Show(true)
end
if self.moduleSettings.durationAlpha > 0 then
PotentialRtBDuration = self:GetMaxBuffTime(points)
-- compute the scale from the current number of combo points
local scale = IceHUD:Clamp(PotentialRtBDuration / CurrMaxRtBDuration, 0, 1)
-- sadly, animation uses bar-local variables so we can't use the animation for 2 bar textures on the same bar element
if (self.moduleSettings.reverse) then
scale = 1 - scale
end
self.durationFrame.bar:SetVertexColor(self:GetColor("RollTheBonesPotential", self.moduleSettings.durationAlpha))
self:SetBarCoord(self.durationFrame, scale)
end
if rtbEndTime < GetTime() then
local potText = " (" .. PotentialRtBDuration .. ")"
self:SetBottomText1(self.moduleSettings.upperText .. "0" .. (self.moduleSettings.durationAlpha > 0 and potText or ""))
end
end
function RollTheBones.prototype:GetMaxBuffTime(numComboPoints)
local maxduration
if numComboPoints == 0 then
return 0
end
maxduration = baseTime + ((numComboPoints - 1) * gapPerComboPoint)
return maxduration
end
function RollTheBones.prototype:GetItemIdFromItemLink(linkStr)
local itemId
local _
if linkStr then
_, itemId, _, _, _, _, _, _, _ = strsplit(":", linkStr)
end
return itemId or 0
end
function RollTheBones.prototype:IsItemIdInList(itemId, list)
for i=1,#list do
if string.match(itemId, list[i]) then
return true
end
end
return false
end
function RollTheBones.prototype:OutCombat()
RollTheBones.super.prototype.OutCombat(self)
self:UpdateRollTheBones()
end
local _, unitClass = UnitClass("player")
-- Load us up
if unitClass == "ROGUE" and IceHUD.WowVer >= 70000 then
IceHUD.RollTheBones = RollTheBones:new()
end

View File

@ -196,7 +196,7 @@ end
function SliceAndDice.prototype:ResetRotation()
SliceAndDice.super.prototype.ResetRotation(self)
if self.durationFrame.anim then
if self.durationFrame and self.durationFrame.anim then
self.durationFrame.anim:Stop()
end
end

View File

@ -4,13 +4,8 @@ IceTargetAbsorb.prototype.highestAbsorbSinceLastZero = 0
IceTargetAbsorb.prototype.ColorName = "TargetAbsorb"
local UnitGetTotalAbsorbs = UnitGetTotalAbsorbs
if IceHUD.WowVer < 50200 then
UnitGetTotalAbsorbs = nil
end
-- Constructor --
function IceTargetAbsorb.prototype:init(moduleName, unit, colorName)
-- not sure if this is necessary...i think it is...this way, we can instantiate this bar on its own or as a parent class
if moduleName == nil or unit == nil then
IceTargetAbsorb.super.prototype.init(self, "TargetAbsorb", "target")
else
@ -29,45 +24,46 @@ function IceTargetAbsorb.prototype:GetDefaultSettings()
settings["side"] = IceCore.Side.Right
settings["offset"] = 3
settings["upperText"] = "[TotalAbsorb]"
settings["upperText"] = "[TotalAbsorb:VeryShort]"
return settings
end
-- OVERRIDE
function IceTargetAbsorb.prototype:Enable(core)
IceTargetAbsorb.super.prototype.Enable(self, core)
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
self:MyRegisterCustomEvents()
self:UpdateAbsorbAmount("UNIT_ABSORB_AMOUNT_CHANGED", self.unit)
self:UpdateAbsorbAmount()
self:Show(false)
end
function IceTargetAbsorb.prototype:MyRegisterCustomEvents()
self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateAbsorbAmount")
end
function IceTargetAbsorb.prototype:MyUnregisterCustomEvents()
self:UnregisterEvent("PLAYER_TARGET_CHANGED")
end
function IceTargetAbsorb.prototype:Update()
self:UpdateAbsorbAmount()
end
function IceTargetAbsorb.prototype:UpdateAbsorbAmount(event, unit)
if UnitGetTotalAbsorbs == nil or (event == "UNIT_ABSORB_AMOUNT_CHANGED" and unit ~= self.unit) then
if event == "UNIT_ABSORB_AMOUNT_CHANGED" and unit ~= self.unit then
return
end
local absorbAmount = UnitGetTotalAbsorbs(self.unit)
local absorbAmount = UnitGetTotalAbsorbs(self.unit) or 0
if absorbAmount == nil or absorbAmount <= 0 then
if absorbAmount <= 0 then
self.highestAbsorbSinceLastZero = 0
elseif absorbAmount > self.highestAbsorbSinceLastZero then
self.highestAbsorbSinceLastZero = absorbAmount
end
if absorbAmount == nil or absorbAmount <= 0 or self.highestAbsorbSinceLastZero <= 0 then
if absorbAmount <= 0 or self.highestAbsorbSinceLastZero <= 0 then
self:Show(false)
else
self:Show(true)
@ -82,4 +78,6 @@ function IceTargetAbsorb.prototype:Disable(core)
self:MyUnregisterCustomEvents()
end
IceHUD.TargetAbsorb = IceTargetAbsorb:new()
if UnitGetTotalAbsorbs ~= nil then
IceHUD.TargetAbsorb = IceTargetAbsorb:new()
end

View File

@ -1325,6 +1325,7 @@ do
icon:SetHeight(size-2)
end
else
frame.texture:SetTexture(0, 0, 0, 0.5)
icon:SetWidth(size-2)
icon:SetHeight(size-2)
end

View File

@ -18,6 +18,12 @@ function IceTargetMana.prototype:init(moduleName, unit)
self:SetDefaultColor("TargetEnergy", 228, 242, 31)
self:SetDefaultColor("TargetFocus", 242, 149, 98)
self:SetDefaultColor("TargetRunicPower", 52, 64, 221)
if IceHUD.WowVer >= 70000 then
self:SetDefaultColor("TargetInsanity", 150, 50, 255)
self:SetDefaultColor("TargetFury", 255, 50, 255)
self:SetDefaultColor("TargetMaelstrom", 52, 64, 221)
self:SetDefaultColor("TargetPain", 255, 50, 255)
end
end
@ -105,6 +111,14 @@ function IceTargetMana.prototype:Update(unit)
self.color = "TargetEnergy"
elseif (manaType == SPELL_POWER_RUNIC_POWER) then
self.color = "TargetRunicPower"
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_INSANITY) then
self.color = "TargetInsanity"
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_FURY) then
self.color = "TargetFury"
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_MAELSTROM) then
self.color = "TargetMaelstrom"
elseif (IceHUD.WowVer >= 70000 and manaType == SPELL_POWER_PAIN) then
self.color = "TargetPain"
end
if (self.tapped) then
@ -112,11 +126,7 @@ function IceTargetMana.prototype:Update(unit)
end
end
if manaType == SPELL_POWER_RAGE or manaType == SPELL_POWER_RUNIC_POWER then
self.bTreatEmptyAsFull = true
else
self.bTreatEmptyAsFull = false
end
self.bTreatEmptyAsFull = self:TreatEmptyAsFull(manaType)
self:UpdateBar(self.manaPercentage, self.color)
@ -126,6 +136,11 @@ function IceTargetMana.prototype:Update(unit)
end
end
function IceTargetMana.prototype:TreatEmptyAsFull(manaType)
return manaType == SPELL_POWER_RAGE or manaType == SPELL_POWER_RUNIC_POWER
or (IceHUD.WowVer >= 70000 and (manaType == SPELL_POWER_LUNAR_POWER or manaType == SPELL_POWER_INSANITY
or manaType == SPELL_POWER_FURY or manaType == SPELL_POWER_PAIN or manaType == SPELL_POWER_MAELSTROM))
end
-- OVERRIDE
function IceTargetMana.prototype:GetOptions()