From 16da36d35308a3909fe0cfe4786cf8d5a95cd37c Mon Sep 17 00:00:00 2001 From: omicron Date: Sat, 18 Mar 2023 06:25:25 +0100 Subject: [PATCH] Add power bars for healers and blood deathknights --- src/types/unitframe.lua | 70 +++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/src/types/unitframe.lua b/src/types/unitframe.lua index c2c9ede..febdc80 100644 --- a/src/types/unitframe.lua +++ b/src/types/unitframe.lua @@ -48,7 +48,9 @@ function UnitFrame:Init(unit, width, height, hideInRaid) self.hideInRaid = hideInRaid or false local secure = self:CreateSecureFrame(width, height) secure:Hide() - self.hp = StatusBar:new(self, width, height) + self.hp = StatusBar:new(self, width, height, 0, true) + self.power = StatusBar:new(self, width, 6, 2, false) + self.power:Hide() self.auras = AuraList:new(self) local overlays = CreateFrame("Frame", nil, secure) overlays:SetFrameStrata("MEDIUM") @@ -82,9 +84,9 @@ function UnitFrame:CreateName() self.name = name name:SetFont("Interface\\AddOns\\OmicronFrames\\media\\fonts\\roboto\\Roboto-Bold.ttf", 13, "") - name:SetTextColor(0.8, 0.6, 0.1) - name:SetShadowColor(0, 0, 0) - name:SetShadowOffset(1, -1) + name:SetTextColor(0.8, 0.6, 0.1) + name:SetShadowColor(0, 0, 0) + name:SetShadowOffset(1, -1) name:SetPoint("CENTER") name:SetText("") name:Show() @@ -165,10 +167,10 @@ function UnitFrame:CreateSecureFrame(width, height) secure:SetAttribute("unit", self.unit) secure:SetSize(width, height) - + secure:RegisterForClicks("AnyDown") self:PrepareWheelBinds() - + -- No modifiers secure:SetAttribute("type1", "target") self:SetMacroAction("type2", "/use [@UNIT,dead,help]Ancestral Vision; [@UNIT]Chain Heal") @@ -238,11 +240,11 @@ function UnitFrame:RegisterEvents() secure:SetScript("OnShow", function(frame, event, ...) self:OnShow() end) - + secure:SetScript("OnHide", function(frame, event, ...) self:OnHide() end) - + secure:SetScript("OnEvent", function(frame, event, ...) self[event](self, ...) end) @@ -270,7 +272,7 @@ function UnitFrame:HasUnitChanged() self.guid = nil return false end - + local guid = UnitGUID(unit) if self.guid == guid then return false @@ -320,12 +322,59 @@ function UnitFrame:UNIT_NAME_UPDATE() self:UpdateName() end +function UnitFrame:ROLE_CHANGED_INFORM(name, changer, old, new) + if UnitName(self.unit) == name then + self:UpdateRole(new) + end +end + +function UnitFrame:UNIT_POWER_UPDATE() + self:UpdatePower() +end + +function UnitFrame:UpdateRole(role) + if role == nil then + role = UnitGroupRolesAssigned(self.unit) + end + if role == "HEALER" then + self:EnablePower(Enum.PowerType.Mana) + elseif role == "TANK" and select(3, UnitClass(self.unit)) == 6 then + self:EnablePower("RUNIC") + else + self:DisablePower() + end +end + +function UnitFrame:UpdatePower() + local power = UnitPower(self.unit, self.powerType) + local max = UnitPowerMax(self.unit, self.powerType) + self.power:SetRange(0, max) + self.power:SetValue(power) +end + +function UnitFrame:EnablePower(type) + self.powerType = type + local color = PowerBarColor[type] + self.power:SetColor(color.r, color.g, color.b) + self.power:Show() + self.secureFrame:RegisterUnitEvent("UNIT_POWER_UPDATE", self.unit) + self:UpdatePower() +end + +function UnitFrame:DisablePower() + self.powerType = nil + self.secureFrame:UnregisterEvent("UNIT_POWER_UPDATE") + self.power:Hide() +end + function UnitFrame:OnShow() + self.secureFrame:RegisterEvent("ROLE_CHANGED_INFORM") self:StartRangeTicker() self:UpdateAll(self:HasUnitChanged()) end function UnitFrame:OnHide() + self.secureFrame:UnregisterEvent("ROLE_CHANGED_INFORM") self.guid = nil self:StopRangeTicker() end @@ -341,13 +390,14 @@ function UnitFrame:UpdateAll(unitChanged) self:UpdateHealthColor() self:UpdateRange() self:UpdateName() + self:UpdateRole() -- Also calls UpdatePower if power is visible end function UnitFrame:UpdateHealth() local unit = self.unit local val = UnitHealth(unit) local max = UnitHealthMax(unit) - + self.hp:SetRange(0, max) self.hp:SetValue(val) end