From 2f514430912d66641961a1bf0adaf5ff54cc09e7 Mon Sep 17 00:00:00 2001 From: iceroth Date: Sun, 6 Aug 2006 05:45:56 +0000 Subject: [PATCH] Version 0.4 - New bar type - More configuration options --- IceBarElement.lua | 65 +++--- IceCore.lua | 150 ++++++++++++- IceElement.lua | 7 +- IceHUD.lua | 452 ++++++++++++++++++++++++++++------------ IceHUD.toc | 2 +- modules/CastBar.lua | 38 +++- modules/PetHealth.lua | 1 + modules/PetMana.lua | 1 + modules/PlayerMana.lua | 29 ++- textures/Bar.blp | Bin 44900 -> 44884 bytes textures/BarBG.blp | Bin 0 -> 44884 bytes textures/HiBar.blp | Bin 44900 -> 44884 bytes textures/HiBarBG.blp | Bin 44900 -> 44884 bytes textures/RoundBar.blp | Bin 0 -> 44884 bytes textures/RoundBarBG.blp | Bin 0 -> 44884 bytes 15 files changed, 568 insertions(+), 177 deletions(-) create mode 100644 textures/BarBG.blp create mode 100644 textures/RoundBar.blp create mode 100644 textures/RoundBarBG.blp diff --git a/IceBarElement.lua b/IceBarElement.lua index 8f8577e..1b2b44b 100644 --- a/IceBarElement.lua +++ b/IceBarElement.lua @@ -3,17 +3,10 @@ local AceOO = AceLibrary("AceOO-2.0") IceBarElement = AceOO.Class(IceElement) IceBarElement.virtual = true -IceBarElement.BackgroundAlpha = 0.25 - IceBarElement.TexturePath = IceHUD.Location .. "\\textures\\" -IceBarElement.BackgroundTexture = IceHUD.Location .. "\\textures\\HiBarBG" -IceBarElement.BarProportion = 0.36 IceBarElement.BarTextureWidth = 128 IceBarElement.prototype.barFrame = nil -IceBarElement.prototype.width = nil -IceBarElement.prototype.height = nil -IceBarElement.prototype.backgroundAlpha = nil IceBarElement.prototype.combat = nil @@ -23,20 +16,17 @@ IceBarElement.prototype.combat = nil function IceBarElement.prototype:init(name) IceBarElement.super.prototype.init(self, name) - self.width = 77 - self.height = 154 - - self.backgroundAlpha = IceBarElement.BackgroundAlpha + self:SetColor("background", 50, 50, 50) end - -- 'Public' methods ----------------------------------------------------------- -- OVERRIDE function IceBarElement.prototype:Enable() IceBarElement.super.prototype.Enable(self) + self:RegisterEvent("PLAYER_REGEN_DISABLED", "InCombat") self:RegisterEvent("PLAYER_REGEN_ENABLED", "OutCombat") self:RegisterEvent("PLAYER_ENTERING_WORLD", "CheckCombat") @@ -133,25 +123,25 @@ function IceBarElement.prototype:CreateBackground() end self.frame:SetFrameStrata("BACKGROUND") - self.frame:SetWidth(self.width) - self.frame:SetHeight(self.height) + self.frame:SetWidth(self.settings.barWidth) + self.frame:SetHeight(self.settings.barHeight) if not (self.frame.bg) then self.frame.bg = self.frame:CreateTexture(nil, "BACKGROUND") end - self.frame.bg:SetTexture(IceBarElement.BackgroundTexture) + self.frame.bg:SetTexture(IceBarElement.TexturePath .. self.settings.barTexture.."BG") self.frame.bg:ClearAllPoints() self.frame.bg:SetAllPoints(self.frame) if (self.moduleSettings.side == IceCore.Side.Left) then self.frame.bg:SetTexCoord(1, 0, 0, 1) else - self.frame.bg:SetTexCoord(1, 0, 1, 0) + self.frame.bg:SetTexCoord(0, 1, 0, 1) end self.frame:SetStatusBarTexture(self.frame.bg) - self.frame:SetStatusBarColor(self:GetColor("undef", self.backgroundAlpha)) + self.frame:SetStatusBarColor(self:GetColor("undef", self.settings.alphabg)) local ownPoint = "LEFT" if (self.moduleSettings.side == ownPoint) then @@ -159,8 +149,8 @@ function IceBarElement.prototype:CreateBackground() end -- ofxx = (bar width) + (extra space in between the bars) - local offx = (IceBarElement.BarProportion * self.width * self.moduleSettings.offset) - + (self.moduleSettings.offset * 5) + local offx = (self.settings.barProportion * self.settings.barWidth * self.moduleSettings.offset) + + (self.moduleSettings.offset * self.settings.barSpace) if (self.moduleSettings.side == IceCore.Side.Left) then offx = offx * -1 end @@ -177,8 +167,8 @@ function IceBarElement.prototype:CreateBar() end self.barFrame:SetFrameStrata("BACKGROUND") - self.barFrame:SetWidth(self.width) - self.barFrame:SetHeight(self.height) + self.barFrame:SetWidth(self.settings.barWidth) + self.barFrame:SetHeight(self.settings.barHeight) if not (self.barFrame.bar) then @@ -203,8 +193,8 @@ end function IceBarElement.prototype:CreateTexts() - self.frame.bottomUpperText = self:FontFactory(nil, self.settings.barFontSize, nil, self.frame.bottomUpperText) - self.frame.bottomLowerText = self:FontFactory(nil, self.settings.barFontSize, nil, self.frame.bottomLowerText) + self.frame.bottomUpperText = self:FontFactory(self.settings.barFontBold, self.settings.barFontSize, nil, self.frame.bottomUpperText) + self.frame.bottomLowerText = self:FontFactory(self.settings.barFontBold, self.settings.barFontSize, nil, self.frame.bottomLowerText) self.frame.bottomUpperText:SetWidth(80) self.frame.bottomLowerText:SetWidth(120) @@ -232,10 +222,10 @@ function IceBarElement.prototype:CreateTexts() local parentPoint = self:Flip(self.moduleSettings.side) - local offx = 2 + local offx = 0 -- adjust offset for bars where text is aligned to the outer side if (self.moduleSettings.offset <= 1) then - offx = IceBarElement.BarProportion * self.width - offx + offx = self.settings.barProportion * self.settings.barWidth - offx end @@ -248,6 +238,18 @@ function IceBarElement.prototype:CreateTexts() self.frame.bottomUpperText:SetPoint("TOP"..ownPoint , self.frame, "BOTTOM"..parentPoint, offx, -1) self.frame.bottomLowerText:SetPoint("TOP"..ownPoint , self.frame, "BOTTOM"..parentPoint, offx, -15) + + if (self.settings.textVisible["upper"]) then + self.frame.bottomUpperText:Show() + else + self.frame.bottomUpperText:Hide() + end + + if (self.settings.textVisible["lower"]) then + self.frame.bottomLowerText:Show() + else + self.frame.bottomLowerText:Hide() + end end @@ -273,7 +275,8 @@ function IceBarElement.prototype:UpdateBar(scale, color, alpha) alpha = alpha or 1 self.frame:SetAlpha(alpha) - self.frame:SetStatusBarColor(self:GetColor(color, self.alpha)) + local c = self.settings.backgroundColor + self.frame:SetStatusBarColor(c.r, c.g, c.b, self.settings.alphabg) self.barFrame:SetStatusBarColor(self:GetColor(color)) @@ -284,6 +287,10 @@ end -- Bottom line 1 function IceBarElement.prototype:SetBottomText1(text, color) + if not (self.settings.textVisible["upper"]) and not (self.moduleSettings.alwaysShowText) then + return + end + if not (color) then color = "text" end @@ -309,6 +316,10 @@ end -- Bottom line 2 function IceBarElement.prototype:SetBottomText2(text, color, alpha) + if not (self.settings.textVisible["lower"]) and not (self.moduleSettings.alwaysShowText) then + return + end + if not (color) then color = "text" end @@ -341,10 +352,8 @@ end function IceBarElement.prototype:Update() if (self.combat) then self.alpha = self.settings.alphaic - self.backgroundAlpha = IceBarElement.BackgroundAlpha else self.alpha = self.settings.alphaooc - self.backgroundAlpha = IceBarElement.BackgroundAlpha end end diff --git a/IceCore.lua b/IceCore.lua index 34e491e..309456e 100644 --- a/IceCore.lua +++ b/IceCore.lua @@ -14,7 +14,7 @@ IceCore.prototype.settings = nil IceCore.prototype.IceHUDFrame = nil IceCore.prototype.elements = {} IceCore.prototype.enabled = nil - +IceCore.prototype.presets = {} -- Constructor -- function IceCore.prototype:init() @@ -30,19 +30,30 @@ function IceCore.prototype:init() self:RegisterEvent(IceCore.RegisterModule, "Register") self:TriggerEvent(IceCore.Loaded) - + -- DEFAULT SETTINGS + local defaultPreset = "RoundBar" local defaults = { gap = 150, verticalPos = -150, scale = 1, alphaooc = 0.3, alphaic = 0.6, + alphabg = 0.2, + backgroundColor = {r = 0.2, g = 0.2, b = 0.2}, lockTextAlpha = true, barTexture = "Bar", barFontSize = 13, + textVisible = {upper = true, lower = true}, + barPreset = defaultPreset, + debug = false } + self:LoadPresets() + for k, v in pairs(self.presets[defaultPreset]) do + defaults[k] = v + end + -- get default settings from the modules defaults.modules = {} for i = 1, table.getn(self.elements) do @@ -158,6 +169,7 @@ end function IceCore.prototype:SetGap(value) self.settings.gap = value self.IceHUDFrame:SetWidth(self.settings.gap) + self:Redraw() end @@ -189,6 +201,27 @@ function IceCore.prototype:SetAlphaIC(value) end +function IceCore.prototype:GetAlphaBG() + return self.settings.alphabg +end +function IceCore.prototype:SetAlphaBG(value) + self.settings.alphabg = value + self:Redraw() +end + + +function IceCore.prototype:GetBackgroundColor() + local c = self.settings.backgroundColor + return c.r, c.g, c.b +end +function IceCore.prototype:SetBackgroundColor(r, g, b) + self.settings.backgroundColor.r = r + self.settings.backgroundColor.g = g + self.settings.backgroundColor.b = b + self:Redraw() +end + + function IceCore.prototype:GetLockTextAlpha() return self.settings.lockTextAlpha end @@ -207,6 +240,24 @@ function IceCore.prototype:SetBarFontSize(value) end +function IceCore.prototype:GetBarFontBold() + return self.settings.barFontBold +end +function IceCore.prototype:SetBarFontBold(value) + self.settings.barFontBold = value + self:Redraw() +end + + +function IceCore.prototype:GetTextVisibility(text) + return self.settings.textVisible[text] +end +function IceCore.prototype:SetTextVisibility(text, value) + self.settings.textVisible[text] = value + self:Redraw() +end + + function IceCore.prototype:GetBarTexture() return self.settings.barTexture end @@ -215,3 +266,98 @@ function IceCore.prototype:SetBarTexture(value) self:Redraw() end + +function IceCore.prototype:GetBarWidth() + return self.settings.barWidth +end +function IceCore.prototype:SetBarWidth(value) + self.settings.barWidth = value + self:Redraw() +end + + +function IceCore.prototype:GetBarHeight() + return self.settings.barHeight +end +function IceCore.prototype:SetBarHeight(value) + self.settings.barHeight = value + self:Redraw() +end + + +function IceCore.prototype:GetBarProportion() + return self.settings.barProportion +end +function IceCore.prototype:SetBarProportion(value) + self.settings.barProportion = value + self:Redraw() +end + + +function IceCore.prototype:GetBarSpace() + return self.settings.barSpace +end +function IceCore.prototype:SetBarSpace(value) + self.settings.barSpace = value + self:Redraw() +end + + +function IceCore.prototype:GetBarPreset() + return self.settings.barPreset +end +function IceCore.prototype:SetBarPreset(value) + self.settings.barPreset = value + self:ChangePreset(value) + self:Redraw() +end +function IceCore.prototype:ChangePreset(value) + self:SetBarTexture(self.presets[value].barTexture) + self:SetBarHeight(self.presets[value].barHeight) + self:SetBarWidth(self.presets[value].barWidth) + self:SetBarSpace(self.presets[value].barSpace) + self:SetBarProportion(self.presets[value].barProportion) +end + + +function IceCore.prototype:GetDebug() + return self.settings.debug +end +function IceCore.prototype:SetDebug(value) + self.settings.debug = value + IceHUD:SetDebugging(value) +end + + + + +------------------------------------------------------------------------------- +-- Presets -- +------------------------------------------------------------------------------- + +function IceCore.prototype:LoadPresets() + self.presets["Bar"] = { + barTexture = "Bar", + barWidth = 63, + barHeight = 150, + barProportion = 0.34, + barSpace = 4, + } + + self.presets["HiBar"] = { + barTexture = "HiBar", + barWidth = 63, + barHeight = 150, + barProportion = 0.34, + barSpace = 4, + } + + self.presets["RoundBar"] = { + barTexture = "RoundBar", + barWidth = 155, + barHeight = 220, + barProportion = 0.14, + barSpace = 1, + } +end + diff --git a/IceElement.lua b/IceElement.lua index bafac3c..9052609 100644 --- a/IceElement.lua +++ b/IceElement.lua @@ -174,8 +174,11 @@ end function IceElement.prototype:FontFactory(weight, size, frame, font) - weight = weight or "" - local fontFile = IceHUD.Location .. "\\fonts\\Calibri" .. weight ..".ttf" + local weightString = "" + if (weight) then + weightString = "Bold" + end + local fontFile = IceHUD.Location .. "\\fonts\\Calibri" .. weightString ..".ttf" if not (frame) then frame = self.frame diff --git a/IceHUD.lua b/IceHUD.lua index 171c780..97777e9 100644 --- a/IceHUD.lua +++ b/IceHUD.lua @@ -14,143 +14,319 @@ IceHUD.options = order = 10 }, - vpos = { - type = 'range', - name = 'Vertical position', - desc = 'Vertical position', - get = function() - return IceHUD.IceCore:GetVerticalPos() - end, - set = function(v) - IceHUD.IceCore:SetVerticalPos(v) - end, - min = -300, - max = 300, - step = 10, - order = 11 + positioningSettings = { + type = 'group', + name = 'Positioning Settings', + desc = 'Settings related to positioning and alpha', + order = 11, + args = { + vpos = { + type = 'range', + name = 'Vertical position', + desc = 'Vertical position', + get = function() + return IceHUD.IceCore:GetVerticalPos() + end, + set = function(v) + IceHUD.IceCore:SetVerticalPos(v) + end, + min = -300, + max = 300, + step = 10, + order = 11 + }, + + gap = { + type = 'range', + name = 'Gap', + desc = 'Distance between the left and right bars', + get = function() + return IceHUD.IceCore:GetGap() + end, + set = function(v) + IceHUD.IceCore:SetGap(v) + end, + min = 50, + max = 300, + step = 5, + order = 12, + }, + + scale = { + type = 'range', + name = 'Scale', + desc = 'HUD scale', + get = function() + return IceHUD.IceCore:GetScale() + end, + set = function(v) + IceHUD.IceCore:SetScale(v) + end, + min = 0.5, + max = 1.5, + step = 0.05, + isPercent = true, + order = 13, + }, + } }, - gap = { - type = 'range', - name = 'Gap', - desc = 'Distance between the left and right bars', - get = function() - return IceHUD.IceCore:GetGap() - end, - set = function(v) - IceHUD.IceCore:SetGap(v) - end, - min = 50, - max = 300, - step = 5, + + alphaSettings = { + type = 'group', + name = 'Transparency Settings', + desc = 'Settings for bar transparencies', order = 12, + args = { + alphaic = { + type = 'range', + name = 'Alpha IC', + desc = 'Bar alpha In Combat', + get = function() + return IceHUD.IceCore:GetAlphaIC() + end, + set = function(v) + IceHUD.IceCore:SetAlphaIC(v) + end, + min = 0, + max = 1, + step = 0.05, + isPercent = true, + order = 14, + }, + + alphaooc = { + type = 'range', + name = 'Alpha OOC', + desc = 'Bar alpha Out Of Combat', + get = function() + return IceHUD.IceCore:GetAlphaOOC() + end, + set = function(v) + IceHUD.IceCore:SetAlphaOOC(v) + end, + min = 0, + max = 1, + step = 0.05, + isPercent = true, + order = 15, + }, + + alphabg = { + type = 'range', + name = 'Background Alpha', + desc = 'Background alpha for bars', + get = function() + return IceHUD.IceCore:GetAlphaBG() + end, + set = function(v) + IceHUD.IceCore:SetAlphaBG(v) + end, + min = 0, + max = 1, + step = 0.05, + isPercent = true, + order = 16, + }, + + backgroundColor = { + type = 'color', + name = 'Background Color', + desc = 'Background Color', + get = function() + return IceHUD.IceCore:GetBackgroundColor() + end, + set = function(r, g, b) + IceHUD.IceCore:SetBackgroundColor(r, g, b) + end, + }, + } }, - scale = { - type = 'range', - name = 'Scale', - desc = 'HUD scale', - get = function() - return IceHUD.IceCore:GetScale() - end, - set = function(v) - IceHUD.IceCore:SetScale(v) - end, - min = 0.5, - max = 1.5, - step = 0.05, - order = 13, - }, - alphaooc = { - type = 'range', - name = 'Alpha OOC', - desc = 'Bar alpha Out Of Combat', - get = function() - return IceHUD.IceCore:GetAlphaOOC() - end, - set = function(v) - IceHUD.IceCore:SetAlphaOOC(v) - end, - min = 0, - max = 1, - step = 0.05, - order = 14, + textSettings = { + type = 'group', + name = 'Text Settings', + desc = 'Settings related to texts', + order = 15, + args = { + fontsize = { + type = 'range', + name = 'Bar Font Size', + desc = 'Bar Font Size', + get = function() + return IceHUD.IceCore:GetBarFontSize() + end, + set = function(v) + IceHUD.IceCore:SetBarFontSize(v) + end, + min = 8, + max = 20, + step = 1, + order = 11 + }, + + fontBold = { + type = 'toggle', + name = 'Bar Font Bold', + desc = 'Bar Font Bold', + get = function() + return IceHUD.IceCore:GetBarFontBold() + end, + set = function(v) + IceHUD.IceCore:SetBarFontBold(v) + end, + order = 12 + }, + + lockFontAlpha = { + type = "toggle", + name = "Lock Bar Text Alpha", + desc = "Lock Bar Text Alpha", + get = function() + return IceHUD.IceCore:GetLockTextAlpha() + end, + set = function(value) + IceHUD.IceCore:SetLockTextAlpha(value) + end, + order = 13 + }, + + upperTextVisible = { + type = 'toggle', + name = 'Upper text visible', + desc = 'Toggle upper text visibility', + get = function() + return IceHUD.IceCore:GetTextVisibility("upper") + end, + set = function(v) + IceHUD.IceCore:SetTextVisibility("upper", v) + end, + order = 14 + }, + + lowerTextVisible = { + type = 'toggle', + name = 'Lower text visible', + desc = 'Toggle lower text visibility', + get = function() + return IceHUD.IceCore:GetTextVisibility("lower") + end, + set = function(v) + IceHUD.IceCore:SetTextVisibility("lower", v) + end, + order = 15 + }, + } }, - - alphaic = { - type = 'range', - name = 'Alpha IC', - desc = 'Bar alpha In Combat', - get = function() - return IceHUD.IceCore:GetAlphaIC() - end, - set = function(v) - IceHUD.IceCore:SetAlphaIC(v) - end, - min = 0, - max = 1, - step = 0.05, - order = 15 - }, - - alphaooc = { - type = 'range', - name = 'Alpha OOC', - desc = 'Bar alpha Out Of Combat', - get = function() - return IceHUD.IceCore:GetAlphaOOC() - end, - set = function(v) - IceHUD.IceCore:SetAlphaOOC(v) - end, - min = 0, - max = 1, - step = 0.05, - order = 16, - }, - - lockFontAlpha = { - type = "toggle", - name = "Lock Bar Text Alpha", - desc = "Lock Bar Text Alpha", - get = function() - return IceHUD.IceCore:GetLockTextAlpha() - end, - set = function(value) - IceHUD.IceCore:SetLockTextAlpha(value) - end, - order = 17 - }, - - fontsize = { - type = 'range', - name = 'Bar Font Size', - desc = 'Bar Font Size', - get = function() - return IceHUD.IceCore:GetBarFontSize() - end, - set = function(v) - IceHUD.IceCore:SetBarFontSize(v) - end, - min = 8, - max = 20, - step = 1, - order = 18 - }, - - barTexture = { - type = 'text', - name = 'Bar Texture', - desc = 'IceHUD Bar Texture', - get = function() - return IceHUD.IceCore:GetBarTexture() - end, - set = function(value) - IceHUD.IceCore:SetBarTexture(value) - end, - validate = { "Bar", "HiBar" }, - order = 19 + + barSettings = { + type = 'group', + name = 'Bar Settings', + desc = 'Settings related to bars', + order = 20, + args = { + barPresets = { + type = 'text', + name = 'Presets', + desc = 'Predefined settings for different bars', + get = function() + return IceHUD.IceCore:GetBarPreset() + end, + set = function(value) + IceHUD.IceCore:SetBarPreset(value) + end, + validate = { "Bar", "HiBar", "RoundBar" }, + order = 9 + }, + + + headerBarAdvancedBlank = { type = 'header', name = " ", order = 10 }, + headerBarAdvanced = { + type = 'header', + name = "Advanced Bar Settings", + order = 10 + }, + + barTexture = { + type = 'text', + name = 'Bar Texture', + desc = 'IceHUD Bar Texture', + get = function() + return IceHUD.IceCore:GetBarTexture() + end, + set = function(value) + IceHUD.IceCore:SetBarTexture(value) + end, + validate = { "Bar", "HiBar", "RoundBar" }, + order = 11 + }, + + barWidth = { + type = 'range', + name = 'Bar Width', + desc = 'Bar texture width (not the actual bar!)', + get = function() + return IceHUD.IceCore:GetBarWidth() + end, + set = function(v) + IceHUD.IceCore:SetBarWidth(v) + end, + min = 20, + max = 200, + step = 1, + order = 12 + }, + + barHeight = { + type = 'range', + name = 'Bar Height', + desc = 'Bar texture height (not the actual bar!)', + get = function() + return IceHUD.IceCore:GetBarHeight() + end, + set = function(v) + IceHUD.IceCore:SetBarHeight(v) + end, + min = 100, + max = 300, + step = 1, + order = 13 + }, + + barProportion = { + type = 'range', + name = 'Bar Proportion', + desc = 'Determines the bar width compared to the whole texture width', + get = function() + return IceHUD.IceCore:GetBarProportion() + end, + set = function(v) + IceHUD.IceCore:SetBarProportion(v) + end, + min = 0.01, + max = 0.5, + step = 0.01, + isPercent = true, + order = 14 + }, + + barSpace = { + type = 'range', + name = 'Bar Space', + desc = 'Space between bars on the same side', + get = function() + return IceHUD.IceCore:GetBarSpace() + end, + set = function(v) + IceHUD.IceCore:SetBarSpace(v) + end, + min = -10, + max = 30, + step = 1, + order = 15 + }, + } }, @@ -205,6 +381,19 @@ IceHUD.options = order = 92 }, + debug = { + type = "toggle", + name = "Debugging", + desc = "Enable/disable debug messages", + get = function() + return IceHUD.IceCore:GetDebug() + end, + set = function(value) + IceHUD.IceCore:SetDebug(value) + end, + order = 93 + }, + about = { type = 'execute', name = 'About', @@ -212,7 +401,7 @@ IceHUD.options = func = function() IceHUD:PrintAddonInfo() end, - order = 93 + order = 94 }, endSpace = { @@ -258,5 +447,6 @@ function IceHUD:OnEnable() self:Debug("IceHUD:OnEnable()") self.IceCore:Enable() + self:SetDebugging(self.IceCore:GetDebug()) end diff --git a/IceHUD.toc b/IceHUD.toc index c5dd921..8130407 100644 --- a/IceHUD.toc +++ b/IceHUD.toc @@ -3,7 +3,7 @@ ## Name: IceHUD ## Title: IceHUD |cff7fff7f -Ace2-|r ## Notes: Another HUD mod -## Version: 0.3.3 ($Revision$) +## Version: 0.4 ($Revision$) ## SavedVariables: IceCoreDB ## OptionalDeps: FuBar_ToFu, DruidBar, SoleManax, MobHealth ## X-Category: UnitFrame diff --git a/modules/CastBar.lua b/modules/CastBar.lua index 680ef1a..1f677df 100644 --- a/modules/CastBar.lua +++ b/modules/CastBar.lua @@ -35,15 +35,35 @@ function CastBar.prototype:GetDefaultSettings() local settings = CastBar.super.prototype.GetDefaultSettings(self) settings["side"] = IceCore.Side.Left settings["offset"] = 0 + settings["alwaysShowText"] = true return settings end +-- OVERRIDE +function CastBar.prototype:GetOptions() + local opts = CastBar.super.prototype.GetOptions(self) + opts["alwaysShowText"] = + { + type = 'toggle', + name = 'Always Show Text', + desc = 'Overrides possible text hiding option', + get = function() + return self.moduleSettings.alwaysShowText + end, + set = function(value) + self.moduleSettings.alwaysShowText = value + self:Redraw() + end, + order = 50 + } + return opts +end + + function CastBar.prototype:Enable() CastBar.super.prototype.Enable(self) - self.frame.bottomUpperText:SetWidth(180) - self:RegisterEvent("SPELLCAST_START", "CastStart") self:RegisterEvent("SPELLCAST_STOP", "CastStop") self:RegisterEvent("SPELLCAST_FAILED", "CastFailed") @@ -80,13 +100,23 @@ end function CastBar.prototype:Redraw() CastBar.super.prototype.Redraw(self) - self.frame.bottomUpperText:SetWidth(180) + if (self.moduleSettings.alwaysShowText) then + self.frame.bottomUpperText:Show() + end + + end - -- 'Protected' methods -------------------------------------------------------- +-- OVERRIDE +function CastBar.prototype:CreateFrame() + CastBar.super.prototype.CreateFrame(self) + + self.frame.bottomUpperText:SetWidth(self.settings.gap + 30) +end + function CastBar.prototype:OnUpdate() local taken = GetTime() - self.startTime diff --git a/modules/PetHealth.lua b/modules/PetHealth.lua index f7f2eab..0b44638 100644 --- a/modules/PetHealth.lua +++ b/modules/PetHealth.lua @@ -30,6 +30,7 @@ function PetHealth.prototype:GetOptions() min = 0.2, max = 1, step = 0.05, + isPercent = true, get = function() return self.moduleSettings.scale end, diff --git a/modules/PetMana.lua b/modules/PetMana.lua index 27f2a76..a5b86aa 100644 --- a/modules/PetMana.lua +++ b/modules/PetMana.lua @@ -24,6 +24,7 @@ function PetMana.prototype:GetOptions() min = 0.2, max = 1, step = 0.05, + isPercent = true, get = function() return self.moduleSettings.scale end, diff --git a/modules/PlayerMana.lua b/modules/PlayerMana.lua index 170591b..c98705b 100644 --- a/modules/PlayerMana.lua +++ b/modules/PlayerMana.lua @@ -85,6 +85,14 @@ function PlayerMana.prototype:Enable() end +-- OVERRIDE +function PlayerMana.prototype:Redraw() + PlayerMana.super.prototype.Redraw(self) + + self:CreateTickerFrame() +end + + function PlayerMana.prototype:ManaType(unit) if (unit ~= self.unit) then return @@ -168,12 +176,13 @@ function PlayerMana.prototype:EnergyTick() self.tickStart = now end - local thisTick = elapsed / 2 - local x = (thisTick * (self.width - (self.width * IceBarElement.BarProportion))) + 4 - local y = thisTick * (self.height - 5) + local pos = elapsed / 2 + local y = pos * (self.settings.barHeight) - self.tickerFrame:ClearAllPoints() - self.tickerFrame:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", x, y) + + self.tickerFrame.spark:SetTexCoord(0, 1, 1-pos-0.01, 1-pos) + + self.tickerFrame:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 0, y) end @@ -183,14 +192,15 @@ function PlayerMana.prototype:CreateTickerFrame() end self.tickerFrame:SetFrameStrata("BACKGROUND") - self.tickerFrame:SetWidth(19) - self.tickerFrame:SetHeight(1) + self.tickerFrame:SetWidth(self.settings.barWidth) + self.tickerFrame:SetHeight(self.settings.barHeight) if not (self.tickerFrame.spark) then self.tickerFrame.spark = self.tickerFrame:CreateTexture(nil, "BACKGROUND") + self.tickerFrame:Hide() end - self.tickerFrame.spark:SetTexture(self:GetColor("playerEnergy", 1)) + self.tickerFrame.spark:SetTexture(IceBarElement.TexturePath .. self.settings.barTexture) self.tickerFrame.spark:SetBlendMode("ADD") self.tickerFrame.spark:ClearAllPoints() self.tickerFrame.spark:SetAllPoints(self.tickerFrame) @@ -198,7 +208,8 @@ function PlayerMana.prototype:CreateTickerFrame() self.tickerFrame:SetStatusBarTexture(self.tickerFrame.spark) self.tickerFrame:SetStatusBarColor(self:GetColor("playerEnergy", self.moduleSettings.tickerAlpha)) - self.tickerFrame:Hide() + self.tickerFrame:ClearAllPoints() + self.tickerFrame:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 0, 0) end diff --git a/textures/Bar.blp b/textures/Bar.blp index 2bf24b49031c2f3e57822e992c71a2a46850d49e..2c68b2a4c03e3a892f2ab362f001d1b53cb914ab 100644 GIT binary patch literal 44884 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 T?{*r1>ywxDazq;Ze<=Sy8V3t9 literal 44900 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 NGW~hoUFXLC{tq-*T=D<_ diff --git a/textures/BarBG.blp b/textures/BarBG.blp new file mode 100644 index 0000000000000000000000000000000000000000..2e1042e592bb28a30f5e388a2419d1af4163f604 GIT binary patch literal 44884 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 diff --git a/textures/RoundBar.blp b/textures/RoundBar.blp new file mode 100644 index 0000000000000000000000000000000000000000..015460cfd058aeded4bc0bdf8620e0ee128cfcaa GIT binary patch literal 44884 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 literal 0 HcmV?d00001