From 49a590e879983d1c311bda8bfae45dad7b72126e Mon Sep 17 00:00:00 2001 From: Parnic Date: Sun, 26 Oct 2008 23:02:13 +0000 Subject: [PATCH] - added a global toggle for DogTags so they can be enabled or disabled for the mod - added an optional rare/elite/rare-elite indicator to the target health bar (off by default) - made configuration mode show target raid icons (and the new elite indicator as well) --- IceBarElement.lua | 10 +-- IceCore.lua | 10 +++ IceHUD.lua | 28 ++++++++ modules/FocusHealth.lua | 2 +- modules/FocusMana.lua | 2 +- modules/PetHealth.lua | 2 +- modules/PetMana.lua | 2 +- modules/PlayerHealth.lua | 10 ++- modules/PlayerMana.lua | 2 +- modules/RangeCheck.lua | 8 +-- modules/TargetHealth.lua | 147 +++++++++++++++++++++++++++++++++++++-- modules/TargetInfo.lua | 10 +-- modules/TargetMana.lua | 2 +- textures/Elite.blp | Bin 0 -> 23044 bytes textures/Rare.blp | Bin 0 -> 23044 bytes textures/RareElite.blp | Bin 0 -> 23044 bytes 16 files changed, 207 insertions(+), 28 deletions(-) create mode 100644 textures/Elite.blp create mode 100644 textures/Rare.blp create mode 100644 textures/RareElite.blp diff --git a/IceBarElement.lua b/IceBarElement.lua index 387001e..f7902d1 100644 --- a/IceBarElement.lua +++ b/IceBarElement.lua @@ -18,11 +18,6 @@ IceBarElement.prototype.CurrScale = 1 -- Constructor -- function IceBarElement.prototype:init(name) IceBarElement.super.prototype.init(self, name) - - if AceLibrary:HasInstance("LibDogTag-3.0") then - DogTag = AceLibrary("LibDogTag-3.0") - AceLibrary("LibDogTag-Unit-3.0") - end end @@ -33,6 +28,11 @@ end function IceBarElement.prototype:Enable() IceBarElement.super.prototype.Enable(self) + if IceHUD.IceCore:ShouldUseDogTags() and AceLibrary:HasInstance("LibDogTag-3.0") then + DogTag = AceLibrary("LibDogTag-3.0") + AceLibrary("LibDogTag-Unit-3.0") + end + if self.moduleSettings.myTagVersion < IceHUD.CurrTagVersion then local origDefaults = self:GetDefaultSettings() diff --git a/IceCore.lua b/IceCore.lua index 997d13e..75997be 100644 --- a/IceCore.lua +++ b/IceCore.lua @@ -61,6 +61,8 @@ function IceCore.prototype:init() barBlendMode = "BLEND", barBgBlendMode = "BLEND", + + bShouldUseDogTags = true } self:LoadPresets() @@ -450,6 +452,14 @@ function IceCore.prototype:ConfigModeToggle(bWantConfig) end end +function IceCore.prototype:ShouldUseDogTags() + return AceLibrary:HasInstance("LibDogTag-3.0") and self.settings.bShouldUseDogTags +end + +function IceCore.prototype:SetShouldUseDogTags(should) + self.settings.bShouldUseDogTags = should +end + ------------------------------------------------------------------------------- -- Presets -- diff --git a/IceHUD.lua b/IceHUD.lua index 51991ee..b2d6715 100644 --- a/IceHUD.lua +++ b/IceHUD.lua @@ -493,6 +493,34 @@ IceHUD.options = end, order = 95 }, + + useDogTags = { + type = 'toggle', + name = 'Use Dog Tags', + desc = 'Whether or not the addon should use the DogTag library (this will increase the CPU usage of the mod)\n\nNOTE: after changing this option, you must reload the UI or else bad things happen', + get = function() + return IceHUD.IceCore:ShouldUseDogTags() + end, + set = function(v) + StaticPopupDialogs["ICEHUD_CHANGED_DOGTAG"] = { + text = "This option requires the UI to be reloaded. Do you wish to reload it now?", + button1 = "Yes", + OnAccept = function() + ReloadUI() + end, + button2 = "No", + timeout = 0, + whileDead = 1, + hideOnEscape = 1 + }; + IceHUD.IceCore:SetShouldUseDogTags(v) + StaticPopup_Show("ICEHUD_CHANGED_DOGTAG") + end, + hidden = function() + return not AceLibrary:HasInstance("LibDogTag-3.0") + end, + order = 96 + }, } } diff --git a/modules/FocusHealth.lua b/modules/FocusHealth.lua index 993ae63..11e4816 100644 --- a/modules/FocusHealth.lua +++ b/modules/FocusHealth.lua @@ -366,7 +366,7 @@ function FocusHealth.prototype:Update(unit) self:UpdateBar(self.health/self.maxHealth, self.color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.healthPercentage * 100)) -- first see if we have LibMobHealth that we can piggyback on diff --git a/modules/FocusMana.lua b/modules/FocusMana.lua index 4f69626..fb17937 100644 --- a/modules/FocusMana.lua +++ b/modules/FocusMana.lua @@ -85,7 +85,7 @@ function FocusMana.prototype:Update(unit) self:UpdateBar(self.mana/self.maxMana, color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.manaPercentage * 100)) self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), color) end diff --git a/modules/PetHealth.lua b/modules/PetHealth.lua index d01452d..7c1cd31 100644 --- a/modules/PetHealth.lua +++ b/modules/PetHealth.lua @@ -112,7 +112,7 @@ function PetHealth.prototype:Update(unit) self:UpdateBar(self.health/self.maxHealth, color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.healthPercentage * 100)) end end diff --git a/modules/PetMana.lua b/modules/PetMana.lua index d9a6187..5f26364 100644 --- a/modules/PetMana.lua +++ b/modules/PetMana.lua @@ -123,7 +123,7 @@ function PetMana.prototype:Update(unit) self:UpdateBar(self.mana/self.maxMana, color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.manaPercentage * 100)) end end diff --git a/modules/PlayerHealth.lua b/modules/PlayerHealth.lua index 41b308f..8f4a231 100644 --- a/modules/PlayerHealth.lua +++ b/modules/PlayerHealth.lua @@ -726,7 +726,7 @@ function PlayerHealth.prototype:Update(unit) self:UpdateBar(self.health/self.maxHealth, color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.healthPercentage * 100)) self:SetBottomText2(self:GetFormattedText(self.health, self.maxHealth), textColor) end @@ -755,7 +755,9 @@ end function PlayerHealth.prototype:CreateTexCoord(texframe, icon, width, height, scale, left, right, top, bottom) - texframe = self.frame:CreateTexture(nil, "BACKGROUND") + if not texframe then + texframe = self.frame:CreateTexture(nil, "BACKGROUND") + end texframe:SetTexture(icon) texframe:SetTexCoord(left, right, top, bottom) self:SetTexScale(texframe, width, height, scale) @@ -777,6 +779,10 @@ end function PlayerHealth.prototype:DestroyTexFrame(texframe) + if not texframe then + return nil + end + texframe:SetTexture(nil) texframe:Hide() texframe:ClearAllPoints() diff --git a/modules/PlayerMana.lua b/modules/PlayerMana.lua index b783648..1f5a84d 100644 --- a/modules/PlayerMana.lua +++ b/modules/PlayerMana.lua @@ -214,7 +214,7 @@ function PlayerMana.prototype:Update(unit) end end - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then -- extra hack for whiny rogues (are there other kind?) local displayPercentage = self.manaPercentage if (self.manaType == 3) then diff --git a/modules/RangeCheck.lua b/modules/RangeCheck.lua index 20240a3..70cbaf7 100644 --- a/modules/RangeCheck.lua +++ b/modules/RangeCheck.lua @@ -14,15 +14,15 @@ function RangeCheck.prototype:init() if AceLibrary:HasInstance("LibRangeCheck-2.0") then LibRange = AceLibrary("LibRangeCheck-2.0") end - - if AceLibrary:HasInstance("LibDogTag-3.0") then - DogTag = AceLibrary("LibDogTag-3.0") - end end function RangeCheck.prototype:Enable(core) RangeCheck.super.prototype.Enable(self, core) + if IceHUD.IceCore:ShouldUseDogTags() then + DogTag = AceLibrary("LibDogTag-3.0") + end + self:RegisterFontStrings() end diff --git a/modules/TargetHealth.lua b/modules/TargetHealth.lua index a02be6d..fd0159f 100644 --- a/modules/TargetHealth.lua +++ b/modules/TargetHealth.lua @@ -5,6 +5,15 @@ IceTargetHealth = AceOO.Class(IceUnitBar) IceTargetHealth.prototype.color = nil IceTargetHealth.prototype.determineColor = true IceTargetHealth.prototype.registerEvents = true +IceTargetHealth.prototype.texWidth = 128 +IceTargetHealth.prototype.texHeight = 128 +IceTargetHealth.prototype.classLeft = 0 +IceTargetHealth.prototype.classRight = 0.9375 +IceTargetHealth.prototype.classTop = 0 +IceTargetHealth.prototype.classBottom = 0.78125 +IceTargetHealth.prototype.EliteTexture = IceElement.TexturePath .. "Elite" +IceTargetHealth.prototype.RareEliteTexture = IceElement.TexturePath .. "RareElite" +IceTargetHealth.prototype.RareTexture = IceElement.TexturePath .. "Rare" -- Constructor -- function IceTargetHealth.prototype:init(moduleName, unit) @@ -35,6 +44,8 @@ function IceTargetHealth.prototype:GetDefaultSettings() settings["raidIconYOffset"] = 0 settings["lockIconAlpha"] = false settings["abbreviateHealth"] = true + settings["classIconOffset"] = {x=0, y=0} + settings["showClassificationIcon"] = false return settings end @@ -191,11 +202,11 @@ function IceTargetHealth.prototype:GetOptions() end, order = 54 } - +if not IceHUD.IceCore:ShouldUseDogTags() then opts["shortenHealth"] = { type = 'toggle', name = 'Abbreviate estimated health', - desc = 'If this is checked, then a health value of 1100 will display as 1.1k, otherwise it shows the number\n\nNote: this only applies if you are NOT using DogTag', + desc = 'If this is checked, then a health value of 1100 will display as 1.1k, otherwise it shows the number', get = function() return self.moduleSettings.abbreviateHealth end, @@ -207,6 +218,64 @@ function IceTargetHealth.prototype:GetOptions() end, order = 40.1 } +end + + opts["showClassificationIcon"] = { + type = "toggle", + name = "Show Elite Icon", + desc = "Whether or not to show the rare/elite icon above this bar", + get = function() + return self.moduleSettings.showClassificationIcon + end, + set = function(value) + self.moduleSettings.showClassificationIcon = value + self:Redraw() + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 60 + } + + opts["classIconXOffset"] = { + type = "range", + name = "Elite Icon X Offset", + desc = "How far to push the elite icon right or left", + min = -300, + max = 300, + step = 1, + get = function() + return self.moduleSettings.classIconOffset['x'] + end, + set = function(value) + self.moduleSettings.classIconOffset['x'] = value + self:Redraw() + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 61 + } + + opts["classIconYOffset"] = { + type = "range", + name = "Elite Icon Y Offset", + desc = "How far to push the elite icon up or down", + min = -300, + max = 300, + step = 1, + get = function() + return self.moduleSettings.classIconOffset['y'] + end, + set = function(value) + self.moduleSettings.classIconOffset['y'] = value + self:Redraw() + end, + disabled = function() + return not self.moduleSettings.enabled + end, + order = 62 + } return opts end @@ -246,7 +315,7 @@ function IceTargetHealth.prototype:Update(unit) return end - if not (UnitExists(unit)) then + if unit and not (UnitExists(unit)) then self:Show(false) return else @@ -255,6 +324,31 @@ function IceTargetHealth.prototype:Update(unit) self:UpdateRaidTargetIcon() + local classification = UnitClassification(self.unit); + if not self.moduleSettings.showClassificationIcon then + self:DestroyTexFrame(self.frame.classIcon) + else + if not self.frame.classIcon then + self.frame.classIcon = self:CreateTexCoord(self.frame.classIcon, self.EliteTexture, self.texWidth, self.texHeight, + self.moduleSettings.scale / 3.0, self.classLeft, self.classRight, self.classTop, self.classBottom) + end + + self:SetTexLoc(self.frame.classIcon, self.moduleSettings.classIconOffset['x'], self.moduleSettings.classIconOffset['y']) + self.frame.classIcon:Show() + self.frame.classIcon:SetAlpha(self.alpha == 0 and 0 or math.min(1, self.alpha + 0.2)) + + if IceHUD.IceCore:IsInConfigMode() or classification == "worldboss" or classification == "elite" then + self.frame.classIcon:SetTexture(self.EliteTexture) + elseif classification == "rareelite" then + self.frame.classIcon:SetTexture(self.RareEliteTexture) + elseif classification == "rare" then + self.frame.classIcon:SetTexture(self.RareTexture) + else + self:DestroyTexFrame(self.frame.classIcon) + self.frame.classIcon:Hide() + end + end + if self.determineColor then self.color = "TargetHealthFriendly" -- friendly > 4 @@ -280,7 +374,7 @@ function IceTargetHealth.prototype:Update(unit) self:UpdateBar(self.health/self.maxHealth, self.color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.healthPercentage * 100)) if self.moduleSettings.abbreviateHealth then @@ -297,6 +391,47 @@ function IceTargetHealth.prototype:Update(unit) end +function IceTargetHealth.prototype:CreateTexCoord(texframe, icon, width, height, scale, left, right, top, bottom) + if not texframe then + texframe = self.frame:CreateTexture(nil, "BACKGROUND") + end + + texframe:SetTexture(icon) + if left and right and top and bottom then + texframe:SetTexCoord(left, right, top, bottom) + end + self:SetTexScale(texframe, width, height, scale or 1) + + return texframe +end + + +function IceTargetHealth.prototype:SetTexLoc(texframe, xpos, ypos, anchorFrom, anchorTo) + texframe:ClearAllPoints() + texframe:SetPoint(anchorFrom or "TOPLEFT", self.frame, anchorTo or "TOPLEFT", xpos or 0, ypos or 0) +end + + +function IceTargetHealth.prototype:SetTexScale(texframe, width, height, scale) + texframe:SetWidth(width * scale) + texframe:SetHeight(height * scale) +end + + +function IceTargetHealth.prototype:DestroyTexFrame(texframe) + if not texframe then + return nil + end + + texframe:SetTexture(nil) + texframe:Hide() + texframe:ClearAllPoints() + + return texframe +end + + + function IceTargetHealth.prototype:CreateRaidIconFrame() if (not self.frame.raidIcon) then self.frame.raidIcon = CreateFrame("Frame", nil, self.frame) @@ -329,12 +464,12 @@ function IceTargetHealth.prototype:UpdateRaidTargetIcon() self.frame.raidIcon:SetFrameStrata("LOW") end - if not (UnitExists(self.unit)) or not self.moduleSettings.showRaidIcon then + if not self.moduleSettings.showRaidIcon or (not UnitExists(self.unit) and not IceHUD.IceCore:IsInConfigMode()) then self.frame.raidIcon:Hide() return end - local index = GetRaidTargetIndex(self.unit); + local index = IceHUD.IceCore:IsInConfigMode() and 1 or GetRaidTargetIndex(self.unit); if (index and (index > 0)) then SetRaidTargetIconTexture(self.frame.raidIcon.icon, index) diff --git a/modules/TargetInfo.lua b/modules/TargetInfo.lua index 993c9d4..d664dbc 100644 --- a/modules/TargetInfo.lua +++ b/modules/TargetInfo.lua @@ -33,11 +33,6 @@ function TargetInfo.prototype:init() TargetInfo.super.prototype.init(self, "TargetInfo") self.scalingEnabled = true - - if AceLibrary:HasInstance("LibDogTag-3.0") then - DogTag = AceLibrary("LibDogTag-3.0") - AceLibrary("LibDogTag-Unit-3.0") - end end @@ -48,6 +43,11 @@ end function TargetInfo.prototype:Enable(core) TargetInfo.super.prototype.Enable(self, core) + if IceHUD.IceCore:ShouldUseDogTags() then + DogTag = AceLibrary("LibDogTag-3.0") + AceLibrary("LibDogTag-Unit-3.0") + end + self:RegisterEvent("UNIT_AURA", "AuraChanged") self:RegisterEvent("UNIT_NAME_UPDATE", "TargetName") diff --git a/modules/TargetMana.lua b/modules/TargetMana.lua index 45b7a47..f5b7bad 100644 --- a/modules/TargetMana.lua +++ b/modules/TargetMana.lua @@ -107,7 +107,7 @@ function IceTargetMana.prototype:Update(unit) self:UpdateBar(self.mana/self.maxMana, color) - if not AceLibrary:HasInstance("LibDogTag-3.0") then + if not IceHUD.IceCore:ShouldUseDogTags() then self:SetBottomText1(math.floor(self.manaPercentage * 100)) self:SetBottomText2(self:GetFormattedText(self.mana, self.maxMana), color) end diff --git a/textures/Elite.blp b/textures/Elite.blp new file mode 100644 index 0000000000000000000000000000000000000000..2af1eff8fc9bff210c9489bf5fd90bf5b787a33d GIT binary patch literal 23044 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

!gSf%l%XklAr`soWer9K^5~HjvA9+ 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 literal 0 HcmV?d00001 diff --git a/textures/Rare.blp b/textures/Rare.blp new file mode 100644 index 0000000000000000000000000000000000000000..5a04ceeadb9c8a324ff00ebcf39bbd123626c195 GIT binary patch literal 23044 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 literal 0 HcmV?d00001 diff --git a/textures/RareElite.blp b/textures/RareElite.blp new file mode 100644 index 0000000000000000000000000000000000000000..6dfea88b0658dfe8cad530c8db31703d9820cc42 GIT binary patch literal 23044 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 bxNsRMjNs12)8BwMEXq^4EE9gO4&(n1(-#uB literal 0 HcmV?d00001