129 lines
3.6 KiB
Lua
129 lines
3.6 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local UF = E:GetModule('UnitFrames');
|
|
|
|
local CreateFrame = CreateFrame
|
|
local hooksecurefunc = hooksecurefunc
|
|
|
|
function UF:SetSize_PowerPrediction(frame)
|
|
local pred = frame.PowerPrediction
|
|
|
|
local width, height = frame.Power:GetSize()
|
|
if frame.Power:GetOrientation() == 'HORIZONTAL' then
|
|
pred.mainBar:Size(width, 0)
|
|
else
|
|
pred.mainBar:Size(0, height)
|
|
end
|
|
|
|
local altBar = pred.altBar
|
|
if altBar then
|
|
local altWidth, altHeight = frame.AdditionalPower:GetSize()
|
|
|
|
if altBar:GetOrientation() == 'HORIZONTAL' then
|
|
altBar:Size(altWidth, 0)
|
|
else
|
|
altBar:Size(0, altHeight)
|
|
end
|
|
end
|
|
end
|
|
|
|
function UF:PostUpdate_PowerPrediction()
|
|
local frame = self.parent
|
|
local pred = frame.PowerPrediction
|
|
|
|
if pred.needsSizeUpdated then
|
|
UF:SetSize_PowerPrediction(frame)
|
|
pred.needsSizeUpdated = nil
|
|
end
|
|
end
|
|
|
|
function UF:Construct_PowerPrediction(frame)
|
|
local mainBar = CreateFrame('StatusBar', nil, frame.Power)
|
|
mainBar:SetStatusBarTexture(E.media.blankTex)
|
|
mainBar.parent = frame.Power
|
|
mainBar:Hide()
|
|
|
|
local prediction = {
|
|
parent = frame,
|
|
mainBar = mainBar,
|
|
PostUpdate = UF.PostUpdate_PowerPrediction
|
|
}
|
|
|
|
if frame.AdditionalPower then
|
|
prediction.altBar = CreateFrame('StatusBar', nil, frame.AdditionalPower)
|
|
prediction.altBar:SetStatusBarTexture(E.media.blankTex)
|
|
prediction.altBar:Hide()
|
|
|
|
hooksecurefunc(frame.AdditionalPower, 'SetStatusBarColor', function(_, r, g, b)
|
|
local bar = frame and frame.PowerPrediction and frame.PowerPrediction.altBar
|
|
if bar then
|
|
local pred = UF.db.colors and UF.db.colors.powerPrediction
|
|
if pred and pred.enable then
|
|
local color = pred.additional
|
|
bar:SetStatusBarColor(color.r, color.g, color.b, color.a)
|
|
else
|
|
bar:SetStatusBarColor(r * 1.25, g * 1.25, b * 1.25)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
return prediction
|
|
end
|
|
|
|
function UF:Configure_PowerPrediction(frame)
|
|
if frame.db.power.powerPrediction then
|
|
if not frame:IsElementEnabled('PowerPrediction') then
|
|
frame:EnableElement('PowerPrediction')
|
|
end
|
|
|
|
local pred = frame.PowerPrediction
|
|
local mainBar = pred.mainBar
|
|
local altBar = pred.altBar
|
|
local power = frame.Power
|
|
pred.needsSizeUpdated = true
|
|
|
|
local powerBarTexture = power:GetStatusBarTexture()
|
|
local orientation = power:GetOrientation()
|
|
local reverseFill = power:GetReverseFill()
|
|
|
|
mainBar:ClearAllPoints()
|
|
mainBar:SetReverseFill(not reverseFill)
|
|
mainBar:SetStatusBarTexture(UF.db.colors.transparentPower and E.media.blankTex or powerBarTexture:GetTexture())
|
|
|
|
if orientation == 'HORIZONTAL' then
|
|
local point = reverseFill and 'LEFT' or 'RIGHT'
|
|
mainBar:Point('TOP')
|
|
mainBar:Point('BOTTOM')
|
|
mainBar:Point(point, powerBarTexture, point)
|
|
else
|
|
local point = reverseFill and 'BOTTOM' or 'TOP'
|
|
mainBar:Point('LEFT')
|
|
mainBar:Point('RIGHT')
|
|
mainBar:Point(point, powerBarTexture, point)
|
|
end
|
|
|
|
if altBar then
|
|
local altPower = frame.AdditionalPower
|
|
local altPowerBarTexture = altPower:GetStatusBarTexture()
|
|
local altPowerOrientation = altPower:GetOrientation()
|
|
|
|
altBar:ClearAllPoints()
|
|
altBar:SetReverseFill(true)
|
|
altBar:SetStatusBarTexture(UF.db.colors.transparentPower and E.media.blankTex or altPowerBarTexture:GetTexture())
|
|
altBar:SetOrientation(altPowerOrientation)
|
|
|
|
if altPowerOrientation == 'HORIZONTAL' then
|
|
altBar:Point('TOP')
|
|
altBar:Point('BOTTOM')
|
|
altBar:Point('RIGHT', altPowerBarTexture, 'RIGHT')
|
|
else
|
|
altBar:Point('LEFT')
|
|
altBar:Point('RIGHT')
|
|
altBar:Point('TOP', altPowerBarTexture, 'TOP')
|
|
end
|
|
end
|
|
elseif frame:IsElementEnabled('PowerPrediction') then
|
|
frame:DisableElement('PowerPrediction')
|
|
end
|
|
end
|