Files
ElvUIModernized/ElvUI/Libraries/oUF_Plugins/oUF_CombatFader/oUF_CombatFader.lua
T
2018-12-17 22:01:32 -06:00

123 lines
3.3 KiB
Lua

--By Elv, for E.
local ns = oUF
local oUF = ns.oUF
local pairs = pairs
local UIFrameFadeIn, UIFrameFadeOut = UIFrameFadeIn, UIFrameFadeOut
local UnitAffectingCombat = UnitAffectingCombat
local UnitHealth, UnitHealthMax = UnitHealth, UnitHealthMax
local UnitExists = UnitExists
local frames, allFrames = {}, {}
local showStatus
local CheckForReset = function()
for frame in pairs(allFrames) do
if frame.fadeInfo and frame.fadeInfo.reset then
frame:SetAlpha(1)
frame.fadeInfo.reset = nil
end
end
end
local FadeFramesInOut = function(fade, unit)
for frame, unit in pairs(frames) do
if not UnitExists(unit) then return end
if fade then
if frame:GetAlpha() ~= 1 or (frame.fadeInfo and frame.fadeInfo.endAlpha == 0) then
UIFrameFadeIn(frame, 0.15)
end
else
if frame:GetAlpha() ~= 0 then
UIFrameFadeOut(frame, 0.15)
frame.fadeInfo.finishedFunc = CheckForReset
else
showStatus = false
return
end
end
end
if unit == "player" then
showStatus = fade
end
end
local Update = function(self, arg1, arg2)
if arg1 == "UNIT_HEALTH" and self and self.unit ~= arg2 then return end
if type(arg1) == "boolean" and not frames[self] then
return
end
if not frames[self] then
UIFrameFadeIn(self, 0.15)
self.fadeInfo.reset = true
return
end
local combat = UnitAffectingCombat("player")
local cur, max = UnitHealth("player"), UnitHealthMax("player")
local target = UnitExists("target")
if cur ~= max and showStatus ~= true then
FadeFramesInOut(true, frames[self])
elseif target and showStatus ~= true then
FadeFramesInOut(true, frames[self])
elseif arg1 == true and showStatus ~= true then
FadeFramesInOut(true, frames[self])
else
if combat and showStatus ~= true then
FadeFramesInOut(true, frames[self])
elseif not target and not combat and (cur == max) then
FadeFramesInOut(false, frames[self])
end
end
end
local Enable = function(self, unit)
if self.CombatFade then
frames[self] = self.unit
allFrames[self] = self.unit
if unit == "player" then
showStatus = false
end
self:RegisterEvent("PLAYER_ENTERING_WORLD", Update)
self:RegisterEvent("PLAYER_REGEN_ENABLED", Update)
self:RegisterEvent("PLAYER_REGEN_DISABLED", Update)
self:RegisterEvent("PLAYER_TARGET_CHANGED", Update)
self:RegisterEvent("UNIT_HEALTH", Update)
self:RegisterEvent("UNIT_SPELLCAST_START", Update)
self:RegisterEvent("UNIT_SPELLCAST_STOP", Update)
self:RegisterEvent("UNIT_PORTRAIT_UPDATE", Update)
self:RegisterEvent("UNIT_MODEL_CHANGED", Update)
if not self.CombatFadeHooked then
HookScript(self, "OnEnter", function() Update(self, true) end)
HookScript(self, "OnLeave", function() Update(self, false) end)
self.CombatFadeHooked = true
end
return true
end
end
local Disable = function(self)
if(self.CombatFade) then
frames[self] = nil
Update(self)
self:UnregisterEvent("PLAYER_ENTERING_WORLD", Update)
self:UnregisterEvent("PLAYER_REGEN_ENABLED", Update)
self:UnregisterEvent("PLAYER_REGEN_DISABLED", Update)
self:UnregisterEvent("PLAYER_TARGET_CHANGED", Update)
self:UnregisterEvent("UNIT_HEALTH", Update)
self:UnregisterEvent("UNIT_SPELLCAST_START", Update)
self:UnregisterEvent("UNIT_SPELLCAST_STOP", Update)
self:UnregisterEvent("UNIT_PORTRAIT_UPDATE", Update)
self:UnregisterEvent("UNIT_MODEL_CHANGED", Update)
end
end
oUF:AddElement("CombatFade", Update, Enable, Disable)