Compare commits

...

10 Commits

Author SHA1 Message Date
55a376b959 Updated changelog 2016-10-25 14:43:59 -05:00
5b201ffee1 Updated TOC for 7.1 2016-10-25 14:40:10 -05:00
103e8b4eee Turn PlayerAbsorb back on by default
Changing this default has confused too many people, so let's put it back. Now this information is technically duplicated, but avoiding confusion is more important.
2016-10-15 20:27:03 -05:00
bda8da8b9a Updated changelog 2016-10-13 00:06:50 -05:00
60a3293095 Added absorb display to the player health bar
The player health bar will now show a (by default) faded white bar above the health for the amount of absorption the player currently has. The incoming heal bar starts above both the player health and the absorb, if any is present.
Also disabled the PlayerAbsorb bar by default since it's redundant. It can still be enabled separately if desired.
2016-10-12 23:18:27 -05:00
e26ccdfba1 First pass at showing Runes like combo points
With runes being homogenized in 7.0, it makes a little less sense to adhere to the structure of specific runes being available/used. This adds an option to display the runes more like combo points where simple textures are shown to indicate how many runes are available. No cooldown or "soon-to-be-ready" type indicators are setup just yet since that problem is more difficult and my personal usage doesn't really need them right now.
Also added an option to show the Runes module any time the player has some runes that are recharging.
2016-10-12 22:35:24 -05:00
ed0dee1e08 Fixed memory leak in Runes modules
We were creating font factories every time the runes module was asked to redraw. Oops...
Also fixed the numeric frame's parent while I was in there so that it (in a future commit) will show and hide with the module properly.
2016-10-12 21:06:03 -05:00
152a3898a7 Added support for the Scale setting on mirror bars (ticket #228) 2016-10-09 23:50:54 -05:00
2c5ea0c96b Extended scale range to 0.2-2.0 by request 2016-10-09 23:34:55 -05:00
858436e052 Ignore readme when packaging
Setup manual changelog instead of auto-generated one
2016-10-08 10:07:46 -05:00
8 changed files with 1358 additions and 15 deletions

View File

@ -61,3 +61,8 @@ move-folders:
tools-used:
- libdatabroker-1-1
ignore:
- readme.md
manual-changelog: changelog.txt

View File

@ -1,4 +1,4 @@
## Interface: 70000
## Interface: 70100
## Author: Parnic, originally created by Iceroth
## Name: IceHUD
## Title: IceHUD |cff7fff7f-Ace3-|r

View File

@ -152,8 +152,8 @@ Blizzard added a "Personal Resource Display" feature in the 7.0 game client. You
set = function(info, v)
IceHUD.IceCore:SetScale(v)
end,
min = 0.5,
max = 1.5,
min = 0.2,
max = 2.0,
step = 0.05,
isPercent = true,
order = 14,

1117
changelog.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -165,6 +165,8 @@ function MirrorBarHandler.prototype:init()
self:SetDefaultColor("BREATH", 0, 0.5, 1)
self:SetDefaultColor("DEATH", 1, 0.7, 0)
self:SetDefaultColor("FEIGNDEATH", 1, 0.9, 0)
self.scalingEnabled = true
end
@ -540,6 +542,7 @@ function MirrorBarHandler.prototype:SetSettings(bar)
bar.moduleSettings.barVerticalOffset = self.moduleSettings.barVerticalOffset
bar.moduleSettings.alwaysFullAlpha = self.moduleSettings.alwaysFullAlpha
bar.moduleSettings.rotateBar = self.moduleSettings.rotateBar
bar.moduleSettings.scale = self.moduleSettings.scale
end

View File

@ -13,6 +13,7 @@ function PlayerAbsorb.prototype:GetDefaultSettings()
settings["side"] = IceCore.Side.Left
settings["offset"] = 3
settings["enabled"] = true
return settings
end

View File

@ -5,6 +5,7 @@ local IceHUD = _G.IceHUD
PlayerHealth.prototype.resting = nil
PlayerHealth.prototype.pendingBlizzardPartyHide = false
PlayerHealth.prototype.absorbAmount = 0
local configMode = false
local HealComm
@ -16,6 +17,7 @@ function PlayerHealth.prototype:init()
self:SetDefaultColor("PlayerHealth", 37, 164, 30)
self:SetDefaultColor("PlayerHealthHealAmount", 37, 164, 30)
self:SetDefaultColor("PlayerHealthAbsorbAmount", 220, 220, 220)
end
@ -31,8 +33,10 @@ function PlayerHealth.prototype:GetDefaultSettings()
settings["allowMouseInteraction"] = false
settings["allowMouseInteractionCombat"] = false
settings["healAlpha"] = 0.6
settings["absorbAlpha"] = 0.6
settings["lockIconAlpha"] = false
settings["showIncomingHeals"] = true
settings["showAbsorbs"] = true
settings["showStatusIcon"] = true
settings["statusIconOffset"] = {x=110, y=0}
@ -107,6 +111,8 @@ function PlayerHealth.prototype:Enable(core)
self:RegisterEvent("UNIT_HEAL_PREDICTION", "IncomingHealPrediction")
end
self:RegisterEvent("UNIT_ABSORB_AMOUNT_CHANGED", "UpdateAbsorbAmount")
if (self.moduleSettings.hideBlizz) then
self:HideBlizz()
end
@ -164,6 +170,11 @@ function PlayerHealth.prototype:IncomingHealPrediction(event, unit)
end
end
function PlayerHealth.prototype:UpdateAbsorbAmount()
self.absorbAmount = UnitGetTotalAbsorbs(self.unit) or 0
self:Update()
end
-- OVERRIDE
function PlayerHealth.prototype:GetOptions()
@ -327,6 +338,52 @@ function PlayerHealth.prototype:GetOptions()
order = 43.7
}
opts["showAbsorbs"] =
{
type = 'toggle',
name = L["Show absorbs"],
desc = L["Whether or not to show absorb amounts as a lighter-colored bar on top of your current health."],
get = function()
return self.moduleSettings.showAbsorbs
end,
set = function(info, v)
if not v then
self.absorbFrame.bar:Hide()
else
self.absorbFrame.bar:Show()
end
self.moduleSettings.showAbsorbs = v
self:Update()
end,
disabled = function()
return not (self.moduleSettings.enabled and IceHUD.WowVer >= 70000)
end,
order = 43.8
}
opts["absorbAlpha"] =
{
type = "range",
name = L["Absorb bar alpha"],
desc = L["What alpha value to use for the bar that displays how much effective health you have including absorbs (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.absorbAlpha * 100
end,
set = function(info, v)
self.moduleSettings.absorbAlpha = v / 100.0
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled or not self.moduleSettings.showAbsorbs
end,
order = 43.9
}
opts["iconSettings"] =
{
type = 'group',
@ -824,6 +881,7 @@ function PlayerHealth.prototype:CreateFrame()
PlayerHealth.super.prototype.CreateFrame(self)
self:CreateHealBar()
self:CreateAbsorbBar()
end
@ -880,6 +938,18 @@ function PlayerHealth.prototype:CreateHealBar()
end
end
function PlayerHealth.prototype:CreateAbsorbBar()
self.absorbFrame = self:BarFactory(self.absorbFrame, "LOW","BACKGROUND")
self.absorbFrame.bar:SetVertexColor(self:GetColor("PlayerHealthAbsorbAmount", self.alpha * self.moduleSettings.absorbAlpha))
self:UpdateBar(1, "undef")
if not self.moduleSettings.showAbsorbs or UnitGetTotalAbsorbs == nil then
self.absorbFrame.bar:Hide()
end
end
function PlayerHealth.prototype:EnableClickTargeting(bEnable)
if bEnable then
@ -1151,7 +1221,7 @@ function PlayerHealth.prototype:CheckPvP()
minx, maxx, miny, maxy = 0.05, 0.605, 0.015, 0.57
elseif UnitIsPVP(self.unit) then
pvpMode = UnitFactionGroup(self.unit)
if pvpMode == "Neutral" then
pvpMode = "FFA"
end
@ -1216,7 +1286,7 @@ function PlayerHealth.prototype:Update(unit)
local percent
if incomingHealAmt > 0 then
percent = self.maxHealth ~= 0 and ((self.health + incomingHealAmt) / self.maxHealth) or 0
percent = self.maxHealth ~= 0 and ((self.health + (self.absorbAmount or 0) + incomingHealAmt) / self.maxHealth) or 0
if self.moduleSettings.reverse then
percent = 1 - percent
-- Rokiyo: I'm thinking the frama strata should also to be set to medium if we're in reverse.
@ -1230,6 +1300,23 @@ function PlayerHealth.prototype:Update(unit)
self:SetBarCoord(self.healFrame, percent)
end
if self.moduleSettings.showAbsorbs and self.absorbFrame and self.absorbFrame.bar and self.absorbAmount then
local percent
if self.absorbAmount > 0 then
percent = self.maxHealth ~= 0 and ((self.health + self.absorbAmount) / self.maxHealth) or 0
if self.moduleSettings.reverse then
percent = 1 - percent
end
else
percent = 0
end
percent = IceHUD:Clamp(percent, 0, 1)
self:SetBarCoord(self.absorbFrame, percent)
end
if not IceHUD.IceCore:ShouldUseDogTags() then
self:SetBottomText1(math.floor(self.healthPercentage * 100))
self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), textColor)
@ -1399,6 +1486,9 @@ function PlayerHealth.prototype:UpdateBar(scale, color, alpha)
if self.healFrame and self.healFrame.bar then
self.healFrame.bar:SetVertexColor(self:GetColor("PlayerHealthHealAmount", self.alpha * self.moduleSettings.healAlpha))
end
if self.absorbFrame and self.absorbFrame.bar then
self.absorbFrame.bar:SetVertexColor(self:GetColor("PlayerHealthAbsorbAmount", self.alpha * self.moduleSettings.absorbAlpha))
end
--[[ seems to be causing taint. oh well
if self.frame.button then
if self.alpha == 0 then

View File

@ -21,6 +21,13 @@ if IceHUD.WowVer >= 70000 then
GetRuneType = function() return RUNETYPE_LEGION end
end
local RUNEMODE_DEFAULT = "Blizzard"
local RUNEMODE_NUMERIC = "Numeric"
local RUNEMODE_BAR = "Graphical Bar"
local RUNEMODE_CIRCLE = "Graphical Circle"
local RUNEMODE_GLOW = "Graphical Glow"
local RUNEMODE_CLEANCIRCLE = "Graphical Clean Circle"
-- setup the names to be more easily readable
Runes.prototype.runeNames = {
[RUNETYPE_BLOOD] = "Blood",
@ -34,6 +41,8 @@ Runes.prototype.runeSize = 25
-- blizzard has hardcoded 6 runes right now, so i'll do the same...see RuneFrame.xml
Runes.prototype.numRunes = 6
Runes.prototype.lastRuneState = {}
-- Constructor --
function Runes.prototype:init()
Runes.super.prototype.init(self, "Runes")
@ -152,6 +161,9 @@ function Runes.prototype:GetOptions()
disabled = function()
return not self.moduleSettings.enabled
end,
hidden = function()
return self.moduleSettings.runeMode ~= RUNEMODE_DEFAULT
end,
order = 36
}
@ -175,6 +187,42 @@ function Runes.prototype:GetOptions()
order = 34.1
}
opts["runeMode"] = {
type = 'select',
name = L["Rune display mode"],
desc = L["What graphical representation each rune should have. When setting to anything other than 'graphical', the module will behave more like combo points and simply show how many are active."],
get = function(info)
return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode)
end,
set = function(info, v)
self.moduleSettings.runeMode = info.option.values[v]
self:ResetRuneAvailability()
self:Redraw()
end,
values = { RUNEMODE_DEFAULT, RUNEMODE_NUMERIC, RUNEMODE_BAR, RUNEMODE_CIRCLE, RUNEMODE_GLOW, RUNEMODE_CLEANCIRCLE },
disabled = function()
return not self.moduleSettings.enabled
end,
order = 35.5,
}
opts["showWhenNotFull"] = {
type = 'toggle',
name = L["Show when not full"],
desc = L["Whether to show the Runes module any time the player has fewer than max runes available (regardless of combat/target status)."],
get = function()
return self.moduleSettings.showWhenNotFull
end,
set = function(info, v)
self.moduleSettings.showWhenNotFull = v
self:Redraw()
end,
disabled = function()
return not self.moduleSettings.enabled
end,
order = 38,
}
return opts
end
@ -192,7 +240,9 @@ function Runes.prototype:GetDefaultSettings()
defaults["alwaysFullAlpha"] = false
defaults["displayMode"] = "Horizontal"
defaults["cooldownMode"] = "Cooldown"
defaults["runeMode"] = RUNEMODE_DEFAULT
defaults["runeGap"] = 0
defaults["showWhenNotFull"] = false
return defaults
end
@ -212,6 +262,10 @@ function Runes.prototype:Enable(core)
self.numRunes = UnitPowerMax("player", SPELL_POWER_RUNES)
end
for i=1,self.numRunes do
self.lastRuneState[i] = select(3, GetRuneCooldown(i))
end
Runes.super.prototype.Enable(self, core)
self:RegisterEvent("RUNE_POWER_UPDATE", "UpdateRunePower")
@ -259,15 +313,45 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
return
end
if self.moduleSettings.runeMode == RUNEMODE_NUMERIC then
self.frame.numeric:SetText(tostring(self:GetNumRunesAvailable()))
return
end
local start, duration, usable = GetRuneCooldown(rune)
local lastState = self.lastRuneState[rune]
self.lastRuneState[rune] = usable
if self.moduleSettings.runeMode ~= RUNEMODE_DEFAULT then
if lastState == usable then
return
end
if usable then
for i=1,self.numRunes do
if self.frame.graphical[i]:GetAlpha() == 0 then
rune = i
break
end
end
else
for i=1,self.numRunes do
if self.frame.graphical[i]:GetAlpha() == 0 then
break
end
rune = i
end
end
end
-- print("Runes.prototype:UpdateRunePower: rune="..rune.." usable="..(usable and "yes" or "no").." GetRuneType(rune)="..GetRuneType(rune));
if usable then
if self.moduleSettings.cooldownMode == "Cooldown" then
self.frame.graphical[rune].cd:Hide()
elseif self.moduleSettings.cooldownMode == "Alpha" then
if self.moduleSettings.cooldownMode == "Alpha" or self.moduleSettings.runeMode ~= RUNEMODE_DEFAULT then
self.frame.graphical[rune]:SetAlpha(1)
elseif self.moduleSettings.cooldownMode == "Cooldown" then
self.frame.graphical[rune].cd:Hide()
elseif self.moduleSettings.cooldownMode == "Both" then
self.frame.graphical[rune].cd:Hide()
self.frame.graphical[rune]:SetAlpha(1)
@ -283,7 +367,9 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
UIFrameFade(self.frame.graphical[rune].shine, fadeInfo);
end
elseif start ~= nil and duration ~= nil then
if self.moduleSettings.cooldownMode == "Cooldown" then
if self.moduleSettings.runeMode ~= RUNEMODE_DEFAULT then
self.frame.graphical[rune]:SetAlpha(0)
elseif self.moduleSettings.cooldownMode == "Cooldown" then
CooldownFrame_SetTimer(self.frame.graphical[rune].cd, start, duration, true)
self.frame.graphical[rune].cd:Show()
elseif self.moduleSettings.cooldownMode == "Alpha" then
@ -294,6 +380,20 @@ function Runes.prototype:UpdateRunePower(event, rune, dontFlash)
self.frame.graphical[rune]:SetAlpha(0.2)
end
end
self:Redraw()
end
function Runes.prototype:GetNumRunesAvailable()
local available = 0
for i=1,self.numRunes do
if select(3, GetRuneCooldown(i)) then
available = available + 1
end
end
return available
end
function Runes.prototype:ShineFinished(rune)
@ -319,10 +419,19 @@ function Runes.prototype:UpdateRuneType(event, rune)
end
function Runes.prototype:GetRuneTexture(runeName)
if not runeName then
return ""
if self.moduleSettings.runeMode == RUNEMODE_DEFAULT and runeName then
return "Interface\\PlayerFrame\\UI-PlayerFrame-DeathKnight-"..runeName
elseif self.moduleSettings.runeMode == RUNEMODE_BAR then
return IceElement.TexturePath .. "Combo"
elseif self.moduleSettings.runeMode == RUNEMODE_CIRCLE then
return IceElement.TexturePath .. "ComboRound"
elseif self.moduleSettings.runeMode == RUNEMODE_GLOW then
return IceElement.TexturePath .. "ComboGlow"
elseif self.moduleSettings.runeMode == RUNEMODE_CLEANCIRCLE then
return IceElement.TexturePath .. "ComboCleanCurves"
end
return "Interface\\PlayerFrame\\UI-PlayerFrame-DeathKnight-"..runeName
return ""
end
-- 'Protected' methods --------------------------------------------------------
@ -344,13 +453,19 @@ end
function Runes.prototype:CreateRuneFrame()
-- create numeric runes
self.frame.numeric = self:FontFactory(self.moduleSettings.runeFontSize, nil, self.frame.numeric)
if not self.frame.numeric then
self.frame.numeric = self:FontFactory(self.moduleSettings.runeFontSize, self.frame)
end
self.frame.numeric:SetWidth(50)
self.frame.numeric:SetJustifyH("CENTER")
self.frame.numeric:SetPoint("TOP", self.frame, "TOP", 0, 0)
self.frame.numeric:Hide()
if self.moduleSettings.runeMode == RUNEMODE_NUMERIC then
self.frame.numeric:Show()
else
self.frame.numeric:Hide()
end
if (not self.frame.graphical) then
self.frame.graphical = {}
@ -409,7 +524,11 @@ function Runes.prototype:CreateRune(i, type, name)
local runeTex = self:GetRuneTexture(name)
self.frame.graphical[i].rune:SetTexture(runeTex)
self.frame.graphical[i].rune:SetVertexColor(self:GetColor("Runes"..name))
self.frame.graphical[i]:Show()
if self.moduleSettings.runeMode ~= RUNEMODE_NUMERIC then
self.frame.graphical[i]:Show()
else
self.frame.graphical[i]:Hide()
end
self.frame.graphical[i].cd:SetFrameStrata("BACKGROUND")
self.frame.graphical[i].cd:SetFrameLevel(self.frame.graphical[i]:GetFrameLevel()+1)
@ -485,6 +604,14 @@ function Runes.prototype:CheckCombat()
self:Redraw()
end
function Runes.prototype:UseTargetAlpha(scale)
if not self.moduleSettings.showWhenNotFull then
return Runes.super.prototype.UseTargetAlpha(scale)
else
return self:GetNumRunesAvailable() ~= self.numRunes
end
end
-- Load us up
local _, unitClass = UnitClass("player")
if (unitClass == "DEATHKNIGHT") then