Untitled diff
211 lines
-- mana, lowmana, power, poweralt
-- mana, lowmana, power, poweralt
local Mana = Grid2.statusPrototype:new("mana",false)
local Mana = Grid2.statusPrototype:new("mana",false)
local LowMana = Grid2.statusPrototype:new("lowmana",false)
local LowMana = Grid2.statusPrototype:new("lowmana",false)
local Power = Grid2.statusPrototype:new("power",false)
local Power = Grid2.statusPrototype:new("power",false)
local PowerAlt = Grid2.statusPrototype:new("poweralt",false)
local PowerAlt = Grid2.statusPrototype:new("poweralt",false)
local max = math.max
local max = math.max
local fmt = string.format
local fmt = string.format
local next = next
local next = next
local tostring = tostring
local tostring = tostring
local UnitMana = UnitMana
local UnitMana = UnitMana
local UnitManaMax = UnitManaMax
local UnitManaMax = UnitManaMax
local UnitPowerType = UnitPowerType
local UnitPowerType = UnitPowerType
local UnitPower = UnitPower
local UnitPower = UnitPower
local UnitPowerMax = UnitPowerMax
local UnitPowerMax = UnitPowerMax
local UnitIsPlayer = UnitIsPlayer
local UnitIsPlayer = UnitIsPlayer
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
local UnitGroupRolesAssigned = UnitGroupRolesAssigned
local statuses = {} -- Enabled statuses
local statuses = {} -- Enabled statuses
-- Methods shared by all statuses
-- Methods shared by all statuses
local status_OnEnable, status_OnDisable
local status_OnEnable, status_OnDisable
do
do
local frame
local frame
local function Frame_OnEvent(self, event, unit, powerType)
local function Frame_OnEvent(self, event, unit, powerType)
for status in next,statuses do
for status in next,statuses do
status:UpdateUnitPower(unit, powerType)
status:UpdateUnitPower(unit, powerType)
end
end
end
end
function status_OnEnable(status)
function status_OnEnable(status)
if not next(statuses) then
if not next(statuses) then
if not frame then frame = CreateFrame("Frame", nil, Grid2LayoutFrame) end
if not frame then frame = CreateFrame("Frame", nil, Grid2LayoutFrame) end
frame:SetScript("OnEvent", Frame_OnEvent)
frame:SetScript("OnEvent", Frame_OnEvent)
frame:RegisterEvent("UNIT_POWER")
frame:RegisterEvent("UNIT_POWER")
frame:RegisterEvent("UNIT_MAXPOWER")
frame:RegisterEvent("UNIT_MAXPOWER")
frame:RegisterEvent("UNIT_DISPLAYPOWER")
frame:RegisterEvent("UNIT_DISPLAYPOWER")
end
end
statuses[status] = true
statuses[status] = true
end
end
function status_OnDisable(status)
function status_OnDisable(status)
statuses[status] = nil
statuses[status] = nil
if (not next(statuses)) and frame then
if (not next(statuses)) and frame then
frame:SetScript("OnEvent", nil)
frame:SetScript("OnEvent", nil)
frame:UnregisterEvent("UNIT_POWER")
frame:UnregisterEvent("UNIT_POWER")
frame:UnregisterEvent("UNIT_MAXPOWER")
frame:UnregisterEvent("UNIT_MAXPOWER")
frame:UnregisterEvent("UNIT_DISPLAYPOWER")
frame:UnregisterEvent("UNIT_DISPLAYPOWER")
end
end
end
end
end
end
-- Mana status
-- Mana status
Mana.GetColor = Grid2.statusLibrary.GetColor
Mana.GetColor = Grid2.statusLibrary.GetColor
Mana.OnEnable = status_OnEnable
Mana.OnEnable = status_OnEnable
Mana.OnDisable= status_OnDisable
Mana.OnDisable= status_OnDisable
function Mana:UpdateUnitPowerStandard(unit, powerType)
function Mana:UpdateUnitPowerStandard(unit, powerType)
if powerType=="MANA" then
if powerType=="MANA" then
self:UpdateIndicators(unit)
self:UpdateIndicators(unit)
end
end
end
end
function Mana:UpdateUnitPowerHealer(unit, powerType)
function Mana:UpdateUnitPowerHealer(unit, powerType)
if powerType=="MANA" and (unit=="player" or UnitGroupRolesAssigned(unit) == "HEALER") then
if powerType=="MANA" and (unit=="player" or UnitGroupRolesAssigned(unit) == "HEALER") then
self:UpdateIndicators(unit)
self:UpdateIndicators(unit)
end
end
end
end
function Mana:IsActiveStandard(unit)
function Mana:IsActiveStandard(unit)
return UnitPowerType(unit) == 0
return UnitPowerType(unit) == 0
end
end
function Mana:IsActiveHealer(unit)
function Mana:IsActiveHealer(unit)
return UnitPowerType(unit) == 0 and (unit=="player" or UnitGroupRolesAssigned(unit) == "HEALER")
return UnitPowerType(unit) == 0 and (unit=="player" or UnitGroupRolesAssigned(unit) == "HEALER")
end
end
function Mana:GetPercent(unit)
function Mana:GetPercent(unit)
return UnitMana(unit) / UnitManaMax(unit)
return UnitMana(unit) / UnitManaMax(unit)
end
end
function Mana:GetText(unit)
function Mana:GetText(unit)
return fmt("%.1fk", UnitMana(unit) / 1000)
return fmt("%.1fk", UnitMana(unit) / 1000)
end
end
function Mana:UpdateDB()
function Mana:UpdateDB()
Mana.IsActive = self.dbx.showOnlyHealers and Mana.IsActiveHealer or Mana.IsActiveStandard
Mana.IsActive = self.dbx.showOnlyHealers and Mana.IsActiveHealer or Mana.IsActiveStandard
Mana.UpdateUnitPower = self.dbx.showOnlyHealers and Mana.UpdateUnitPowerHealer or Mana.UpdateUnitPowerStandard
Mana.UpdateUnitPower = self.dbx.showOnlyHealers and Mana.UpdateUnitPowerHealer or Mana.UpdateUnitPowerStandard
end
end
Grid2.setupFunc["mana"] = function(baseKey, dbx)
Grid2.setupFunc["mana"] = function(baseKey, dbx)
Grid2:RegisterStatus(Mana, {"percent", "text", "color"}, baseKey, dbx)
Grid2:RegisterStatus(Mana, {"percent", "text", "color"}, baseKey, dbx)
Mana:UpdateDB()
Mana:UpdateDB()
return Mana
return Mana
end
end
Grid2:DbSetStatusDefaultValue( "mana", {type = "mana", color1= {r=0,g=0,b=1,a=1}} )
Grid2:DbSetStatusDefaultValue( "mana", {type = "mana", color1= {r=0,g=0,b=1,a=1}} )
-- Low Mana status
-- Low Mana status
LowMana.GetColor = Grid2.statusLibrary.GetColor
LowMana.GetColor = Grid2.statusLibrary.GetColor
LowMana.OnEnable = status_OnEnable
LowMana.OnEnable = status_OnEnable
LowMana.OnDisable = status_OnDisable
LowMana.OnDisable = status_OnDisable
function LowMana:UpdateUnitPower(unit, powerType)
function LowMana:UpdateUnitPower(unit, powerType)
if powerType=="MANA" then
if powerType=="MANA" then
self:UpdateIndicators(unit)
self:UpdateIndicators(unit)
end
end
end
end
function LowMana:IsActive(unit)
function LowMana:IsActive(unit)
return (UnitPowerType(unit) == 0) and (Mana:GetPercent(unit) < self.dbx.threshold)
return (UnitPowerType(unit) == 0) and (Mana:GetPercent(unit) < self.dbx.threshold)
end
end
Grid2.setupFunc["lowmana"] = function(baseKey, dbx)
Grid2.setupFunc["lowmana"] = function(baseKey, dbx)
Grid2:RegisterStatus(LowMana, {"color"}, baseKey, dbx)
Grid2:RegisterStatus(LowMana, {"color"}, baseKey, dbx)
return LowMana
return LowMana
end
end
Grid2:DbSetStatusDefaultValue( "lowmana", {type = "lowmana", threshold = 0.75, color1 = {r=0.5,g=0,b=1,a=1}})
Grid2:DbSetStatusDefaultValue( "lowmana", {type = "lowmana", threshold = 0.75, color1 = {r=0.5,g=0,b=1,a=1}})
-- Alternative power status
-- Alternative power status
PowerAlt.GetColor = Grid2.statusLibrary.GetColor
PowerAlt.GetColor = Grid2.statusLibrary.GetColor
PowerAlt.OnEnable = status_OnEnable
PowerAlt.OnEnable = status_OnEnable
PowerAlt.OnDisable= status_OnDisable
PowerAlt.OnDisable= status_OnDisable
function PowerAlt:UpdateUnitPower(unit, powerType)
function PowerAlt:UpdateUnitPower(unit, powerType)
if powerType=="ALTERNATE" then
if powerType=="ALTERNATE" then
self:UpdateIndicators(unit)
self:UpdateIndicators(unit)
end
end
end
end
function PowerAlt:IsActive(unit)
function PowerAlt:IsActive(unit)
return UnitPowerMax(unit,10)>0
return UnitPowerMax(unit,10)>0
end
end
function PowerAlt:GetPercent(unit)
function PowerAlt:GetPercent(unit)
return max(UnitPower(unit,10),0) / UnitPowerMax(unit,10)
return max(UnitPower(unit,10),0) / UnitPowerMax(unit,10)
end
end
function PowerAlt:GetText(unit)
function PowerAlt:GetText(unit)
local power= UnitPower(unit,10)
local power= UnitPower(unit,10)
if power>=1000 then
if power>=1000 then
return fmt("%.1fk", power / 1000)
return fmt("%.1fk", power / 1000)
else
else
return tostring( max(power,0) )
return tostring( max(power,0) )
end
end
end
end
Grid2.setupFunc["poweralt"] = function(baseKey, dbx)
Grid2.setupFunc["poweralt"] = function(baseKey, dbx)
Grid2:RegisterStatus(PowerAlt, {"percent", "text", "color"}, baseKey, dbx)
Grid2:RegisterStatus(PowerAlt, {"percent", "text", "color"}, baseKey, dbx)
return PowerAlt
return PowerAlt
end
end
Grid2:DbSetStatusDefaultValue( "poweralt", {type = "poweralt", color1= {r=1,g=0,b=0.5,a=1}} )
Grid2:DbSetStatusDefaultValue( "poweralt", {type = "poweralt", color1= {r=1,g=0,b=0.5,a=1}} )
-- Power status
-- Power status
local powerColors= {}
local powerColors= {}
Power.OnEnable = status_OnEnable
Power.OnEnable = status_OnEnable
Power.OnDisable = status_OnDisable
Power.OnDisable = status_OnDisable
function Power:UpdateUnitPower(unit, powerType)
function Power:UpdateUnitPower(unit, powerType)
if UnitIsPlayer(unit) and powerColors[ powerType ] then
if UnitIsPlayer(unit) and powerColors[ powerType ] then
self:UpdateIndicators(unit)
self:UpdateIndicators(unit)
end
end
end
end
function Power:IsActive(unit)
function Power:IsActive(unit)
return UnitIsPlayer(unit)
return UnitIsPlayer(unit)
end
end
function Power:GetPercent(unit)
function Power:GetPercent(unit)
return UnitPower(unit) / UnitPowerMax(unit)
return UnitPower(unit) / UnitPowerMax(unit)
end
end
function Power:GetText(unit)
function Power:GetText(unit)
local power = UnitPower(unit)
local power = UnitPower(unit)
if power>=1000 then
if power>=1000 then
return fmt("%.1fk", power / 1000)
return fmt("%.1fk", power / 1000)
else
else
return tostring(power)
return tostring(power)
end
end
end
end
function Power:GetColor(unit)
function Power:GetColor(unit)
local _,type= UnitPowerType(unit)
local _,type= UnitPowerType(unit)
local c= powerColors[type] or powerColors["MANA"]
local c= powerColors[type] or powerColors["MANA"]
return c.r, c.g, c.b, c.a
return c.r, c.g, c.b, c.a
end
end
function Power:UpdateDB()
function Power:UpdateDB()
powerColors["MANA"] = self.dbx.color1
powerColors["MANA"] = self.dbx.color1
powerColors["RAGE"] = self.dbx.color2
powerColors["RAGE"] = self.dbx.color2
powerColors["FOCUS"] = self.dbx.color3
powerColors["FOCUS"] = self.dbx.color3
powerColors["ENERGY"] = self.dbx.color4
powerColors["ENERGY"] = self.dbx.color4
powerColors["RUNIC_POWER"] = self.dbx.color5
powerColors["RUNIC_POWER"] = self.dbx.color5
powerColors["INSANITY"] = self.dbx.color6
powerColors["MAELSTROM"] = self.dbx.color7
powerColors["LUNAR_POWER"] = self.dbx.color8
powerColors["FURY"] = self.dbx.color9
powerColors["PAIN"] = self.dbx.color10
end
end
Grid2.setupFunc["power"] = function(baseKey, dbx)
Grid2.setupFunc["power"] = function(baseKey, dbx)
Grid2:RegisterStatus(Power, {"percent", "text", "color"}, baseKey, dbx)
Grid2:RegisterStatus(Power, {"percent", "text", "color"}, baseKey, dbx)
Power:UpdateDB()
Power:UpdateDB()
return Power
return Power
end
end
Grid2:DbSetStatusDefaultValue( "power", {type = "power", colorCount = 5,
Grid2:DbSetStatusDefaultValue( "power", {type = "power", colorCount = 10,
color1 = {r=0,g=0.5,b=1 ,a=1}, -- mana
color1 = {r=0.00, g=0.00, b=1.00, a=1}, -- mana
color2 = {r=1,g=0 ,b=0 ,a=1}, -- rage
color2 = {r=1.00, g=0.00, b=0.00, a=1}, -- rage
color3 = {r=1,g=0.5,b=0 ,a=1}, -- focus
color3 = {r=1.00, g=0.50 , b=0.25, a=1}, -- focus
color4 = {r=1,g=1 ,b=0 ,a=1}, -- energy
color4 = {r=1.00, g=1.00 , b=0.00, a=1}, -- energy
color5 = {r=0,g=0.8,b=0.8,a=1}, -- runic power
color5 = {r=0.00, g=0.82, b=1.00, a=1}, -- runic power
color6 = {r=0.40, g=0.00, b=0.80, a=1}, -- insanity
color7 = {r=0.00, g=0.50, b=1.00, a=1}, -- maelstrom
color8 = {r=0.30, g=0.52, b=0.90, a=1}, -- astral power
color9 = {r=0.788, g=0.259, b=0.992, a=1}, -- fury
color10 = {r=1.00, g=0.61, b=0.00, a=1} -- pain
})
})