init
This commit is contained in:
@@ -0,0 +1,225 @@
|
||||
local E, L = unpack(select(2, ...)); --Import: Engine, Locales
|
||||
local RU = E:GetModule("RaidUtility")
|
||||
local S = E:GetModule("Skins")
|
||||
|
||||
--Lua functions
|
||||
local find = string.find
|
||||
--WoW API / Variables
|
||||
local CreateFrame = CreateFrame
|
||||
local IsInInstance = IsInInstance
|
||||
local GetNumRaidMembers = GetNumRaidMembers
|
||||
local GetNumPartyMembers = GetNumPartyMembers
|
||||
local IsPartyLeader = IsPartyLeader
|
||||
local IsRaidLeader = IsRaidLeader
|
||||
local IsRaidOfficer = IsRaidOfficer
|
||||
local InCombatLockdown = InCombatLockdown
|
||||
local DoReadyCheck = DoReadyCheck
|
||||
local ToggleFriendsFrame = ToggleFriendsFrame
|
||||
|
||||
local PANEL_HEIGHT = 100
|
||||
|
||||
local function CheckRaidStatus()
|
||||
local inInstance, instanceType = IsInInstance()
|
||||
if (((IsRaidLeader() or IsRaidOfficer()) and GetNumRaidMembers() > 0) or (IsPartyLeader() and GetNumPartyMembers() > 0)) and not (inInstance and (instanceType == "pvp" or instanceType == "arena")) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to create buttons in this module
|
||||
function RU:CreateUtilButton(name, parent, template, width, height, point, relativeto, point2, xOfs, yOfs, text, texture)
|
||||
local button = CreateFrame("Button", name, parent, template)
|
||||
button:Width(width)
|
||||
button:Height(height)
|
||||
button:Point(point, relativeto, point2, xOfs, yOfs)
|
||||
S:HandleButton(button)
|
||||
|
||||
if text then
|
||||
button.text = button:CreateFontString(nil, "OVERLAY", button)
|
||||
button.text:FontTemplate()
|
||||
button.text:Point("CENTER", button, "CENTER", 0, -1)
|
||||
button.text:SetJustifyH("CENTER")
|
||||
button.text:SetText(text)
|
||||
button:SetFontString(button.text)
|
||||
elseif texture then
|
||||
button.texture = button:CreateTexture(nil, "OVERLAY", nil)
|
||||
button.texture:SetTexture(texture)
|
||||
button.texture:Point("TOPLEFT", button, "TOPLEFT", E.mult, -E.mult)
|
||||
button.texture:Point("BOTTOMRIGHT", button, "BOTTOMRIGHT", -E.mult, E.mult)
|
||||
end
|
||||
end
|
||||
|
||||
function RU:ToggleRaidUtil(event)
|
||||
if InCombatLockdown() then
|
||||
self:RegisterEvent("PLAYER_REGEN_ENABLED", "ToggleRaidUtil")
|
||||
return
|
||||
end
|
||||
|
||||
if CheckRaidStatus() then
|
||||
if RaidUtilityPanel.toggled == true then
|
||||
RaidUtility_ShowButton:Hide()
|
||||
RaidUtilityPanel:Show()
|
||||
else
|
||||
RaidUtility_ShowButton:Show()
|
||||
RaidUtilityPanel:Hide()
|
||||
end
|
||||
else
|
||||
RaidUtility_ShowButton:Hide()
|
||||
RaidUtilityPanel:Hide()
|
||||
end
|
||||
|
||||
if event == "PLAYER_REGEN_ENABLED" then
|
||||
self:UnregisterEvent("PLAYER_REGEN_ENABLED", "ToggleRaidUtil")
|
||||
end
|
||||
end
|
||||
|
||||
function RU:Initialize()
|
||||
if not E.private.general.raidUtility then return end
|
||||
self.Initialized = true
|
||||
|
||||
--Create main frame
|
||||
local RaidUtilityPanel = CreateFrame("Frame", "RaidUtilityPanel", E.UIParent, "SecureHandlerClickTemplate")
|
||||
RaidUtilityPanel:SetTemplate("Transparent")
|
||||
RaidUtilityPanel:Width(230)
|
||||
RaidUtilityPanel:Height(PANEL_HEIGHT)
|
||||
RaidUtilityPanel:Point("TOP", E.UIParent, "TOP", -400, 1)
|
||||
RaidUtilityPanel:SetFrameLevel(3)
|
||||
RaidUtilityPanel.toggled = false
|
||||
RaidUtilityPanel:SetFrameStrata("HIGH")
|
||||
|
||||
self:CreateUtilButton("RaidUtility_ShowButton", E.UIParent, "SecureHandlerClickTemplate", 136, 18, "TOP", E.UIParent, "TOP", -400, E.Border, RAID_CONTROL, nil)
|
||||
RaidUtility_ShowButton:SetFrameRef("RaidUtilityPanel", RaidUtilityPanel)
|
||||
RaidUtility_ShowButton:SetAttribute("_onclick", ([=[
|
||||
local raidUtil = self:GetFrameRef("RaidUtilityPanel")
|
||||
local closeButton = raidUtil:GetFrameRef("RaidUtility_CloseButton")
|
||||
|
||||
self:Hide()
|
||||
raidUtil:Show()
|
||||
|
||||
local point = self:GetPoint()
|
||||
local raidUtilPoint, closeButtonPoint, yOffset
|
||||
|
||||
if string.find(point, "BOTTOM") then
|
||||
raidUtilPoint = "BOTTOM"
|
||||
closeButtonPoint = "TOP"
|
||||
yOffset = 1
|
||||
else
|
||||
raidUtilPoint = "TOP"
|
||||
closeButtonPoint = "BOTTOM"
|
||||
yOffset = -1
|
||||
end
|
||||
|
||||
yOffset = yOffset * (tonumber(%d))
|
||||
|
||||
raidUtil:ClearAllPoints()
|
||||
closeButton:ClearAllPoints()
|
||||
raidUtil:SetPoint(raidUtilPoint, self, raidUtilPoint)
|
||||
closeButton:SetPoint(raidUtilPoint, raidUtil, closeButtonPoint, 0, yOffset)
|
||||
]=]):format(-E.Border + E.Spacing * 3))
|
||||
RaidUtility_ShowButton:SetScript("OnMouseUp", function()
|
||||
RaidUtilityPanel.toggled = true
|
||||
end)
|
||||
RaidUtility_ShowButton:SetMovable(true)
|
||||
RaidUtility_ShowButton:SetClampedToScreen(true)
|
||||
RaidUtility_ShowButton:SetClampRectInsets(0, 0, -1, 1)
|
||||
RaidUtility_ShowButton:RegisterForDrag("RightButton")
|
||||
RaidUtility_ShowButton:SetFrameStrata("HIGH")
|
||||
RaidUtility_ShowButton:SetScript("OnDragStart", function(self)
|
||||
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
||||
self:StartMoving()
|
||||
end)
|
||||
|
||||
RaidUtility_ShowButton:SetScript("OnDragStop", function(self)
|
||||
self:StopMovingOrSizing()
|
||||
local point = self:GetPoint()
|
||||
local xOffset = self:GetCenter()
|
||||
local screenWidth = E.UIParent:GetWidth() / 2
|
||||
xOffset = xOffset - screenWidth
|
||||
self:ClearAllPoints()
|
||||
if find(point, "BOTTOM") then
|
||||
self:Point("BOTTOM", E.UIParent, "BOTTOM", xOffset, -1)
|
||||
else
|
||||
self:Point("TOP", E.UIParent, "TOP", xOffset, 1)
|
||||
end
|
||||
end)
|
||||
|
||||
self:CreateUtilButton("RaidUtility_CloseButton", RaidUtilityPanel, "SecureHandlerClickTemplate", 136, 18, "TOP", RaidUtilityPanel, "BOTTOM", 0, -1, CLOSE, nil)
|
||||
RaidUtility_CloseButton:SetFrameRef("RaidUtility_ShowButton", RaidUtility_ShowButton)
|
||||
RaidUtility_CloseButton:SetAttribute("_onclick", [=[self:GetParent():Hide(); self:GetFrameRef("RaidUtility_ShowButton"):Show();]=])
|
||||
RaidUtility_CloseButton:SetScript("OnMouseUp", function() RaidUtilityPanel.toggled = false end)
|
||||
RaidUtilityPanel:SetFrameRef("RaidUtility_CloseButton", RaidUtility_CloseButton)
|
||||
|
||||
self:CreateUtilButton("DisbandRaidButton", RaidUtilityPanel, nil, RaidUtilityPanel:GetWidth() * 0.8, 18, "TOP", RaidUtilityPanel, "TOP", 0, -5, L["Disband Group"], nil)
|
||||
DisbandRaidButton:SetScript("OnMouseUp", function()
|
||||
if CheckRaidStatus() then
|
||||
E:StaticPopup_Show("DISBAND_RAID")
|
||||
end
|
||||
end)
|
||||
|
||||
self:CreateUtilButton("MainTankButton", RaidUtilityPanel, "SecureActionButtonTemplate", (DisbandRaidButton:GetWidth() / 2) - 2, 18, "TOPLEFT", DisbandRaidButton, "BOTTOMLEFT", 0, -5, MAINTANK, nil)
|
||||
MainTankButton:SetAttribute("type", "maintank")
|
||||
MainTankButton:SetAttribute("unit", "target")
|
||||
MainTankButton:SetAttribute("action", "toggle")
|
||||
|
||||
self:CreateUtilButton("MainAssistButton", RaidUtilityPanel, "SecureActionButtonTemplate", (DisbandRaidButton:GetWidth() / 2) - 2, 18, "TOPRIGHT", DisbandRaidButton, "BOTTOMRIGHT", 0, -5, MAINASSIST, nil)
|
||||
MainAssistButton:SetAttribute("type", "mainassist")
|
||||
MainAssistButton:SetAttribute("unit", "target")
|
||||
MainAssistButton:SetAttribute("action", "toggle")
|
||||
|
||||
self:CreateUtilButton("ReadyCheckButton", RaidUtilityPanel, nil, RaidUtilityPanel:GetWidth() * 0.8, 18, "TOPLEFT", MainTankButton, "BOTTOMLEFT", 0, -5, READY_CHECK, nil)
|
||||
ReadyCheckButton:SetScript("OnMouseUp", function()
|
||||
if CheckRaidStatus() then
|
||||
DoReadyCheck()
|
||||
end
|
||||
end)
|
||||
ReadyCheckButton:SetScript("OnEvent", function(btn)
|
||||
if not (IsRaidLeader("player") or IsRaidOfficer("player")) then
|
||||
btn:Disable()
|
||||
else
|
||||
btn:Enable()
|
||||
end
|
||||
end)
|
||||
ReadyCheckButton:RegisterEvent("RAID_ROSTER_UPDATE")
|
||||
ReadyCheckButton:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
||||
ReadyCheckButton:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
self:CreateUtilButton("RaidControlButton", RaidUtilityPanel, nil, MainTankButton:GetWidth(), 18, "TOPLEFT", ReadyCheckButton, "BOTTOMLEFT", 0, -5, L["Raid Menu"], nil)
|
||||
RaidControlButton:SetScript("OnMouseUp", function()
|
||||
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
||||
ToggleFriendsFrame(5)
|
||||
end)
|
||||
|
||||
self:CreateUtilButton("ConvertRaidButton", RaidUtilityPanel, nil, MainAssistButton:GetWidth(), 18, "TOPRIGHT", ReadyCheckButton, "BOTTOMRIGHT", 0, -5, CONVERT_TO_RAID, nil)
|
||||
ConvertRaidButton:SetScript("OnMouseUp", function()
|
||||
if CheckRaidStatus() then
|
||||
ConvertToRaid()
|
||||
SetLootMethod("master", "player")
|
||||
end
|
||||
end)
|
||||
ConvertRaidButton:SetScript("OnEvent", function(btn)
|
||||
if GetNumRaidMembers() == 0 and GetNumPartyMembers() > 0 and IsPartyLeader() then
|
||||
if not btn:IsShown() then
|
||||
RaidControlButton:Width(MainAssistButton:GetWidth())
|
||||
btn:Show()
|
||||
end
|
||||
elseif btn:IsShown() then
|
||||
RaidControlButton:Width(DisbandRaidButton:GetWidth())
|
||||
btn:Hide()
|
||||
end
|
||||
end)
|
||||
ConvertRaidButton:RegisterEvent("RAID_ROSTER_UPDATE")
|
||||
ConvertRaidButton:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
||||
ConvertRaidButton:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
--Automatically show/hide the frame if we have RaidLeader or RaidOfficer
|
||||
self:RegisterEvent("RAID_ROSTER_UPDATE", "ToggleRaidUtil")
|
||||
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ToggleRaidUtil")
|
||||
self:RegisterEvent("PARTY_MEMBERS_CHANGED", "ToggleRaidUtil")
|
||||
end
|
||||
|
||||
local function InitializeCallback()
|
||||
RU:Initialize()
|
||||
end
|
||||
|
||||
E:RegisterInitialModule(RU:GetName(), InitializeCallback)
|
||||
Reference in New Issue
Block a user