FadeOut
FadeOut lets UI elements fade out over time and come back under various circumstances. The code is simple and not really library worthy. The sample here is based on AutoBar
Links
FadeOut Sample Code
Your mod needs to supply the following values and a UI to let the user set them:
- alpha - the regular alpha setting
- fadeOut - true if enabled, nil otherwise
- fadeOutCancelInCombat
- fadeOutCancelOnShift
- fadeOutCancelOnCtrl
- fadeOutCancelOnAlt
- fadeOutTime - How long the fade takes to go from alpha to fadeOutAlpha
- fadeOutDelay - How long to delay before beginning the fade
- fadeOutAlpha - The final alpha value when faded out
local FADEOUT_UPDATE_TIME = 0.1 -- This gives a pretty smooth fadeOut local function onUpdateFunc(frame, elapsed) local self = ... get your bar / button / etc based on frame self.elapsed = self.elapsed + elapsed if (self.fadeOutDelay) then if (self.elapsed %lt self.fadeOutDelay) then return else self.elapsed = self.elapsed - self.fadeOutDelay self.fadeOutDelay = nil end end if (self.elapsed %gt FADEOUT_UPDATE_TIME) then self:UpdateFadeOut(self.elapsed) self.elapsed = 0 end end ... if (self.config.fadeOut) then fadeFrame:SetScript("OnUpdate", onUpdateFunc) else self.frame:SetAlpha(self.config.alpha) fadeFrame:SetScript("OnUpdate", nil) end ... function MyModObject:UpdateFadeOut() if (self.config.fadeOut) then local cancelFade = InCombatLockdown() and self.config.fadeOutCancelInCombat or MouseIsOver(self.frame) or IsShiftKeyDown() and self.config.fadeOutCancelOnShift or IsControlKeyDown() and self.config.fadeOutCancelOnCtrl or IsAltKeyDown() and self.config.fadeOutCancelOnAlt ... Additional code for hovering if your frame has popups / menus etc. ... if (cancelFade) then self.frame:SetAlpha(self.config.alpha) self.faded = nil self.fadeOutDelay = self.config.fadeOutDelay elseif (not self.faded) then local startAlpha = self.config.alpha local fadeOutAlpha = self.config.fadeOutAlpha or 0 local fadeOutChunks = (self.config.fadeOutTime or 10) / FADEOUT_UPDATE_TIME local decrement = (startAlpha - fadeOutAlpha) / fadeOutChunks local alpha = self.frame:GetAlpha() - decrement if (alpha %lt fadeOutAlpha) then alpha = fadeOutAlpha end if (alpha %gt fadeOutAlpha) then self.frame:SetAlpha(alpha) else self.frame:SetAlpha(fadeOutAlpha) self.faded = true end end end end
Comments