231 lines
7.4 KiB
Lua
231 lines
7.4 KiB
Lua
|
|
MAX_RAID_MEMBERS = 40;
|
|
NUM_RAID_GROUPS = 8;
|
|
MEMBERS_PER_RAID_GROUP = 5;
|
|
MAX_RAID_INFOS = 20;
|
|
|
|
function RaidFrame_OnLoad(self)
|
|
self:RegisterEvent("PLAYER_LOGIN");
|
|
self:RegisterEvent("RAID_ROSTER_UPDATE");
|
|
self:RegisterEvent("UPDATE_INSTANCE_INFO");
|
|
self:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
|
self:RegisterEvent("PARTY_LEADER_CHANGED");
|
|
self:RegisterEvent("VOICE_STATUS_UPDATE");
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
self:RegisterEvent("READY_CHECK");
|
|
self:RegisterEvent("READY_CHECK_CONFIRM");
|
|
self:RegisterEvent("READY_CHECK_FINISHED");
|
|
self:RegisterEvent("PARTY_LFG_RESTRICTED");
|
|
|
|
-- Update party frame visibility
|
|
RaidOptionsFrame_UpdatePartyFrames();
|
|
RaidFrame_Update();
|
|
|
|
RaidFrame.hasRaidInfo = nil;
|
|
end
|
|
|
|
function RaidFrame_OnEvent(self, event, ...)
|
|
if ( event == "PLAYER_ENTERING_WORLD" ) then
|
|
RequestRaidInfo();
|
|
elseif ( event == "PLAYER_LOGIN" ) then
|
|
if ( GetNumRaidMembers() > 0 ) then
|
|
RaidFrame_LoadUI();
|
|
RaidFrame_Update();
|
|
end
|
|
elseif ( event == "RAID_ROSTER_UPDATE" ) then
|
|
RaidFrame_LoadUI();
|
|
RaidFrame_Update();
|
|
RaidPullout_RenewFrames();
|
|
elseif ( event == "READY_CHECK" or
|
|
event == "READY_CHECK_CONFIRM" ) then
|
|
if ( RaidFrame:IsShown() and RaidGroupFrame_Update ) then
|
|
RaidGroupFrame_Update();
|
|
end
|
|
elseif ( event == "READY_CHECK_FINISHED" ) then
|
|
if ( RaidFrame:IsShown() and RaidGroupFrame_ReadyCheckFinished ) then
|
|
RaidGroupFrame_ReadyCheckFinished();
|
|
end
|
|
elseif ( event == "UPDATE_INSTANCE_INFO" ) then
|
|
if ( not RaidFrame.hasRaidInfo ) then
|
|
-- Set flag
|
|
RaidFrame.hasRaidInfo = 1;
|
|
return;
|
|
end
|
|
if ( GetNumSavedInstances() > 0 ) then
|
|
RaidFrameRaidInfoButton:Enable();
|
|
else
|
|
RaidFrameRaidInfoButton:Disable();
|
|
end
|
|
RaidInfoFrame_Update(true);
|
|
elseif ( event == "PARTY_MEMBERS_CHANGED" or event == "PARTY_LEADER_CHANGED" or
|
|
event == "VOICE_STATUS_UPDATE" or event == "PARTY_LFG_RESTRICTED" ) then
|
|
RaidFrame_Update();
|
|
end
|
|
end
|
|
|
|
function RaidFrame_Update()
|
|
-- If not in a raid hide all the UI and just display raid explanation text
|
|
if ( GetNumRaidMembers() == 0 ) then
|
|
RaidFrameConvertToRaidButton:Show();
|
|
if ( GetPartyMember(1) and IsPartyLeader() and UnitLevel("player") >= 10 and not HasLFGRestrictions() ) then
|
|
RaidFrameConvertToRaidButton:Enable();
|
|
else
|
|
RaidFrameConvertToRaidButton:Disable();
|
|
end
|
|
RaidFrameNotInRaid:Show();
|
|
else
|
|
RaidFrameConvertToRaidButton:Hide();
|
|
RaidFrameNotInRaid:Hide();
|
|
end
|
|
|
|
if ( RaidGroupFrame_Update ) then
|
|
RaidGroupFrame_Update();
|
|
end
|
|
end
|
|
|
|
-- Function for raid options
|
|
function RaidOptionsFrame_UpdatePartyFrames()
|
|
if ( HIDE_PARTY_INTERFACE == "1" and GetNumRaidMembers() > 0) then
|
|
HidePartyFrame();
|
|
else
|
|
HidePartyFrame();
|
|
ShowPartyFrame();
|
|
end
|
|
UpdatePartyMemberBackground();
|
|
end
|
|
|
|
-- Populates Raid Info Data
|
|
function RaidInfoFrame_Update(scrollToSelected)
|
|
RaidInfoFrame_UpdateSelectedIndex();
|
|
|
|
local scrollFrame = RaidInfoScrollFrame;
|
|
local savedInstances = GetNumSavedInstances();
|
|
local instanceName, instanceID, instanceReset, instanceDifficulty, locked, extended, instanceIDMostSig, isRaid, maxPlayers, difficultyName;
|
|
local frameName, frameNameText, frameID, frameReset, width;
|
|
local offset = HybridScrollFrame_GetOffset(scrollFrame);
|
|
local buttons = scrollFrame.buttons;
|
|
local numButtons = #buttons;
|
|
local buttonHeight = buttons[1]:GetHeight();
|
|
|
|
if ( scrollToSelected == true and RaidInfoFrame.selectedIndex ) then --Using == true in case the HybridScrollFrame .update is changed to pass in the parent.
|
|
local button = buttons[RaidInfoFrame.selectedIndex - offset]
|
|
if ( not button or (button:GetTop() > scrollFrame:GetTop()) or (button:GetBottom() < scrollFrame:GetBottom()) ) then
|
|
local scrollFrame = RaidInfoScrollFrame;
|
|
local buttonHeight = scrollFrame.buttons[1]:GetHeight();
|
|
local scrollValue = min(((RaidInfoFrame.selectedIndex - 1) * buttonHeight), scrollFrame.range)
|
|
if ( scrollValue ~= scrollFrame.scrollBar:GetValue() ) then
|
|
scrollFrame.scrollBar:SetValue(scrollValue);
|
|
end
|
|
end
|
|
end
|
|
|
|
offset = HybridScrollFrame_GetOffset(scrollFrame); --May have changed in the previous section to move selected parts into view.
|
|
|
|
local mouseIsOverScrollFrame = scrollFrame:IsVisible() and scrollFrame:IsMouseOver();
|
|
|
|
for i=1, numButtons do
|
|
local frame = buttons[i];
|
|
local index = i + offset;
|
|
|
|
if ( index <= savedInstances) then
|
|
instanceName, instanceID, instanceReset, instanceDifficulty, locked, extended, instanceIDMostSig, isRaid, maxPlayers, difficultyName = GetSavedInstanceInfo(index);
|
|
|
|
frame.instanceID = instanceID;
|
|
frame.longInstanceID = string.format("%x%x", instanceIDMostSig, instanceID);
|
|
frame:SetID(index);
|
|
|
|
if ( RaidInfoFrame.selectedRaidID == frame.longInstanceID ) then
|
|
frame:LockHighlight();
|
|
else
|
|
frame:UnlockHighlight();
|
|
end
|
|
|
|
frame.difficulty:SetText(difficultyName);
|
|
|
|
if ( extended or locked ) then
|
|
frame.reset:SetText(SecondsToTime(instanceReset, true, nil, 3));
|
|
frame.name:SetText(instanceName);
|
|
else
|
|
frame.reset:SetFormattedText("|cff808080%s|r", RAID_INSTANCE_EXPIRES_EXPIRED);
|
|
frame.name:SetFormattedText("|cff808080%s|r", instanceName);
|
|
end
|
|
|
|
if ( extended ) then
|
|
frame.extended:Show();
|
|
else
|
|
frame.extended:Hide();
|
|
end
|
|
|
|
frame:Show();
|
|
|
|
if ( mouseIsOverScrollFrame and frame:IsMouseOver() ) then
|
|
RaidInfoInstance_OnEnter(frame);
|
|
end
|
|
else
|
|
frame:Hide();
|
|
end
|
|
end
|
|
HybridScrollFrame_Update(scrollFrame, savedInstances * buttonHeight, scrollFrame:GetHeight());
|
|
end
|
|
|
|
function RaidInfoScrollFrame_OnLoad(self)
|
|
HybridScrollFrame_OnLoad(self);
|
|
self.update = RaidInfoFrame_Update;
|
|
HybridScrollFrame_CreateButtons(self, "RaidInfoInstanceTemplate");
|
|
end
|
|
|
|
--Makes the button look likes it's being pressed
|
|
function RaidInfoInstance_OnMouseDown(self)
|
|
self.name:SetPoint("TOPLEFT", 7, -12);
|
|
self.reset:SetPoint("TOPRIGHT", 2, -13);
|
|
end
|
|
|
|
function RaidInfoInstance_OnMouseUp(self)
|
|
self.name:SetPoint("TOPLEFT", 5, -10);
|
|
self.reset:SetPoint("TOPRIGHT", 0, -11);
|
|
end
|
|
|
|
function RaidInfoInstance_OnClick(self)
|
|
RaidInfoFrame.selectedRaidID = self.longInstanceID;
|
|
RaidInfoFrame_Update();
|
|
end
|
|
|
|
function RaidInfoInstance_OnEnter(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
GameTooltip:SetText(self.name:GetText());
|
|
GameTooltip:AddLine(self.difficulty:GetText(), HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
GameTooltip:AddLine(format(INSTANCE_ID, self.instanceID), HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
function RaidInfoFrame_UpdateSelectedIndex()
|
|
local savedInstances = GetNumSavedInstances();
|
|
for index=1, savedInstances do
|
|
local instanceName, instanceID, instanceReset, instanceDifficulty, locked, extended, instanceIDMostSig = GetSavedInstanceInfo(index);
|
|
if ( format("%x%x", instanceIDMostSig, instanceID) == RaidInfoFrame.selectedRaidID ) then
|
|
RaidInfoFrame.selectedIndex = index;
|
|
RaidInfoExtendButton:Enable();
|
|
if ( extended ) then
|
|
RaidInfoExtendButton.doExtend = false;
|
|
RaidInfoExtendButton:SetText(UNEXTEND_RAID_LOCK);
|
|
else
|
|
RaidInfoExtendButton.doExtend = true;
|
|
if ( locked ) then
|
|
RaidInfoExtendButton:SetText(EXTEND_RAID_LOCK);
|
|
else
|
|
RaidInfoExtendButton:SetText(REACTIVATE_RAID_LOCK);
|
|
end
|
|
end
|
|
return;
|
|
end
|
|
end
|
|
RaidInfoFrame.selectedIndex = nil;
|
|
RaidInfoExtendButton:Disable();
|
|
end
|
|
|
|
function RaidInfoExtendButton_OnClick(self)
|
|
SetSavedInstanceExtend(RaidInfoFrame.selectedIndex, self.doExtend);
|
|
RequestRaidInfo();
|
|
RaidInfoFrame_Update();
|
|
end
|