I was able to dry code the following:
Lua Code:
local fadeouttable = {}
table.insert(fadeouttable, GameTimeFrame)
table.insert(fadeouttable, TimeManagerClockButton)
table.insert(fadeouttable, MiniMapTracking)
table.insert(fadeouttable, MiniMapChallengeMode)
table.insert(fadeouttable, MiniMapInstanceDifficulty)
table.insert(fadeouttable, GuildInstanceDifficulty)
local function CreateFrameFadeAnimation(frame)
if frame.fader then return end
local animFrame = CreateFrame('frame', nil, frame)
animFrame.__owner = frame
frame.fader = animFrame:CreateAnimationGroup()
frame.fader.__owner = frame
frame.fader.__animFrame = animFrame
frame.fader.direction = nil
frame.fader.setToFinalAlpha = false
frame.fader.anim = frame.fader:CreateAnimation('Alpha')
--frame.fader:HookScript("OnFinished", FaderOnFinished)
--frame.fader:HookScript("OnUpdate", FaderOnUpdate)
end
local function tMinimapFadeOut(frame)
if frame.fader.direction == 'out' then return end
frame.fader:Pause()
frame.fader.anim:SetFromAlpha(1)
frame.fader.anim:SetToAlpha(0)
frame.fader.anim:SetDuration(1)
frame.fader.anim:SetSmoothing('OUT')
frame.fader.anim:SetStartDelay(1)
frame.fader.finAlpha = 0
frame.fader.direction = 'out'
frame.fader:Play()
end
local lasttime
Minimap:SetScript('OnLeave', function()
if Minimap:IsMouseOver() then return end --failsafe to ensure we don't hide with mouse still on minimap
if time() == lasttime then return end --another failsafe
lasttime = time()
for k, v in pairs(fadeouttable) do
tMinimapFadeOut(v)
end
end)
Minimap:SetScript('OnEnter', function()
for k, v in pairs(fadeouttable) do
v.fader:Pause()
v:SetAlpha(1)
end
end)
Of note, I didn't understand why you need the onupdate and the onfinished functions. Why is that, exactly?