From 24414620d2805ae702ff84dd0c39bcce1c80dbce Mon Sep 17 00:00:00 2001 From: "F. Dekker" Date: Sat, 26 Jan 2013 21:02:27 +0100 Subject: [PATCH] ReadyCheck indiction - Added a readycheck indicition, only visible for promoted raid members - no configuration necessary --- PerfectRaid.toc | 1 + PerfectRaid_ReadyCheck.lua | 141 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 PerfectRaid_ReadyCheck.lua diff --git a/PerfectRaid.toc b/PerfectRaid.toc index 33a2238..3bf4850 100644 --- a/PerfectRaid.toc +++ b/PerfectRaid.toc @@ -26,5 +26,6 @@ PerfectRaid_Buffs.lua PerfectRaid_Frames.lua PerfectRaid_Range.lua PerfectRaid_Highlight.lua +PerfectRaid_ReadyCheck.lua PerfectRaid_Config.lua PerfectRaid_RaidIcons.lua diff --git a/PerfectRaid_ReadyCheck.lua b/PerfectRaid_ReadyCheck.lua new file mode 100644 index 0000000..40d5588 --- /dev/null +++ b/PerfectRaid_ReadyCheck.lua @@ -0,0 +1,141 @@ +--[[------------------------------------------------------------------------- + * + * ReadyCheck module for PerfectRaid addon. + * + * Written by: Panoramix + * Version: 1.0 + * +---------------------------------------------------------------------------]] + + +local ReadyCheck = PerfectRaid:NewModule("PerfectRaid-ReadyCheck") +local frames + +-- the duration to fade the ready check status +ReadyCheck.fadeDuration = 4 + +function ReadyCheck:Initialize() + + frames = PerfectRaid.frames + + self:RegisterEvent("READY_CHECK", "UpdateReadyCheck") + self:RegisterEvent("READY_CHECK_CONFIRM", "UpdateReadyCheck") + self:RegisterEvent("READY_CHECK_FINISHED", "UpdateReadyCheck") + + self.started = false +end + + +function ReadyCheck:ConfigureButton( button ) + button.readycheck = CreateFrame("Frame", nil, button.leftbox) + button.readycheck.indicator = button.readycheck:CreateTexture(nil, "OVERLAY") +end + +function ReadyCheck:UpdateButtonLayout( button ) + + button.readycheck:ClearAllPoints() + button.readycheck:SetWidth(button:GetHeight( )) + button.readycheck:SetHeight(button:GetHeight( )) + button.readycheck:SetFrameLevel(button.leftbox:GetFrameLevel()+1) + + button.readycheck.indicator:SetAllPoints() + button.readycheck.indicator:SetTexture(READY_CHECK_READY_TEXTURE) + + button.readycheck:SetPoint("RIGHT", button.name, "RIGHT", 0, 0) + button.readycheck:Hide() + +end + + +--[[ + + event = READY_CHECK | READY_CHECK_CONFIRM(unit)| READY_CHECK_FINISHED + status = GetReadyCheckStatus( unit ) + = "ready" | "notready" | "waiting" +]]-- +function ReadyCheck:UpdateReadyCheck( event, target ) + + -- a ready check is initiated, update all frames + if event == "READY_CHECK" then + + for unit, tbl in pairs(frames) do + + local status = GetReadyCheckStatus( unit ) + + for frame in pairs(frames[unit]) do + ReadyCheck:SetReadyCheckStatus( frame, status ) + end + end + + -- a ready check is confirmed or declined, update frames of the unit + elseif event == "READY_CHECK_CONFIRM" then + + for unit, tbl in pairs(frames) do + + if UnitIsUnit( target, unit ) then + + local status = GetReadyCheckStatus( unit ) + + for frame in pairs(frames[unit]) do + ReadyCheck:SetReadyCheckStatus( frame, status ) + end + + break + end + + end + + -- the ready check has finished, wrap it up + elseif event == "READY_CHECK_FINISHED" then + + -- update any ~ready status + for unit, tbl in pairs(frames) do + for frame in pairs(frames[unit]) do + + if frame.readycheck.status then + + -- update status to not ready + if frame.readycheck.status ~= "ready" then + ReadyCheck:SetReadyCheckStatus( frame, "notready" ) + end + + -- start fade timer + frame.readycheck.elapsed = ReadyCheck.fadeDuration + frame.readycheck:SetScript("OnUpdate", function(self, elapsed) + + self.elapsed = self.elapsed - elapsed + self:SetAlpha( self.elapsed / ReadyCheck.fadeDuration ) + + if self.elapsed <= 0 then + self:Hide() + self:SetScript("OnUpdate", nil) + end + end) + + end + end + end + + end +end + +function ReadyCheck:SetReadyCheckStatus( frame, status ) + + frame.readycheck.status = status + + if not status then + return + end + + if( status == "ready" ) then + frame.readycheck.indicator:SetTexture(READY_CHECK_READY_TEXTURE) + elseif( status == "notready" ) then + frame.readycheck.indicator:SetTexture(READY_CHECK_NOT_READY_TEXTURE) + elseif( status == "waiting" ) then + frame.readycheck.indicator:SetTexture(READY_CHECK_WAITING_TEXTURE) + end + + frame.readycheck:SetAlpha( 1.0 ) + frame.readycheck:Show() +end + -- 1.7.9.5