From fb884f41f458d8262ef5b453f023fb62bacd83a2 Mon Sep 17 00:00:00 2001 From: Parnic Date: Fri, 10 Sep 2010 06:49:45 +0000 Subject: [PATCH] - abstracted the HolyPower module's functionality to a ClassPowerCounter module since the warlock shard bar is functionally identical to holy power - added shard bar inheriting from ClassPowerCounter. same basic functionality as the holy power module: graphical mode that shows the default shards and numeric mode that just displays a count of active shards --- IceHUD.toc | 2 + modules/ClassPowerCounter.lua | 406 +++++++++++++++++++++++++++++++++ modules/HolyPower.lua | 407 +--------------------------------- modules/Shards.lua | 57 +++++ 4 files changed, 477 insertions(+), 395 deletions(-) create mode 100644 modules/ClassPowerCounter.lua create mode 100644 modules/Shards.lua diff --git a/IceHUD.toc b/IceHUD.toc index 4e81e71..004ebd2 100644 --- a/IceHUD.toc +++ b/IceHUD.toc @@ -72,4 +72,6 @@ modules\PlayerInvuln.lua modules\ComboPointsBar.lua modules\CustomHealth.lua modules\CustomMana.lua +modules\ClassPowerCounter.lua modules\HolyPower.lua +modules\Shards.lua diff --git a/modules/ClassPowerCounter.lua b/modules/ClassPowerCounter.lua new file mode 100644 index 0000000..25c7ce4 --- /dev/null +++ b/modules/ClassPowerCounter.lua @@ -0,0 +1,406 @@ +local AceOO = AceLibrary("AceOO-2.0") + +IceClassPowerCounter = AceOO.Class(IceElement) + +IceClassPowerCounter.prototype.runeHeight = 22 +IceClassPowerCounter.prototype.runeWidth = 36 +IceClassPowerCounter.prototype.numRunes = 3 +IceClassPowerCounter.prototype.lastNumReady = 0 +IceClassPowerCounter.prototype.runeCoords = {} +IceClassPowerCounter.prototype.runeShineFadeSpeed = 0.4 + +-- Constructor -- +function IceClassPowerCounter.prototype:init(name) + assert(name ~= nil, "ClassPowerCounter cannot be instantiated directly - supply a name from the child class and pass it up.") + IceClassPowerCounter.super.prototype.init(self, name) + + self.scalingEnabled = true +end + +-- 'Public' methods ----------------------------------------------------------- + + +-- OVERRIDE +function IceClassPowerCounter.prototype:GetOptions() + local opts = IceClassPowerCounter.super.prototype.GetOptions(self) + + opts["vpos"] = { + type = "range", + name = "Vertical Position", + desc = "Vertical Position", + get = function() + return self.moduleSettings.vpos + end, + set = function(info, v) + self.moduleSettings.vpos = v + self:Redraw() + end, + min = -300, + max = 300, + step = 10, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 31 + } + + opts["hpos"] = { + type = "range", + name = "Horizontal Position", + desc = "Horizontal Position", + get = function() + return self.moduleSettings.hpos + end, + set = function(info, v) + self.moduleSettings.hpos = v + self:Redraw() + end, + min = -500, + max = 500, + step = 10, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 31 + } + + opts["hideBlizz"] = { + type = "toggle", + name = "Hide Blizzard Frame", + desc = "Hides Blizzard frame and disables all events related to it.\n\nNOTE: Blizzard attaches this UI to the player's unitframe, so if you have that hidden in PlayerHealth, then this won't do anything.", + get = function() + return self.moduleSettings.hideBlizz + end, + set = function(info, value) + self.moduleSettings.hideBlizz = value + if (value) then + self:HideBlizz() + else + self:ShowBlizz() + end + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 32 + } + + opts["displayMode"] = { + type = 'select', + name = 'Display mode', + desc = "Choose whether you'd like a graphical or numeric representation of the runes.\n\nNOTE: The color of 'Numeric' mode can be controlled by the HolyPowerNumeric color.", + get = function(info) + return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode) + end, + set = function(info, v) + self.moduleSettings.runeMode = info.option.values[v] + self:SetDisplayMode() + self:UpdateRunePower() + end, + values = { "Graphical", "Numeric" }, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 34 + } + + opts["runeGap"] = { + type = 'range', + name = 'Rune gap', + desc = 'Spacing between each rune (only works for graphical mode)', + min = 0, + max = 100, + step = 1, + get = function() + return self.moduleSettings.runeGap + end, + set = function(info, v) + self.moduleSettings.runeGap = v + self:Redraw() + end, + disabled = function() + return not self.moduleSettings.enabled + end, + hidden = function() + return self.moduleSettings.runeMode ~= "Graphical" + end, + order = 34.1 + } + + opts["runeOrientation"] = { + type = 'select', + name = 'Rune orientation', + desc = 'Whether the runes should draw side-by-side or on top of one another', + get = function(info) + return IceHUD:GetSelectValue(info, self.moduleSettings.displayMode) + end, + set = function(info, v) + self.moduleSettings.displayMode = info.option.values[v] + self:Redraw() + end, + values = { "Horizontal", "Vertical" }, + disabled = function() + return not self.moduleSettings.enabled + end, + hidden = function() + return self.moduleSettings.runeMode ~= "Graphical" + end, + order = 35 + } + + opts["inactiveDisplayMode"] = { + type = 'select', + name = 'Inactive mode', + desc = "This controls what happens to runes that are inactive. Darkened means they are visible but colored black, Hidden means they are not displayed.", + get = function(info) + return IceHUD:GetSelectValue(info, self.moduleSettings.inactiveDisplayMode) + end, + set = function(info, v) + self.moduleSettings.inactiveDisplayMode = info.option.values[v] + self:SetDisplayMode() + self:UpdateRunePower() + end, + values = { "Darkened", "Hidden" }, + disabled = function() + return not self.moduleSettings.enabled + end, + hidden = function() + return self.moduleSettings.runeMode ~= "Graphical" + end, + order = 36 + } + + opts["flashWhenReady"] = { + type = "toggle", + name = "Flash when ready", + desc = "Shows a flash behind each holy rune when it becomes available.", + get = function() + return self.moduleSettings.flashWhenBecomingReady + end, + set = function(info, value) + self.moduleSettings.flashWhenBecomingReady = value + end, + disabled = function() + return not self.moduleSettings.enabled + end, + hidden = function() + return self.moduleSettings.runeMode ~= "Graphical" + end, + order = 37 + } + + return opts +end + + +-- OVERRIDE +function IceClassPowerCounter.prototype:GetDefaultSettings() + local defaults = IceClassPowerCounter.super.prototype.GetDefaultSettings(self) + + defaults["vpos"] = 0 + defaults["hpos"] = 10 + defaults["runeFontSize"] = 20 + defaults["runeMode"] = "Graphical" + defaults["usesDogTagStrings"] = false + defaults["hideBlizz"] = false + defaults["alwaysFullAlpha"] = false + defaults["displayMode"] = "Horizontal" + defaults["runeGap"] = 0 + defaults["flashWhenBecomingReady"] = true + defaults["inactiveDisplayMode"] = "Darkened" + + return defaults +end + + +-- OVERRIDE +function IceClassPowerCounter.prototype:Redraw() + IceClassPowerCounter.super.prototype.Redraw(self) + + self:CreateFrame() +end + + +-- OVERRIDE +function IceClassPowerCounter.prototype:Enable(core) + IceClassPowerCounter.super.prototype.Enable(self, core) + + self:RegisterEvent("UNIT_POWER", "UpdateRunePower") + self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower") + self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateRunePower") + + if (self.moduleSettings.hideBlizz) then + self:HideBlizz() + end +end + +function IceClassPowerCounter.prototype:UpdateRunePower() + local numReady = UnitPower("player", self.unitPower) + + if self.moduleSettings.runeMode == "Graphical" then + for i=1, self.numRunes do + if i <= numReady then + self.frame.graphical[i].rune:SetVertexColor(1, 1, 1) + + if self.moduleSettings.inactiveDisplayMode == "Hidden" then + self.frame.graphical[i]:Show() + end + + if i > self.lastNumReady and self.moduleSettings.flashWhenBecomingReady then + local fadeInfo={ + mode = "IN", + timeToFade = self.runeShineFadeSpeed, + finishedFunc = function() self:ShineFinished(i) end, + finishedArg1 = i + } + UIFrameFade(self.frame.graphical[i].shine, fadeInfo); + end + else + if self.moduleSettings.inactiveDisplayMode == "Darkened" then + self.frame.graphical[i].rune:SetVertexColor(0, 0, 0) + elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then + self.frame.graphical[i]:Hide() + end + end + end + elseif self.moduleSettings.runeMode == "Numeric" then + self.frame.numeric:SetText(tostring(numReady)) + self.frame.numeric:SetTextColor(self:GetColor(self.numericColor)) + end + + self.lastNumReady = numReady + + if (self.moduleSettings.hideBlizz) then + self:HideBlizz() + end +end + +function IceClassPowerCounter.prototype:ShineFinished(rune) + UIFrameFadeOut(self.frame.graphical[rune].shine, self.runeShineFadeSpeed); +end + +function IceClassPowerCounter.prototype:GetRuneTexture(rune) + assert(true, "Must override GetRuneTexture in child classes") +end + + +function IceClassPowerCounter.prototype:CreateFrame() + IceClassPowerCounter.super.prototype.CreateFrame(self) + + self.frame:SetFrameStrata("BACKGROUND") + self.frame:SetWidth(self.runeWidth*self.numRunes) + self.frame:SetHeight(self.runeHeight) + self.frame:ClearAllPoints() + self.frame:SetPoint("TOP", self.parent, "BOTTOM", self.moduleSettings.hpos, self.moduleSettings.vpos) + + self:CreateRuneFrame() + + self:SetDisplayMode() +end + +function IceClassPowerCounter.prototype:SetDisplayMode() + if self.moduleSettings.runeMode == "Graphical" then + self.frame.numeric:Hide() + for i=1, self.numRunes do + self.frame.graphical[i]:Show() + end + elseif self.moduleSettings.runeMode == "Numeric" then + self.frame.numeric:Show() + for i=1, self.numRunes do + self.frame.graphical[i]:Hide() + end + end +end + +function IceClassPowerCounter.prototype:CreateRuneFrame() + -- create numeric runes + self.frame.numeric = self:FontFactory(self.moduleSettings.runeFontSize, nil, self.frame.numeric) + + 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 (not self.frame.graphical) then + self.frame.graphical = {} + end + + for i=1, self.numRunes do + self:CreateRune(i) + end +end + +function IceClassPowerCounter.prototype:CreateRune(i) + -- create runes + if (not self.frame.graphical[i]) then + self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame) + self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "LOW") + self.frame.graphical[i].rune:SetAllPoints(self.frame.graphical[i]) + self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY") + + self:SetupRuneTexture(i) + self.frame.graphical[i].rune:SetVertexColor(0, 0, 0) + end + + self.frame.graphical[i]:SetFrameStrata("BACKGROUND") + self.frame.graphical[i]:SetWidth(self.runeWidth) + self.frame.graphical[i]:SetHeight(self.runeHeight) + + if self.moduleSettings.displayMode == "Horizontal" then + self.frame.graphical[i]:SetPoint("TOPLEFT", (i-1) * (self.runeWidth-5) + (i-1) + ((i-1) * self.moduleSettings.runeGap), 0) + else + self.frame.graphical[i]:SetPoint("TOPLEFT", 0, -1 * ((i-1) * (self.runeHeight-5) + (i-1) + ((i-1) * self.moduleSettings.runeGap))) + end + + self.frame.graphical[i]:Hide() + + self.frame.graphical[i].shine:SetTexture("Interface\\ComboFrame\\ComboPoint") + self.frame.graphical[i].shine:SetBlendMode("ADD") + self.frame.graphical[i].shine:SetTexCoord(0.5625, 1, 0, 1) + self.frame.graphical[i].shine:ClearAllPoints() + self.frame.graphical[i].shine:SetPoint("CENTER", self.frame.graphical[i], "CENTER") + self.frame.graphical[i].shine:SetWidth(self.runeWidth + 25) + self.frame.graphical[i].shine:SetHeight(self.runeHeight + 10) + self.frame.graphical[i].shine:Hide() +end + +function IceClassPowerCounter.prototype:SetupRuneTexture(rune) + if not rune or rune < 1 or rune > #self.runeCoords then + return + end + + self.frame.graphical[rune].rune:SetTexture(self:GetRuneTexture(rune)) + local a,b,c,d = unpack(self.runeCoords[rune]) + self.frame.graphical[rune].rune:SetTexCoord(a, b, c, d) +end + +function IceClassPowerCounter.prototype:GetAlphaAdd() + return 0.15 +end + +function IceClassPowerCounter.prototype:TargetChanged() + IceClassPowerCounter.super.prototype.TargetChanged(self) + -- sort of a hack fix...if "ooc" alpha is set to 0, then the runes frame is all jacked up when the user spawns in + -- need to re-run CreateFrame in order to setup the frame properly. not sure why :( + self:Redraw() +end + +function IceClassPowerCounter.prototype:InCombat() + IceClassPowerCounter.super.prototype.InCombat(self) + self:Redraw() +end + +function IceClassPowerCounter.prototype:OutCombat() + IceClassPowerCounter.super.prototype.OutCombat(self) + self:Redraw() +end + +function IceClassPowerCounter.prototype:CheckCombat() + IceClassPowerCounter.super.prototype.CheckCombat(self) + self:Redraw() +end + +function IceClassPowerCounter.prototype:HideBlizz() + assert(true, "Must override HideBlizz in child classes.") +end diff --git a/modules/HolyPower.lua b/modules/HolyPower.lua index dece21e..ddfcc0b 100644 --- a/modules/HolyPower.lua +++ b/modules/HolyPower.lua @@ -1,295 +1,31 @@ local AceOO = AceLibrary("AceOO-2.0") -local HolyPower = AceOO.Class(IceElement) +local HolyPower = AceOO.Class(IceClassPowerCounter) -HolyPower.prototype.runeHeight = 22 -HolyPower.prototype.runeWidth = 36 --- blizzard has hardcoded 3 runes right now, so i'll do the same...see PaladinPowerBar.lua -HolyPower.prototype.numRunes = 3 -HolyPower.prototype.lastNumReady = 0 - --- Constructor -- function HolyPower.prototype:init() HolyPower.super.prototype.init(self, "HolyPower") - + self:SetDefaultColor("HolyPowerNumeric", 218, 231, 31) - self.scalingEnabled = true + -- pulled from PaladinPowerBar.xml in Blizzard's UI source + self.runeCoords = + { + {0.00390625, 0.14453125, 0.64843750, 0.82031250}, + {0.00390625, 0.12500000, 0.83593750, 0.96875000}, + {0.15234375, 0.25781250, 0.64843750, 0.81250000}, + } + self.numericColor = "HolyPowerNumeric" + self.unitPower = SPELL_POWER_HOLY_POWER end --- pulled from PaladinPowerBar.xml in Blizzard's UI source -local runeCoords = -{ - {0.00390625, 0.14453125, 0.64843750, 0.82031250}, - {0.00390625, 0.12500000, 0.83593750, 0.96875000}, - {0.15234375, 0.25781250, 0.64843750, 0.81250000}, -} - -local runeShineFadeSpeed = 0.4 - --- 'Public' methods ----------------------------------------------------------- - - --- OVERRIDE function HolyPower.prototype:GetOptions() local opts = HolyPower.super.prototype.GetOptions(self) - opts["vpos"] = { - type = "range", - name = "Vertical Position", - desc = "Vertical Position", - get = function() - return self.moduleSettings.vpos - end, - set = function(info, v) - self.moduleSettings.vpos = v - self:Redraw() - end, - min = -300, - max = 300, - step = 10, - disabled = function() - return not self.moduleSettings.enabled - end, - order = 31 - } - - opts["hpos"] = { - type = "range", - name = "Horizontal Position", - desc = "Horizontal Position", - get = function() - return self.moduleSettings.hpos - end, - set = function(info, v) - self.moduleSettings.hpos = v - self:Redraw() - end, - min = -500, - max = 500, - step = 10, - disabled = function() - return not self.moduleSettings.enabled - end, - order = 31 - } - - opts["hideBlizz"] = { - type = "toggle", - name = "Hide Blizzard Frame", - desc = "Hides Blizzard Holy Power frame and disables all events related to it.\n\nNOTE: Blizzard attaches the holy power UI to the player's unitframe, so if you have that hidden in PlayerHealth, then this won't do anything.", - get = function() - return self.moduleSettings.hideBlizz - end, - set = function(info, value) - self.moduleSettings.hideBlizz = value - if (value) then - self:HideBlizz() - else - self:ShowBlizz() - end - end, - disabled = function() - return not self.moduleSettings.enabled - end, - order = 32 - } - - opts["runeMode"] = { - type = 'select', - name = 'Display mode', - desc = "Choose whether you'd like a graphical or numeric representation of the runes.\n\nNOTE: The color of 'Numeric' mode can be controlled by the HolyPowerNumeric color.", - get = function(info) - return IceHUD:GetSelectValue(info, self.moduleSettings.runeMode) - end, - set = function(info, v) - self.moduleSettings.runeMode = info.option.values[v] - self:SetDisplayMode() - self:UpdateRunePower() - end, - values = { "Graphical", "Numeric" }, - disabled = function() - return not self.moduleSettings.enabled - end, - order = 34 - } - - opts["runeGap"] = { - type = 'range', - name = 'Rune gap', - desc = 'Spacing between each rune (only works for graphical mode)', - min = 0, - max = 100, - step = 1, - get = function() - return self.moduleSettings.runeGap - end, - set = function(info, v) - self.moduleSettings.runeGap = v - self:Redraw() - end, - disabled = function() - return not self.moduleSettings.enabled - end, - hidden = function() - return self.moduleSettings.runeMode ~= "Graphical" - end, - order = 34.1 - } - - opts["displayMode"] = { - type = 'select', - name = 'Rune orientation', - desc = 'Whether the runes should draw side-by-side or on top of one another', - get = function(info) - return IceHUD:GetSelectValue(info, self.moduleSettings.displayMode) - end, - set = function(info, v) - self.moduleSettings.displayMode = info.option.values[v] - self:Redraw() - end, - values = { "Horizontal", "Vertical" }, - disabled = function() - return not self.moduleSettings.enabled - end, - hidden = function() - return self.moduleSettings.runeMode ~= "Graphical" - end, - order = 35 - } - - opts["inactiveDisplayMode"] = { - type = 'select', - name = 'Inactive mode', - desc = "This controls what happens to runes that are inactive. Darkened means they are visible but colored black, Hidden means they are not displayed.", - get = function(info) - return IceHUD:GetSelectValue(info, self.moduleSettings.inactiveDisplayMode) - end, - set = function(info, v) - self.moduleSettings.inactiveDisplayMode = info.option.values[v] - self:SetDisplayMode() - self:UpdateRunePower() - end, - values = { "Darkened", "Hidden" }, - disabled = function() - return not self.moduleSettings.enabled - end, - hidden = function() - return self.moduleSettings.runeMode ~= "Graphical" - end, - order = 36 - } - - opts["flashWhenReady"] = { - type = "toggle", - name = "Flash when ready", - desc = "Shows a flash behind each holy rune when it becomes available.", - get = function() - return self.moduleSettings.flashWhenBecomingReady - end, - set = function(info, value) - self.moduleSettings.flashWhenBecomingReady = value - end, - disabled = function() - return not self.moduleSettings.enabled - end, - hidden = function() - return self.moduleSettings.runeMode ~= "Graphical" - end, - order = 37 - } + opts.hideBlizz.desc = "Hides Blizzard Holy Power frame and disables all events related to it.\n\nNOTE: Blizzard attaches the holy power UI to the player's unitframe, so if you have that hidden in PlayerHealth, then this won't do anything." return opts end - --- OVERRIDE -function HolyPower.prototype:GetDefaultSettings() - local defaults = HolyPower.super.prototype.GetDefaultSettings(self) - - defaults["vpos"] = 0 - defaults["hpos"] = 10 - defaults["runeFontSize"] = 20 - defaults["runeMode"] = "Graphical" - defaults["usesDogTagStrings"] = false - defaults["hideBlizz"] = false - defaults["alwaysFullAlpha"] = false - defaults["displayMode"] = "Horizontal" - defaults["runeGap"] = 0 - defaults["flashWhenBecomingReady"] = true - defaults["inactiveDisplayMode"] = "Darkened" - - return defaults -end - - --- OVERRIDE -function HolyPower.prototype:Redraw() - HolyPower.super.prototype.Redraw(self) - - self:CreateFrame() -end - - --- OVERRIDE -function HolyPower.prototype:Enable(core) - HolyPower.super.prototype.Enable(self, core) - - self:RegisterEvent("UNIT_POWER", "UpdateRunePower"); - self:RegisterEvent("UNIT_DISPLAYPOWER", "UpdateRunePower"); - self:RegisterEvent("UNIT_AURA", "UpdateRunePower"); - self:RegisterEvent("PLAYER_ENTERING_WORLD", "UpdateRunePower"); - - if (self.moduleSettings.hideBlizz) then - self:HideBlizz() - end -end - -function HolyPower.prototype:UpdateRunePower() - local numReady = UnitPower("player", SPELL_POWER_HOLY_POWER) - - if self.moduleSettings.runeMode == "Graphical" then - for i=1, self.numRunes do - if i <= numReady then - self.frame.graphical[i].rune:SetVertexColor(1, 1, 1) - - if self.moduleSettings.inactiveDisplayMode == "Hidden" then - self.frame.graphical[i]:Show() - end - - if i > self.lastNumReady and self.moduleSettings.flashWhenBecomingReady then - local fadeInfo={ - mode = "IN", - timeToFade = runeShineFadeSpeed, - finishedFunc = function() self:ShineFinished(i) end, - finishedArg1 = i - } - UIFrameFade(self.frame.graphical[i].shine, fadeInfo); - end - else - if self.moduleSettings.inactiveDisplayMode == "Darkened" then - self.frame.graphical[i].rune:SetVertexColor(0, 0, 0) - elseif self.moduleSettings.inactiveDisplayMode == "Hidden" then - self.frame.graphical[i]:Hide() - end - end - end - elseif self.moduleSettings.runeMode == "Numeric" then - self.frame.numeric:SetText(tostring(numReady)) - self.frame.numeric:SetTextColor(self:GetColor("HolyPowerNumeric")) - end - - self.lastNumReady = numReady - - if (self.moduleSettings.hideBlizz) then - self:HideBlizz() - end -end - -function HolyPower.prototype:ShineFinished(rune) - UIFrameFadeOut(self.frame.graphical[rune].shine, runeShineFadeSpeed); -end - function HolyPower.prototype:GetRuneTexture(rune) if not rune or rune ~= tonumber(rune) then return @@ -298,102 +34,6 @@ function HolyPower.prototype:GetRuneTexture(rune) return "Interface\\PlayerFrame\\PaladinPowerTextures" end - -function HolyPower.prototype:CreateFrame() - HolyPower.super.prototype.CreateFrame(self) - - self.frame:SetFrameStrata("BACKGROUND") - self.frame:SetWidth(self.runeWidth*self.numRunes) - self.frame:SetHeight(self.runeHeight) - self.frame:ClearAllPoints() - self.frame:SetPoint("TOP", self.parent, "BOTTOM", self.moduleSettings.hpos, self.moduleSettings.vpos) - - self:CreateRuneFrame() - - self:SetDisplayMode() -end - -function HolyPower.prototype:SetDisplayMode() - if self.moduleSettings.runeMode == "Graphical" then - self.frame.numeric:Hide() - for i=1, self.numRunes do - self.frame.graphical[i]:Show() - end - elseif self.moduleSettings.runeMode == "Numeric" then - self.frame.numeric:Show() - for i=1, self.numRunes do - self.frame.graphical[i]:Hide() - end - end -end - -function HolyPower.prototype:CreateRuneFrame() - -- create numeric runes - self.frame.numeric = self:FontFactory(self.moduleSettings.runeFontSize, nil, self.frame.numeric) - - 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 (not self.frame.graphical) then - self.frame.graphical = {} - end - - for i=1, self.numRunes do - self:CreateRune(i) - end -end - -function HolyPower.prototype:CreateRune(i) - -- create runes - if (not self.frame.graphical[i]) then - self.frame.graphical[i] = CreateFrame("Frame", nil, self.frame) - self.frame.graphical[i].rune = self.frame.graphical[i]:CreateTexture(nil, "LOW") - self.frame.graphical[i].rune:SetAllPoints(self.frame.graphical[i]) - self.frame.graphical[i].shine = self.frame.graphical[i]:CreateTexture(nil, "OVERLAY") - - self:SetupRuneTexture(i) - self.frame.graphical[i].rune:SetVertexColor(0, 0, 0) - end - - self.frame.graphical[i]:SetFrameStrata("BACKGROUND") - self.frame.graphical[i]:SetWidth(self.runeWidth) - self.frame.graphical[i]:SetHeight(self.runeHeight) - - if self.moduleSettings.displayMode == "Horizontal" then - self.frame.graphical[i]:SetPoint("TOPLEFT", (i-1) * (self.runeWidth-5) + (i-1) + ((i-1) * self.moduleSettings.runeGap), 0) - else - self.frame.graphical[i]:SetPoint("TOPLEFT", 0, -1 * ((i-1) * (self.runeHeight-5) + (i-1) + ((i-1) * self.moduleSettings.runeGap))) - end - - self.frame.graphical[i]:Hide() - - self.frame.graphical[i].shine:SetTexture("Interface\\ComboFrame\\ComboPoint") - self.frame.graphical[i].shine:SetBlendMode("ADD") - self.frame.graphical[i].shine:SetTexCoord(0.5625, 1, 0, 1) - self.frame.graphical[i].shine:ClearAllPoints() - self.frame.graphical[i].shine:SetPoint("CENTER", self.frame.graphical[i], "CENTER") - self.frame.graphical[i].shine:SetWidth(self.runeWidth + 25) - self.frame.graphical[i].shine:SetHeight(self.runeHeight + 10) - self.frame.graphical[i].shine:Hide() -end - -function HolyPower.prototype:SetupRuneTexture(rune) - if not rune or rune < 1 or rune > #runeCoords then - return - end - - self.frame.graphical[rune].rune:SetTexture(self:GetRuneTexture(rune)) - local a,b,c,d = unpack(runeCoords[rune]) - self.frame.graphical[rune].rune:SetTexCoord(a, b, c, d) -end - -function HolyPower.prototype:GetAlphaAdd() - return 0.15 -end - function HolyPower.prototype:ShowBlizz() PaladinPowerBar:Show() @@ -403,35 +43,12 @@ function HolyPower.prototype:ShowBlizz() PaladinPowerBar:RegisterEvent("UNIT_AURA"); end - function HolyPower.prototype:HideBlizz() PaladinPowerBar:Hide() PaladinPowerBar:UnregisterAllEvents() end -function HolyPower.prototype:TargetChanged() - HolyPower.super.prototype.TargetChanged(self) - -- sort of a hack fix...if "ooc" alpha is set to 0, then the runes frame is all jacked up when the user spawns in - -- need to re-run CreateFrame in order to setup the frame properly. not sure why :( - self:Redraw() -end - -function HolyPower.prototype:InCombat() - HolyPower.super.prototype.InCombat(self) - self:Redraw() -end - -function HolyPower.prototype:OutCombat() - HolyPower.super.prototype.OutCombat(self) - self:Redraw() -end - -function HolyPower.prototype:CheckCombat() - HolyPower.super.prototype.CheckCombat(self) - self:Redraw() -end - -- Load us up local _, unitClass = UnitClass("player") if (unitClass == "PALADIN" and IceHUD.WowVer >= 40000) then diff --git a/modules/Shards.lua b/modules/Shards.lua new file mode 100644 index 0000000..ad6184b --- /dev/null +++ b/modules/Shards.lua @@ -0,0 +1,57 @@ +local AceOO = AceLibrary("AceOO-2.0") + +local ShardCounter = AceOO.Class(IceClassPowerCounter) + +function ShardCounter.prototype:init() + ShardCounter.super.prototype.init(self, "ShardCounter") + + self:SetDefaultColor("ShardCounterNumeric", 218, 231, 31) + + -- pulled from PaladinPowerBar.xml in Blizzard's UI source + self.runeCoords = + { + {0.01562500, 0.28125000, 0.00781250, 0.13281250}, + {0.01562500, 0.28125000, 0.00781250, 0.13281250}, + {0.01562500, 0.28125000, 0.00781250, 0.13281250}, + } + self.numericColor = "ShardCounterNumeric" + self.unitPower = SPELL_POWER_SOUL_SHARDS + self.runeHeight = 23 + self.runeWidth = 26 +end + +function ShardCounter.prototype:GetOptions() + local opts = ShardCounter.super.prototype.GetOptions(self) + + opts.hideBlizz.desc = "Hides Blizzard shard frame and disables all events related to it.\n\nNOTE: Blizzard attaches the shard UI to the player's unitframe, so if you have that hidden in PlayerHealth, then this won't do anything." + + return opts +end + +function ShardCounter.prototype:GetRuneTexture(rune) + if not rune or rune ~= tonumber(rune) then + return + end + + return "Interface\\PlayerFrame\\UI-WarlockShard" +end + +function ShardCounter.prototype:ShowBlizz() + ShardBarFrame:Show() + + ShardBarFrame:RegisterEvent("UNIT_POWER"); + ShardBarFrame:RegisterEvent("PLAYER_ENTERING_WORLD"); + ShardBarFrame:RegisterEvent("UNIT_DISPLAYPOWER"); +end + +function ShardCounter.prototype:HideBlizz() + ShardBarFrame:Hide() + + ShardBarFrame:UnregisterAllEvents() +end + +-- Load us up +local _, unitClass = UnitClass("player") +if (unitClass == "WARLOCK" and IceHUD.WowVer >= 40000) then + IceHUD.ShardCounter = ShardCounter:new() +end