init
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local UF = E:GetModule("UnitFrames")
|
||||
|
||||
--Lua functions
|
||||
--WoW API / Variables
|
||||
local CreateFrame = CreateFrame
|
||||
|
||||
function UF.HealthClipFrame_HealComm(frame)
|
||||
local pred = frame.HealCommBar
|
||||
if pred then
|
||||
UF:SetAlpha_HealComm(pred, true)
|
||||
UF:SetVisibility_HealComm(pred)
|
||||
end
|
||||
end
|
||||
|
||||
function UF:SetAlpha_HealComm(obj, show)
|
||||
obj.myBar:SetAlpha(show and 1 or 0)
|
||||
obj.otherBar:SetAlpha(show and 1 or 0)
|
||||
end
|
||||
|
||||
function UF:SetVisibility_HealComm(obj)
|
||||
-- the first update is from `HealthClipFrame_HealComm`
|
||||
-- we set this variable to allow `Configure_HealComm` to
|
||||
-- update the elements overflow lock later on by option
|
||||
if not obj.allowClippingUpdate then
|
||||
obj.allowClippingUpdate = true
|
||||
end
|
||||
|
||||
if obj.maxOverflow > 1 then
|
||||
obj.myBar:SetParent(obj.health)
|
||||
obj.otherBar:SetParent(obj.health)
|
||||
else
|
||||
obj.myBar:SetParent(obj.parent)
|
||||
obj.otherBar:SetParent(obj.parent)
|
||||
end
|
||||
end
|
||||
|
||||
function UF:Construct_HealComm(frame)
|
||||
local health = frame.Health
|
||||
local parent = health.ClipFrame
|
||||
|
||||
local myBar = CreateFrame("StatusBar", nil, parent)
|
||||
local otherBar = CreateFrame("StatusBar", nil, parent)
|
||||
|
||||
myBar:SetFrameLevel(11)
|
||||
otherBar:SetFrameLevel(11)
|
||||
|
||||
UF.statusbars[myBar] = true
|
||||
UF.statusbars[otherBar] = true
|
||||
|
||||
local texture = (not health.isTransparent and health:GetStatusBarTexture()) or E.media.blankTex
|
||||
UF:Update_StatusBar(myBar, texture)
|
||||
UF:Update_StatusBar(otherBar, texture)
|
||||
|
||||
local healPrediction = {
|
||||
myBar = myBar,
|
||||
otherBar = otherBar,
|
||||
PostUpdate = UF.UpdateHealComm,
|
||||
maxOverflow = 1,
|
||||
health = health,
|
||||
parent = parent,
|
||||
frame = frame
|
||||
}
|
||||
|
||||
UF:SetAlpha_HealComm(healPrediction)
|
||||
|
||||
return healPrediction
|
||||
end
|
||||
|
||||
function UF:Configure_HealComm(frame)
|
||||
if frame.db.healPrediction and frame.db.healPrediction.enable then
|
||||
local healPrediction = frame.HealCommBar
|
||||
local myBar = healPrediction.myBar
|
||||
local otherBar = healPrediction.otherBar
|
||||
local c = self.db.colors.healPrediction
|
||||
healPrediction.maxOverflow = 1 + (c.maxOverflow or 0)
|
||||
|
||||
if healPrediction.allowClippingUpdate then
|
||||
UF:SetVisibility_HealComm(healPrediction)
|
||||
end
|
||||
|
||||
if not frame:IsElementEnabled("HealComm4") then
|
||||
frame:EnableElement("HealComm4")
|
||||
end
|
||||
|
||||
if frame.db.health then
|
||||
local health = frame.Health
|
||||
local orientation = frame.db.health.orientation or health:GetOrientation()
|
||||
|
||||
myBar:SetOrientation(orientation)
|
||||
otherBar:SetOrientation(orientation)
|
||||
|
||||
if orientation == "HORIZONTAL" then
|
||||
local width = health:GetWidth()
|
||||
width = (width > 0 and width) or health.WIDTH
|
||||
local healthTexture = health:GetStatusBarTexture()
|
||||
|
||||
myBar:Size(width, 0)
|
||||
myBar:ClearAllPoints()
|
||||
myBar:Point("TOP", health, "TOP")
|
||||
myBar:Point("BOTTOM", health, "BOTTOM")
|
||||
myBar:Point("LEFT", healthTexture, "RIGHT")
|
||||
|
||||
otherBar:Size(width, 0)
|
||||
otherBar:ClearAllPoints()
|
||||
otherBar:Point("TOP", health, "TOP")
|
||||
otherBar:Point("BOTTOM", health, "BOTTOM")
|
||||
otherBar:Point("LEFT", myBar:GetStatusBarTexture(), "RIGHT")
|
||||
else
|
||||
local height = health:GetHeight()
|
||||
height = (height > 0 and height) or health.HEIGHT
|
||||
local healthTexture = health:GetStatusBarTexture()
|
||||
|
||||
myBar:Size(0, height)
|
||||
myBar:ClearAllPoints()
|
||||
myBar:Point("LEFT", health, "LEFT")
|
||||
myBar:Point("RIGHT", health, "RIGHT")
|
||||
myBar:Point("BOTTOM", healthTexture, "TOP")
|
||||
|
||||
otherBar:Size(0, height)
|
||||
otherBar:ClearAllPoints()
|
||||
otherBar:Point("LEFT", health, "LEFT")
|
||||
otherBar:Point("RIGHT", health, "RIGHT")
|
||||
otherBar:Point("BOTTOM", myBar:GetStatusBarTexture(), "TOP")
|
||||
end
|
||||
end
|
||||
|
||||
myBar:SetStatusBarColor(c.personal.r, c.personal.g, c.personal.b, c.personal.a)
|
||||
otherBar:SetStatusBarColor(c.others.r, c.others.g, c.others.b, c.others.a)
|
||||
elseif frame:IsElementEnabled("HealComm4") then
|
||||
frame:DisableElement("HealComm4")
|
||||
end
|
||||
end
|
||||
|
||||
local function UpdateFillBar(frame, previousTexture, bar, amount)
|
||||
if amount == 0 then
|
||||
bar:Hide()
|
||||
return previousTexture
|
||||
end
|
||||
|
||||
local orientation = frame:GetOrientation()
|
||||
bar:ClearAllPoints()
|
||||
if orientation == "HORIZONTAL" then
|
||||
bar:SetPoint("TOPLEFT", previousTexture, "TOPRIGHT")
|
||||
bar:SetPoint("BOTTOMLEFT", previousTexture, "BOTTOMRIGHT")
|
||||
else
|
||||
bar:SetPoint("BOTTOMRIGHT", previousTexture, "TOPRIGHT")
|
||||
bar:SetPoint("BOTTOMLEFT", previousTexture, "TOPLEFT")
|
||||
end
|
||||
|
||||
local totalWidth, totalHeight = frame:GetSize()
|
||||
if orientation == "HORIZONTAL" then
|
||||
bar:Width(totalWidth)
|
||||
else
|
||||
bar:Height(totalHeight)
|
||||
end
|
||||
|
||||
return bar:GetStatusBarTexture()
|
||||
end
|
||||
|
||||
function UF:UpdateHealComm(_, myIncomingHeal, allIncomingHeal)
|
||||
local health = self.health
|
||||
local previousTexture = health:GetStatusBarTexture()
|
||||
|
||||
previousTexture = UpdateFillBar(health, previousTexture, self.myBar, myIncomingHeal)
|
||||
UpdateFillBar(health, previousTexture, self.otherBar, allIncomingHeal)
|
||||
end
|
||||
Reference in New Issue
Block a user