From ae756350d8a84c33180a0f1c72f43a50de63a0d4 Mon Sep 17 00:00:00 2001 From: Andrew Mordecai Date: Fri, 15 Jul 2016 08:06:44 -0700 Subject: [PATCH] Fix some drycode mistakes --- Config.lua | 5 +++-- Functions.lua | 66 ++++++++++++++++++++++++++++++++++++++++----------------- Layout.lua | 44 ++++++++++++++++++++++++++------------ README.md | 21 ++++++++++-------- 4 files changed, 92 insertions(+), 44 deletions(-) diff --git a/Config.lua b/Config.lua index dd368dd..1f58cee 100644 --- a/Config.lua +++ b/Config.lua @@ -54,5 +54,6 @@ Stardust.colors = { } } -setmetatable(Stardust.colors, oUF.colors) -setmetatable(Stardust.colors.power, oUF.colors.power) +setmetatable(Stardust.colors, { __index = oUF.colors }) +setmetatable(Stardust.colors.power, { __index = oUF.colors.power }) + diff --git a/Functions.lua b/Functions.lua index c28a09b..6ffe6e6 100644 --- a/Functions.lua +++ b/Functions.lua @@ -7,12 +7,32 @@ local _, Stardust = ... --------------------------- +-- General utility functions +--------------------------- + +local function abbrev(n) + if n > 1000000000 then + return format("%.0fb", n / 1000000000) + elseif n > 10000000 then + return format("%.0fm", n / 1000000) + elseif n > 1000000 then + return format("%.1fm", n / 1000000) + elseif n > 10000 then + return format("%.0fk", n / 1000) + elseif n > 1000 then + return format("%.1fk", n / 1000) + else + return n + end +end + +--------------------------- -- Health --------------------------- function Stardust.PostUpdateHealth(self, unit, cur, max) self:SetValue(max - cur) - self.text:SetText(cur < max and -max + cur or "") + self.value:SetText(cur < max and abbrev(-max + cur) or "") self.bg:SetVertexColor(0.15, 0.15, 0.15) end @@ -24,8 +44,8 @@ end function Stardust.PostUpdatePower(self, unit, cur, max) self:SetShown(max > 0) - self.text:SetText(cur) -end + self.value:SetText(abbrev(cur)) +end --------------------------- -- ClassIcons @@ -112,28 +132,34 @@ end function Stardust.PostUpdateStatusIcon(self) if not self:IsShown() then return end - local icons, last = self.__owner.StatusIcons + local icons, x = self.__owner.StatusIcons, 2 for i = 1, #icons do local icon = icons[i] if icon == self then break - elseif icon:IsShown() then - last = icon + elseif icon:IsShown() and icon:GetTexture() then + x = x + icon:GetWidth() end end - if last then - self:SetPoint("LEFT", last, "RIGHT", 0, 0) - else - self:SetPoint("LEFT", self.__owner.Health, "TOPLEFT", 3, 0) - end + self:SetPoint("LEFT", self.__owner.Health, "TOPLEFT", x + self.offsetX, 0 + self.offsetY) end +local updatingCombatOrResting + function Stardust.PostUpdateCombat(self) - self.__owner.Resting:ForceUpdate() + if not updatingCombatOrResting then + updatingCombatOrResting = true + self.__owner.Resting:ForceUpdate() + updatingCombatOrResting = nil + end end function Stardust.PostUpdateResting(self) - self.__owner.Combat:ForceUpdate() + if not updatingCombatOrResting then + updatingCombatOrResting = true + self.__owner.Combat:ForceUpdate() + updatingCombatOrResting = nil + end end --------------------------- @@ -151,28 +177,29 @@ local GLOW_SEGMENTS = { { "LEFT", 0, 1/3, 1/3, 2/3, -1, 0 }, } -function Stardust.SetGlowColor(self, r, g, b, a) +local function SetGlowColor(self, r, g, b, a) for i = 1, #self.Glow do self.Glow[i]:SetVertexColor(r, g, b, a) end end -function Stardust.SetGlowSize(self, size, offset) +local function SetGlowSize(self, size, offset) local Glow = self.Glow for i = 1, #Glow do Glow[i]:SetSize(size, size) end - local d = d or floor(size * 2 / 3 + 0.5) + local d = offset or floor(size * 2 / 3 + 0.5) Glow[1]:SetPoint("TOPLEFT", -d, d) Glow[2]:SetPoint("TOPRIGHT", d, d) Glow[3]:SetPoint("BOTTOMRIGHT", d, -d) Glow[4]:SetPoint("BOTTOMLEFT", -d, -d) - +--[[ Glow[5]:SetShown(Glow[2]:GetLeft() > Glow[1]:GetRight()) Glow[6]:SetShown(Glow[2]:GetBottom() > Glow[3]:GetTop()) Glow[7]:SetShown(Glow[3]:GetLeft() > Glow[4]:GetLeft()) Glow[8]:SetShown(Glow[1]:GetBottom() > Glow[4]:GetTop()) +]] end function Stardust.CreateGlow(self) @@ -197,17 +224,16 @@ function Stardust.CreateGlow(self) -- BOTTOM Glow[7]:SetPoint("LEFT", Glow[4], "RIGHT") Glow[7]:SetPoint("RIGHT", Glow[3], "LEFT") - + -- LEFT Glow[8]:SetPoint("TOP", Glow[1], "BOTTOM") Glow[8]:SetPoint("BOTTOM", Glow[4], "TOP") - SetGlowSize(self, 12) - self.Glow = Glow self.SetBackdropBorderColor = SetGlowColor self.SetGlowColor = SetGlowColor self.SetGlowSize = SetGlowSize + return Glow end diff --git a/Layout.lua b/Layout.lua index 869fe4d..7f7828a 100644 --- a/Layout.lua +++ b/Layout.lua @@ -23,7 +23,7 @@ local function NewStatusBar(parent, textFont, textSize, noBG, noBackdrop) if textFont and textSize then bar.value = bar:CreateFontString(nil, "OVERLAY", "GameFontHighlight") - bar.value:SetFont(LibSharedMedia:Fetch("font", textSize)) + bar.value:SetFont(LibSharedMedia:Fetch("font", config.textFont), textSize) bar.value:SetPoint("CENTER") end @@ -35,7 +35,7 @@ local function NewStatusBar(parent, textFont, textSize, noBG, noBackdrop) end if not noBackdrop then - bar.backdrop = Health:CreateTexture(nil, "BACKDROP") + bar.backdrop = bar:CreateTexture(nil, "BACKGROUND") bar.backdrop:SetPoint("BOTTOMLEFT", -1, -1) bar.backdrop:SetPoint("TOPRIGHT", 1, 1) bar.backdrop:SetTexture(0, 0, 0) @@ -75,7 +75,7 @@ local function NewBarGroup(parent, count, width, height) return group end -local function AddStatusIcon(self, element, size) +local function AddStatusIcon(self, element, size, offsetX, offsetY) local icon = self.Health:CreateTexture(nil, "OVERLAY") icon:SetPoint("LEFT", self.Health, "TOPLEFT", 3, 0) icon:SetSize(size or 16, size or 16) @@ -83,6 +83,8 @@ local function AddStatusIcon(self, element, size) self.StatusIcons = self.StatusIcons or {} tinsert(self.StatusIcons, icon) + icon.offsetX = offsetX or 0 + icon.offsetY = offsetY or 0 icon.PostUpdate = Stardust.PostUpdateStatusIcon self[element] = icon return icon @@ -114,7 +116,7 @@ local function ApplyStyle(self, unit, isSingle) -- Outer glow --------------------------- - self.Glow = CreateGlow(self) + self.Glow = Stardust.CreateGlow(self) --------------------------- -- Health bar @@ -147,6 +149,7 @@ local function ApplyStyle(self, unit, isSingle) Power.colorDisconnected = true Power.colorPower = true + Power.frequentUpdates = true Power.PostUpdate = Stardust.PostUpdatePower self.Power = Power @@ -199,7 +202,7 @@ local function ApplyStyle(self, unit, isSingle) local r, g, b = color[1], color[2], color[3] totem:SetStatusBarColor(r, g, b) totem.bg:SetVertexColor(r * mu, b * mu, g * mu) - + local value = totem:CreateFontString(nil, "OVERLAY", "GameFontHighlight") value:SetFont(LibSharedMedia:Fetch("font", config.numberFont), 15) value:SetPoint("CENTER") @@ -215,7 +218,7 @@ local function ApplyStyle(self, unit, isSingle) -- Druid mana -- Warlock demonic fury --------------------------- - + if class == "DRUID" or class == "WARLOCK" then local bar = NewStatusBar(Health) bar:SetPoint("TOPLEFT", 3, -3) @@ -260,12 +263,12 @@ local function ApplyStyle(self, unit, isSingle) -- Group status icons --------------------------- - AddStatusIcon("LFDRole") - AddStatusIcon("RaidRole") -- maintank, mainassist - AddStatusIcon("Leader") - AddStatusIcon("Assistant") - AddStatusIcon("MasterLooter") - AddStatusIcon("PvP") + AddStatusIcon(self, "LFDRole", 24) + AddStatusIcon(self, "RaidRole") -- maintank, mainassist + AddStatusIcon(self, "Leader") + AddStatusIcon(self, "Assistant") + AddStatusIcon(self, "MasterLooter", nil, 0, 1) + AddStatusIcon(self, "PvP", 32, 0, -5) -- TODO: move it somewhere else? --------------------------- -- Combat icon @@ -366,11 +369,26 @@ local function ApplyStyle(self, unit, isSingle) insideAlpha = 1, outsideAlpha = 0.5 } + + --------------------------- + -- oUF_SmoothUpdate plugin support + --------------------------- + + if self.SmoothBar then + self:SmoothBar(self.Health) + self:SmoothBar(self.Power) + if self.DemonicFury then + self:SmoothBar(self.DemonicFury) + end + if self.DruidMana then + self:SmoothBar(self.DruidMana) + end + end end oUF:Factory(function(self) self:RegisterStyle("Stardust", ApplyStyle) - self:SetActiveStyle("Stardust") + self:SetActiveStyle("Stardust") local player = self:Spawn("player") player:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOM", -175, 235) diff --git a/README.md b/README.md index 07962b8..4201bfc 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,21 @@ oUF Stardust ============ -oUF Stardust is a layout for Haste's oUF unit frame framework. The look is +oUF Stardust is a layout for Haste's oUF unit frame framework. The look is mainly inspired by oUF Qulight, and some code is borrowed from oUF Phanx. - **Supported units:** player, pet, target, targettarget, focus, focustarget - **Standard features:** health, power, combo points, threat glow, all the usual status icons -- **Secondary resources:** demonic fury, soul shards, druid mana, holy power, - runes, shadow orbs, totems (including ghouls and mushrooms) -- **Supported plugins:** oUF MovableFrames, oUF Smooth (install them separately) +- **Secondary resources:** burning embers, demonic fury, soul shards, druid mana, + holy power, runes, shadow orbs, totems (including ghouls and mushrooms) Some configuration is available by editing the `config.lua` file. If WoW is open, you'll need to `/reload` the UI after saving your changes. +You can use [oUF MovableFrames](http://www.wowinterface.com/downloads/info15425-oUFMovableFrames.html) +to move the frames around. + Unfinished / Missing Features ----------------------------- @@ -23,7 +25,6 @@ Many features aren't finished yet, or haven't been tested much (or at all). **Unfinished**, but will be added sooner or later, in roughly this order: -- burning embers - casting bars - selected auras (boss debuffs, dispellable debuffs, important class auras) - party and partypet frames @@ -45,15 +46,17 @@ Contributing ------------ If you've discovered a bug in oUF Stardust, the preferred way to let me know -about it is by opening an issue ticket on the [GitLab project page][1]. You -can also log into GitLab using your Google, Twitter, or GitHub account. +about it is by opening an issue ticket on the [GitLab project page][(https://gitlab.com/armordecai/ouf-stardust/issues). +You don't need to create an account — you can log into GitLab with your Google +or Twitter account! - [1]: https://gitlab.com/armordecai/ouf-stardust/issues +You can also [email me](mailto:armordecai@protonmail.ch) or send me (Akkorian) +a private message on WoWInterface.com instead. Legal ----- -oUF Stardust is published under the zlib/libpng license. See the included +oUF Stardust is published under the zlib/libpng license. See the included LICENSE.txt file for more details. -- 1.7.9.5