Rewrite on Faders: Details.FadeHandler.Fader(frame, animationType, speed, hideType)

This commit is contained in:
Tercio Jose
2021-04-24 18:17:59 -03:00
parent 4a28c63b4e
commit 2379884746
35 changed files with 722 additions and 337 deletions
+293 -34
View File
@@ -7,7 +7,7 @@
--> local pointers
local _table_insert = table.insert --lua local
local _upper = string.upper --lua local
local upper = string.upper --lua local
local _ipairs = ipairs --lua local
local _pairs = pairs --lua local
local _math_floor = math.floor --lua local
@@ -15,7 +15,7 @@
local _math_abs = math.abs --lua local
local _math_min = math.min --lua local
local _math_random = math.random --lua local
local _type = type --lua local
local type = type --lua local
local _string_match = string.match --lua local
local _string_byte = string.byte --lua local
local _string_len = string.lenv
@@ -33,12 +33,275 @@
local _GetNumGroupMembers = GetNumGroupMembers --wow api local
local _UnitAffectingCombat = UnitAffectingCombat --wow api local
local _GameTooltip = GameTooltip --wow api local
local _UIFrameFadeIn = UIFrameFadeIn --wow api local
local _UIFrameFadeOut = UIFrameFadeOut --wow api local
--local _UIFrameFadeIn = UIFrameFadeIn --wow api local
--local _UIFrameFadeOut = UIFrameFadeOut --wow api local
local _InCombatLockdown = InCombatLockdown --wow api local
local gump = _detalhes.gump --details local
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> fade handler
Details.FadeHandler = {
frames = {}
}
--fade in is hidding the frame, it is the opposite of the stardard
local fadeINFinishedCallback = function(frame)
if (frame.fading_in) then
frame.hidden = true
frame.faded = true
frame.fading_in = false
frame:Hide()
end
end
--fade out is showing the frame
local fadeOUTFinishedCallback = function(frame)
if (frame:IsShown() and frame.fading_out) then
frame.hidden = false
frame.faded = false
frame.fading_out = false
else
frame:SetAlpha(0)
end
end
local just_fade_func = function(frame)
frame.hidden = false
frame.faded = true
frame.fading_in = false
end
local cancelFadeAnimation = function(frame)
Details.FadeHandler.frames[frame] = nil
end
Details.FadeHandler.OnUpdateFrame = CreateFrame("frame", "DetailsFadeFrameOnUpdate", UIParent)
Details.FadeHandler.OnUpdateFrame:SetScript("OnUpdate", function(self, deltaTime)
for frame, frameSettings in pairs(Details.FadeHandler.frames) do
local totalTime = frameSettings.totalTime
local initAlpha = frameSettings.startAlpha
local targetAlpha = frameSettings.endAlpha
frameSettings.elapsed = frameSettings.elapsed + deltaTime
local currentAlpha = Lerp(initAlpha, targetAlpha, frameSettings.elapsed / totalTime)
if (frameSettings.elapsed >= totalTime) then
frame:SetAlpha(targetAlpha)
frameSettings.finishedCallback(frame)
--remove the frame from the list
Details.FadeHandler.frames[frame] = nil
else
frame:SetAlpha(currentAlpha)
end
end
end)
--fade in is hidding the frame
local startFadeINAnimation = function(frame, totalTime, startAlpha, endAlpha, callbackFunc)
frame.fading_out = nil
frame.fading_in = true
Details.FadeHandler.frames[frame] = {
totalTime = totalTime or 0.3,
startAlpha = startAlpha or frame:GetAlpha(),
endAlpha = endAlpha or 0,
finishedCallback = callbackFunc or fadeINFinishedCallback,
elapsed = 0,
}
end
--fade out is showing the frame
local startFadeOUTAnimation = function(frame, totalTime, startAlpha, endAlpha, callbackFunc)
frame.fading_in = nil
frame.fading_out = true
Details.FadeHandler.frames[frame] = {
totalTime = totalTime or 0.3,
startAlpha = startAlpha or frame:GetAlpha() or 0,
endAlpha = endAlpha or 1,
finishedCallback = callbackFunc or fadeOUTFinishedCallback,
elapsed = 0,
}
end
function Details.FadeHandler.Fader(frame, animationType, speed, hideType, param5)
if (frame == nil) then
frame, animationType, speed, hideType = animationType, speed, hideType, param5
end
--if is a table, might be passed an instance object
if (type(frame) == "table") then
--is it an instance
if (frame.meu_id) then
local instance = frame
--hide all bars in the instance
if (hideType == "barras") then
if (speed) then
for i = 1, instance.rows_created do
local instanceBar = instance.barras[i]
Details.FadeHandler.Fader(instanceBar, animationType, speed)
end
return
else
speed = speed or 0.3
for i = 1, instance.rows_created do
local instanceBar = instance.barras[i]
Details.FadeHandler.Fader(instanceBar, animationType, 0.3+(i/10))
end
return
end
--instant hide all bars in the instance
elseif (hideType == "hide_barras") then
for i = 1, instance.rows_created do
local instanceBar = instance.barras[i]
if (instanceBar.fading_in or instanceBar.fading_out) then
startFadeINAnimation(instanceBar, 0.01, instanceBar:GetAlpha(), instanceBar:GetAlpha())
-- _UIFrameFadeIn (instanceBar, 0.01, instanceBar:GetAlpha(), instanceBar:GetAlpha())
end
instanceBar.hidden = true
instanceBar.faded = true
instanceBar.fading_in = false
instanceBar.fading_out = false
instanceBar:Hide()
instanceBar:SetAlpha(0)
end
return
end
--if is a framework widget
elseif (frame.dframework) then
frame = frame.widget
end
end
speed = speed or 0.3
--animationType = upper(animationType)
--hide all instanceBars on all instances
if (frame == "all") then
for _, instancia in _ipairs(_detalhes.tabela_instancias) do
if (hideType == "barras") then
for i = 1, instancia.rows_created do
local instanceBar = instancia.barras[i]
Details.FadeHandler.Fader(instanceBar, animationType, speed+(i/10))
end
end
end
return
elseif (upper(animationType) == "IN") then --hide the frame
--check if already hidden
if (frame:GetAlpha() == 0 and frame.hidden and not frame.fading_out) then
return
--chekc if already with an animation going on
elseif (frame.fading_in) then
return
end
--cancel face out animation if exists
if (frame.fading_out) then
frame.fading_out = false
end
-- _UIFrameFadeIn (frame, speed, frame:GetAlpha(), 0)
startFadeINAnimation(frame, speed, frame:GetAlpha(), 0)
elseif (upper(animationType) == "OUT") then --show the frame
if (frame:GetAlpha() == 1 and not frame.hidden and not frame.fading_in) then --> ja esta na tela
return
elseif (frame.fading_out) then --> j ta com fading out
return
end
if (frame.fading_in) then --> se tiver uma animao de hidar em andamento se for true
frame.fading_in = false
end
frame:Show()
-- _UIFrameFadeOut (frame, speed, frame:GetAlpha(), 1.0)
startFadeOUTAnimation(frame, speed, frame:GetAlpha(), 1.0)
frame.fading_out = true
elseif (animationType == 0) then --force show the frame
frame.hidden = false
frame.faded = false
frame.fading_out = false
frame.fading_in = false
cancelFadeAnimation(frame) --cancel any ongoing animation
frame:Show()
frame:SetAlpha(1)
elseif (animationType == 1) then --force hide the frame
frame.hidden = true
frame.faded = true
frame.fading_out = false
frame.fading_in = false
cancelFadeAnimation(frame) --cancel any ongoing animation
frame:SetAlpha(0)
frame:Hide()
elseif (animationType == -1) then --just fade to zero without hidding the frame
--check already hidden
if (frame:GetAlpha() == 0 and frame.hidden and not frame.fading_out) then
return
--check already hidding
elseif (frame.fading_in) then
return
end
if (frame.fading_out) then
frame.fading_out = false
end
startFadeINAnimation(frame, speed, frame:GetAlpha(), 0, just_fade_func)
-- _UIFrameFadeIn (frame, speed, frame:GetAlpha(), 0)
elseif (upper(animationType) == "ALPHAANIM") then
local value = speed
local currentApha = frame:GetAlpha()
frame:Show()
if (currentApha < value) then
if (frame.fading_in) then
frame.fading_in = false
end
startFadeOUTAnimation(frame, 0.3, currentApha, value, function(frame) frame.fading_out = false end)
-- _UIFrameFadeOut (frame, 0.3, currentApha, value)
else
if (frame.fading_out) then
frame.fading_out = false
end
-- _UIFrameFadeIn (frame, 0.3, currentApha, value)
startFadeINAnimation(frame, 0.3, currentApha, value, function(frame) frame.fading_in = false end)
end
--set a fixed alpha value
elseif (upper(animationType) == "ALPHA") then
local alphaAmount = speed
if (frame.fading_in or frame.fading_out) then
startFadeINAnimation(frame, speed, alphaAmount, alphaAmount)
end
frame.hidden = false
frame.faded = false
frame.fading_in = false
frame.fading_out = false
frame:Show()
frame:SetAlpha(alphaAmount)
end
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> details api functions
@@ -91,7 +354,7 @@
--> get the fractional number representing the alphabetical letter
function _detalhes:GetOrderNumber (who_name)
--local name = _upper (who_name .. "zz")
--local name = upper (who_name .. "zz")
--local byte1 = _math_abs (_string_byte (name, 2)-91)/1000000
--return byte1 + _math_abs (_string_byte (name, 1)-91)/10000
return _math_random (1000, 9000) / 1000000
@@ -563,10 +826,9 @@
--yah, i know
function _detalhes.table.copy (t1, t2)
local table_deepcopy = table_deepcopy
for key, value in pairs (t2) do
if (type (value) == "table") then
t1 [key] = table_deepcopy (value)
t1 [key] = Details.CopyTable (value)
else
t1 [key] = value
end
@@ -611,7 +873,7 @@
for key, value in pairs (t) do
local tpe = _type (value)
local tpe = type (value)
if (type (key) == "function") then
key = "#function#"
@@ -801,7 +1063,7 @@ end
function _detalhes:SetFontOutline (fontString, outline)
local fonte, size = fontString:GetFont()
if (outline) then
if (_type (outline) == "boolean" and outline) then
if (type (outline) == "boolean" and outline) then
outline = "OUTLINE"
elseif (outline == 1) then
outline = "OUTLINE"
@@ -863,7 +1125,7 @@ end
end
return true
elseif ((_detalhes.zone_type == "pvp" and _detalhes.use_battleground_server_parser) or _detalhes.zone_type == "arena" or _InCombatLockdown()) then
elseif ((_detalhes.zonetype == "pvp" and _detalhes.use_battleground_server_parser) or _detalhes.zonetype == "arena" or _InCombatLockdown()) then
return true
elseif (_UnitAffectingCombat("player")) then
@@ -1043,7 +1305,7 @@ end
end
end
if (EndFunction and _type (EndFunction) == "string") then
if (EndFunction and type (EndFunction) == "string") then
EndFunction = loadstring (EndFunction) or false
end
@@ -1151,14 +1413,7 @@ end
--> todo: remove the function creation everytime this function run.
local fade_IN_finished_func = function (frame)
if (frame.fading_in) then
frame.hidden = true
frame.faded = true
frame.fading_in = false
frame:Hide()
end
end
local fade_OUT_finished_func = function (frame)
if (frame:IsShown() and frame.fading_out) then
@@ -1183,22 +1438,26 @@ end
local anim_IN_alpha_func = function (frame)
frame.fading_in = false
end
--this functions should be called anymore
function gump:Fade (frame, tipo, velocidade, parametros)
a = a + 1 --throw an error if called
if (_type (frame) == "table") then
if (type (frame) == "table") then
if (frame.meu_id) then --> ups, uma instncia
if (parametros == "barras") then --> hida todas as barras da instncia
if (velocidade) then
for i = 1, frame.rows_created, 1 do
gump:Fade (frame.barras[i], tipo, velocidade)
Details.FadeHandler.Fader (frame.barras[i], tipo, velocidade)
end
return
else
velocidade = velocidade or 0.3
for i = 1, frame.rows_created, 1 do
gump:Fade (frame.barras[i], tipo, 0.3+(i/10))
Details.FadeHandler.Fader (frame.barras[i], tipo, 0.3+(i/10))
end
return
end
@@ -1207,7 +1466,7 @@ end
local esta_barra = frame.barras[i]
if (esta_barra.fading_in or esta_barra.fading_out) then
esta_barra.fadeInfo.finishedFunc = nil
_UIFrameFadeIn (esta_barra, 0.01, esta_barra:GetAlpha(), esta_barra:GetAlpha())
-- _UIFrameFadeIn (esta_barra, 0.01, esta_barra:GetAlpha(), esta_barra:GetAlpha())
end
esta_barra.hidden = true
esta_barra.faded = true
@@ -1230,12 +1489,12 @@ end
for _, instancia in _ipairs (_detalhes.tabela_instancias) do
if (parametros == "barras") then --> hida todas as barras da instncia
for i = 1, instancia.rows_created, 1 do
gump:Fade (instancia.barras[i], tipo, velocidade+(i/10))
Details.FadeHandler.Fader (instancia.barras[i], tipo, velocidade+(i/10))
end
end
end
elseif (_upper (tipo) == "IN") then
elseif (upper (tipo) == "IN") then
if (frame:GetAlpha() == 0 and frame.hidden and not frame.fading_out) then --> ja esta escondida
return
@@ -1247,13 +1506,13 @@ end
frame.fading_out = false
end
_UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), 0)
-- _UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), 0)
frame.fading_in = true
frame.fadeInfo.finishedFunc = fade_IN_finished_func
frame.fadeInfo.finishedArg1 = frame
elseif (_upper (tipo) == "OUT") then --> aparecer
elseif (upper (tipo) == "OUT") then --> aparecer
if (frame:GetAlpha() == 1 and not frame.hidden and not frame.fading_in) then --> ja esta na tela
return
@@ -1266,7 +1525,7 @@ end
end
frame:Show()
_UIFrameFadeOut (frame, velocidade, frame:GetAlpha(), 1.0)
-- _UIFrameFadeOut (frame, velocidade, frame:GetAlpha(), 1.0)
frame.fading_out = true
frame.fadeInfo.finishedFunc = fade_OUT_finished_func
@@ -1299,12 +1558,12 @@ end
frame.fading_out = false
end
_UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), 0)
-- _UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), 0)
frame.fading_in = true
frame.fadeInfo.finishedFunc = just_fade_func
frame.fadeInfo.finishedArg1 = frame
elseif (_upper (tipo) == "ALPHAANIM") then
elseif (upper (tipo) == "ALPHAANIM") then
local value = velocidade
local currentApha = frame:GetAlpha()
@@ -1315,7 +1574,7 @@ end
frame.fading_in = false
frame.fadeInfo.finishedFunc = nil
end
_UIFrameFadeOut (frame, 0.3, currentApha, value)
-- _UIFrameFadeOut (frame, 0.3, currentApha, value)
frame.fading_out = true
frame.fadeInfo.finishedFunc = anim_OUT_alpha_func
@@ -1326,17 +1585,17 @@ end
frame.fading_out = false
frame.fadeInfo.finishedFunc = nil
end
_UIFrameFadeIn (frame, 0.3, currentApha, value)
-- _UIFrameFadeIn (frame, 0.3, currentApha, value)
frame.fading_in = true
frame.fadeInfo.finishedFunc = anim_IN_alpha_func
frame.fadeInfo.finishedArg1 = frame
end
elseif (_upper (tipo) == "ALPHA") then --> setando um alpha determinado
elseif (upper (tipo) == "ALPHA") then --> setando um alpha determinado
if (frame.fading_in or frame.fading_out) then
frame.fadeInfo.finishedFunc = nil
_UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), frame:GetAlpha())
-- _UIFrameFadeIn (frame, velocidade, frame:GetAlpha(), frame:GetAlpha())
end
frame.hidden = false
frame.faded = false