From 4e83db53d338ee48644f17424488a599a3ef9fb0 Mon Sep 17 00:00:00 2001 From: Parnic Date: Sun, 10 Feb 2008 22:07:46 +0000 Subject: [PATCH] - made ComboPoints module only load for druids and rogues - added SunderCount module that behaves exactly like combo points, only for sunder debuffs on the target --- IceHUD.toc | 1 + modules/ComboPoints.lua | 5 +- modules/SunderCount.lua | 261 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 modules/SunderCount.lua diff --git a/IceHUD.toc b/IceHUD.toc index 4b9711c..750ed10 100644 --- a/IceHUD.toc +++ b/IceHUD.toc @@ -38,3 +38,4 @@ modules\ComboPoints.lua modules\CastBar.lua modules\TargetCast.lua modules\MirrorBar.lua +modules\SunderCount.lua diff --git a/modules/ComboPoints.lua b/modules/ComboPoints.lua index 565e492..a9e3668 100644 --- a/modules/ComboPoints.lua +++ b/modules/ComboPoints.lua @@ -241,4 +241,7 @@ end -- Load us up -IceHUD.ComboPoints = ComboPoints:new() +local _, unitClass = UnitClass("player") +if (unitClass == "DRUID" or unitClass == "ROGUE") then + IceHUD.ComboPoints = ComboPoints:new() +end \ No newline at end of file diff --git a/modules/SunderCount.lua b/modules/SunderCount.lua new file mode 100644 index 0000000..2455d4e --- /dev/null +++ b/modules/SunderCount.lua @@ -0,0 +1,261 @@ +local AceOO = AceLibrary("AceOO-2.0") + +local SunderCount = AceOO.Class(IceElement) +local MAX_DEBUFF_COUNT = 40 + +SunderCount.prototype.sunderSize = 20 + +-- Constructor -- +function SunderCount.prototype:init() + SunderCount.super.prototype.init(self, "SunderCount") + + self:SetDefaultColor("SunderCount", 1, 1, 0) + self.scalingEnabled = true +end + + + +-- 'Public' methods ----------------------------------------------------------- + + +-- OVERRIDE +function SunderCount.prototype:GetOptions() + local opts = SunderCount.super.prototype.GetOptions(self) + + opts["vpos"] = { + type = "range", + name = "Vertical Position", + desc = "Vertical Position", + get = function() + return self.moduleSettings.vpos + end, + set = function(v) + self.moduleSettings.vpos = v + self:Redraw() + end, + min = -300, + max = 200, + step = 10, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 31 + } + + opts["sunderFontSize"] = { + type = "range", + name = "Sunder Count Font Size", + desc = "Sunder Count Font Size", + get = function() + return self.moduleSettings.sunderFontSize + end, + set = function(v) + self.moduleSettings.sunderFontSize = v + self:Redraw() + end, + min = 10, + max = 40, + step = 1, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 32 + } + + opts["sunderMode"] = { + type = "text", + name = "Display Mode", + desc = "Show graphical or numeric sunders", + get = function() + return self.moduleSettings.sunderMode + end, + set = function(v) + self.moduleSettings.sunderMode = v + self:Redraw() + end, + validate = { "Numeric", "Graphical" }, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 33 + } + + opts["gradient"] = { + type = "toggle", + name = "Change color", + desc = "1 compo point: yellow, 5 sunders: red", + get = function() + return self.moduleSettings.gradient + end, + set = function(v) + self.moduleSettings.gradient = v + self:Redraw() + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 34 + } + + return opts +end + + +-- OVERRIDE +function SunderCount.prototype:GetDefaultSettings() + local defaults = SunderCount.super.prototype.GetDefaultSettings(self) + defaults["vpos"] = 0 + defaults["sunderFontSize"] = 20 + defaults["sunderMode"] = "Numeric" + defaults["gradient"] = false + return defaults +end + + +-- OVERRIDE +function SunderCount.prototype:Redraw() + SunderCount.super.prototype.Redraw(self) + + self:CreateFrame() + self:UpdateSunderCount() +end + + +-- OVERRIDE +function SunderCount.prototype:Enable(core) + SunderCount.super.prototype.Enable(self, core) + + self:RegisterEvent("PLAYER_TARGET_CHANGED", "UpdateSunderCount") + self:RegisterEvent("UNIT_AURA", "UpdateSunderCount") +end + + + +-- 'Protected' methods -------------------------------------------------------- + +-- OVERRIDE +function SunderCount.prototype:CreateFrame() + SunderCount.super.prototype.CreateFrame(self) + + self.frame:SetFrameStrata("BACKGROUND") + self.frame:SetWidth(self.sunderSize*5) + self.frame:SetHeight(1) + self.frame:ClearAllPoints() + self.frame:SetPoint("TOP", self.parent, "BOTTOM", 0, self.moduleSettings.vpos) + + self.frame:Show() + + self:CreateSunderFrame() +end + + + +function SunderCount.prototype:CreateSunderFrame() + + -- create numeric sunders + self.frame.numeric = self:FontFactory(self.moduleSettings.sunderFontSize, 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:Show() + + if (not self.frame.graphicalBG) then + self.frame.graphicalBG = {} + self.frame.graphical = {} + end + + -- create backgrounds + for i = 1, 5 do + if (not self.frame.graphicalBG[i]) then + self.frame.graphicalBG[i] = CreateFrame("StatusBar", nil, self.frame) + self.frame.graphicalBG[i]:SetStatusBarTexture(IceElement.TexturePath .. "ComboBG") + end + self.frame.graphicalBG[i]:SetFrameStrata("BACKGROUND") + self.frame.graphicalBG[i]:SetWidth(self.sunderSize) + self.frame.graphicalBG[i]:SetHeight(self.sunderSize) + self.frame.graphicalBG[i]:SetPoint("TOPLEFT", (i-1) * (self.sunderSize-5) + (i-1), 0) + self.frame.graphicalBG[i]:SetAlpha(0.15) + self.frame.graphicalBG[i]:SetStatusBarColor(self:GetColor("SunderCount")) + + self.frame.graphicalBG[i]:Hide() + end + + -- create sunders + for i = 1, 5 do + if (not self.frame.graphical[i]) then + self.frame.graphical[i] = CreateFrame("StatusBar", nil, self.frame) + self.frame.graphical[i]:SetStatusBarTexture(IceElement.TexturePath .. "Combo") + end + self.frame.graphical[i]:SetFrameStrata("BACKGROUND") + self.frame.graphical[i]:SetAllPoints(self.frame.graphicalBG[i]) + + local r, g, b = self:GetColor("SunderCount") + if (self.moduleSettings.gradient) then + g = g - (0.15*i) + end + self.frame.graphical[i]:SetStatusBarColor(r, g, b) + + self.frame.graphical[i]:Hide() + end +end + + +function SunderCount.prototype:GetDebuffCount(unit, ability) + for i = 1, MAX_DEBUFF_COUNT do + local name, _, texture, applications = UnitDebuff(unit, i) + + if not texture then + break + end + + if string.match(texture, ability) then + return applications + end + end + + return 0 +end + + +function SunderCount.prototype:UpdateSunderCount() + local points = self:GetDebuffCount("target", "Ability_Warrior_Sunder") + + if (points == 0) then + points = nil + end + + if (self.moduleSettings.sunderMode == "Numeric") then + local r, g, b = self:GetColor("SunderCount") + if (self.moduleSettings.gradient and points) then + g = g - (0.15*points) + end + self.frame.numeric:SetTextColor(r, g, b, 0.7) + + self.frame.numeric:SetText(points) + else + self.frame.numeric:SetText() + + for i = 1, table.getn(self.frame.graphical) do + if (points ~= nil) then + self.frame.graphicalBG[i]:Show() + else + self.frame.graphicalBG[i]:Hide() + end + + if (points ~= nil and i <= points) then + self.frame.graphical[i]:Show() + else + self.frame.graphical[i]:Hide() + end + end + end +end + + +-- Load us up +local _, unitClass = UnitClass("player") +if (unitClass == "WARRIOR") then + IceHUD.SunderCount = SunderCount:new() +end