function eCastingBarMirror_Show(timer, value, maxvalue, scale, paused, label) -- Pick a free dialog to use local dialog = nil; if ( not dialog ) then -- Find an open dialog of the requested type for index = 1, MIRRORTIMER_NUMTIMERS, 1 do local frame = getglobal("eCastingBarMirror"..index); if ( frame:IsVisible() and (frame.timer == timer) ) then dialog = frame; break; end end end if ( not dialog ) then -- Find a free dialog for index = 1, STATICPOPUP_NUMDIALOGS, 1 do local frame = getglobal("eCastingBarMirror"..index); if ( not frame:IsVisible() ) then dialog = frame; break; end end end if ( not dialog ) then return nil; end dialog.flash = nil dialog.fadeOut = nil dialog.mode = "" dialog.timer = timer; dialog.value = (value / 1000); dialog.scale = scale; if ( paused > 0 ) then dialog.paused = 1; else dialog.paused = nil; end -- Set the text of the dialog local text = getglobal(dialog:GetName().."StatusBarText"); text:SetText(label); -- Set the status bar of the dialog local statusbar = getglobal(dialog:GetName().."StatusBar"); statusbar:SetMinMaxValues(0, (maxvalue / 1000)); statusbar:SetValue(dialog.value); local Red, Green, Blue, Alpha if (timer == "FEIGNDEATH") then Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].FeignDeathColor) elseif (timer == "EXHAUSTION") then Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].ExhaustionColor) elseif (timer == "BREATH") then Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].BreathColor) else Red, Green, Blue, Alpha = unpack(eCastingBar_Saved[eCastingBar_Player].ChannelColor) end statusbar:SetStatusBarColor(Red, Green, Blue, Alpha); -- show the spark getglobal(statusbar:GetName().."Spark"):Show( ) -- set the text to the spell name -- figure out how much to show if ( eCastingBar_Saved[eCastingBar_Player].MirrorSpellLength == -1 ) then -- show all getglobal(statusbar:GetName().."Text"):SetText( label ) elseif ( eCastingBar_Saved[eCastingBar_Player].MirrroSpellLength == 0) then -- dont show it getglobal(statusbar:GetName().."Text"):SetText( "" ) else -- if the size of the name is less than or equal to the max size, just show it all if ( string.len(label) <= eCastingBar_Saved[eCastingBar_Player].MirrorSpellLength ) then getglobal(statusbar:GetName().."Text"):SetText( label ) else getglobal(statusbar:GetName().."Text"):SetText( string.sub(label , 1, eCastingBar_Saved[eCastingBar_Player].MirrorSpellLength) ) end end -- set the bar to fully opaque dialog:SetAlpha( 1.0 ) dialog:Show(); return dialog; end function eCastingBarMirror_OnEvent() if ( event == "PLAYER_ENTERING_WORLD" ) then this:Hide(); this.timer = nil; end if ( not this:IsShown() or (arg1 ~= this.timer) ) then return; end if ( event == "MIRROR_TIMER_PAUSE" ) then if ( arg1 > 0 ) then this.paused = 1; else this.paused = nil; end return; end if ( event == "MIRROR_TIMER_STOP" ) then -- start the flash state getglobal(this:GetName().."Flash"):SetAlpha( 0.0 ) getglobal(this:GetName().."Flash"):Show( ) this.flash = 1 this.fadeOut = 1 this.mode = "flash" end end function eCastingBarMirror_OnUpdate(frame, elapsed) if ( frame.paused ) then return; end if( frame.flash ) then -- yes, sest the flash alpha local intAlpha = getglobal(frame:GetName().."Flash"):GetAlpha( ) + CASTING_BAR_FLASH_STEP -- reset the text getglobal(frame:GetName().."StatusBar_Time"):SetText( "" ) -- is the flash alpha < 1? if( intAlpha < 1 ) then -- yes, step it up getglobal(frame:GetName().."Flash"):SetAlpha( intAlpha ) else -- no, which means its 1 or greater, and we are at full alpha and done. frame.flash = nil end -- no, are we fading out now? elseif ( frame.fadeOut ) then --yes, set the CastingBar alpha local intAlpha = frame:GetAlpha( ) - CASTING_BAR_ALPHA_STEP -- is the bar alpha > 0? if( intAlpha > 0 ) then -- step it down frame:SetAlpha( intAlpha ) else -- no, which means its 0 or larger, and we are at fully transparent so we are done and hide the bar. frame.fadeOut = nil frame.timer = nil frame:Hide( ) end else local statusbar = getglobal(frame:GetName().."StatusBar"); frame.value = (frame.value + frame.scale * elapsed); statusbar:SetValue(frame.value); local intTimeLeft = frame.value local intBarValue = 0 local min, max = statusbar:GetMinMaxValues(); local intSparkPosition = max -- Thanks to wbb at Cursed for the lovely formating if (eCastingBar_Saved[eCastingBar_Player].MirrorShowTime == 1) then -- if we are over 1 minute, do minute:seconds local timeLeft = math.max( intTimeLeft - min, 0.0 ) local timeMsg = nil local minutes = 0 local seconds = 0 if (timeLeft > max) then timeLeft = max end if (timeLeft > 60) then minutes = math.floor( ( timeLeft / 60 )) local seconds = math.ceil( timeLeft - ( 60 * minutes )) if (seconds == 60) then minutes = minutes + 1 seconds = 0 end timeMsg = format("%s:%s", minutes, getFormattedNumber(seconds)) else timeMsg = string.format( "%.1f", timeLeft ) end --format(COOLDOWNCOUNT_MINUTES_SECONDS_FORMAT, minutes, CooldownCount_GetFormattedNumber(seconds)) getglobal(statusbar:GetName().."_Time"):SetText( timeMsg ) else getglobal(statusbar:GetName().."_Time"):SetText("") end -- is the time left greater than channeling end time? if( intTimeLeft > max ) then -- yes, set it to the channeling end time (this will happen if you get delayed longer than the time left on channeling) intTimeLeft = max end -- update the bar length intBarValue = intTimeLeft --getglobal("eCastingBar"..frame.."StatusBar"):SetValue( intBarValue ) --reset the flash to hidden getglobal(frame:GetName().."Flash"):Hide( ) -- updates the spark local width = getglobal(frame:GetName().."Background"):GetWidth() intSparkPosition = ( intBarValue / max ) * width getglobal(frame:GetName().."StatusBarSpark"):SetPoint( "CENTER", frame:GetName().."StatusBar", "LEFT", intSparkPosition, 0 ) end end function eCastingBarMirror_MouseUp( strButton ) if( eCastingBar_Saved[eCastingBar_Player].MirrorLocked == 0 ) then eCastingBarMirror_Outline:StopMovingOrSizing( ) eCastingBar_Saved[eCastingBar_Player].MirrorLeft = eCastingBarMirror_Outline:GetLeft() eCastingBar_Saved[eCastingBar_Player].MirrorBottom = eCastingBarMirror_Outline:GetBottom() eCastingBarMirrorLeftSlider:SetValue(eCastingBar_Saved[eCastingBar_Player].MirrorLeft) eCastingBarMirrorBottomSlider:SetValue(eCastingBar_Saved[eCastingBar_Player].MirrorBottom) end end --[[ Stops moving the frame. ]]-- function eCastingBarMirror_MouseDown( strButton ) if( strButton == "LeftButton" and (eCastingBar_Saved[eCastingBar_Player].MirrorLocked == 0 ) ) then eCastingBarMirror_Outline:StartMoving( ) end end