Ended up having some bugs (naturally) and I wet coded it to:
Lua Code:
LoadAddOn("Blizzard_TimeManager")
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 FaderOnFinished(self)
self.__owner:SetAlpha(0)
end
local function FaderOnUpdate(self)
self.__owner:SetAlpha(self.__animFrame:GetAlpha())
end
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
for k, v in pairs(fadeouttable) do
CreateFrameFadeAnimation(v)
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.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.fader.direction = nil
v:SetAlpha(1)
end
end)
Works like a charm, it's a lot longer than my original code, but probably a tiny bit more efficient than doing a meta table look up 20 times.