You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
4.7 KiB
201 lines
4.7 KiB
WarpDeplete = LibStub("AceAddon-3.0"):NewAddon(
|
|
"WarpDeplete",
|
|
"AceComm-3.0",
|
|
"AceConsole-3.0",
|
|
"AceEvent-3.0",
|
|
"AceTimer-3.0"
|
|
)
|
|
|
|
WarpDeplete.L = LibStub("AceLocale-3.0"):GetLocale("WarpDeplete", true)
|
|
local L = WarpDeplete.L
|
|
|
|
WarpDeplete.Util = {}
|
|
local Util = WarpDeplete.Util
|
|
|
|
WarpDeplete.LSM = LibStub("LibSharedMedia-3.0")
|
|
WarpDeplete.Glow = LibStub("LibCustomGlow-1.0")
|
|
|
|
WarpDeplete.defaultChallengeState = {
|
|
demoModeActive = false,
|
|
inChallenge = false,
|
|
challengeCompleted = false
|
|
}
|
|
|
|
WarpDeplete.defaultForcesState = {
|
|
pullCount = 0,
|
|
currentCount = 0,
|
|
totalCount = 100,
|
|
|
|
pullPercent = 0,
|
|
currentPercent = 0,
|
|
|
|
currentPull = {},
|
|
|
|
prideGlowActive = false,
|
|
completed = false,
|
|
completedTime = 0
|
|
}
|
|
|
|
WarpDeplete.defaultTimerState = {
|
|
startTime = nil,
|
|
isBlizzardTimer = false,
|
|
running = false,
|
|
deaths = 0,
|
|
deathDetails = {},
|
|
|
|
current = 0,
|
|
remaining = 0,
|
|
limit = 0,
|
|
startOffset = 0,
|
|
limits = {0, 0, 0},
|
|
|
|
plusTwo = 0,
|
|
plusThree = 0
|
|
}
|
|
|
|
WarpDeplete.defaultObjectivesState = {}
|
|
|
|
WarpDeplete.defaultKeyDetailsState = {
|
|
level = 0,
|
|
affixes = {}
|
|
}
|
|
|
|
-- Check if Kaliel's Tracker is loaded, since it creates a
|
|
-- background frame for the objective window that will not be
|
|
-- hidden if only the objective window itself is hidden.
|
|
local KT = LibStub("AceAddon-3.0"):GetAddon("!KalielsTracker", true)
|
|
|
|
function WarpDeplete:OnInitialize()
|
|
local frames = {}
|
|
|
|
frames.root = CreateFrame("Frame", "WarpDepleteFrame", UIParent)
|
|
frames.bars = CreateFrame("Frame", "WarpDepleteBars", frames.root)
|
|
frames.deathsTooltip = CreateFrame("Frame", "WarpDepleteDeathsTooltip", frames.root)
|
|
|
|
self.frames = frames
|
|
end
|
|
|
|
function WarpDeplete:OnEnable()
|
|
self.forcesState = Util.copy(self.defaultForcesState)
|
|
self.timerState = Util.copy(self.defaultTimerState)
|
|
self.challengeState = Util.copy(self.defaultChallengeState)
|
|
self.objectivesState = Util.copy(self.defaultObjectivesState)
|
|
self.keyDetailsState = Util.copy(self.defaultKeyDetailsState)
|
|
|
|
self:InitOptions()
|
|
self:InitChatCommands()
|
|
self:InitDisplay()
|
|
|
|
self:RegisterGlobalEvents()
|
|
self:RegisterComms()
|
|
self:Hide()
|
|
|
|
if not self.db.global.mdtAlertShown and not MDT then
|
|
self.db.global.mdtAlertShown = true
|
|
self:ShowMDTAlert()
|
|
end
|
|
end
|
|
|
|
function WarpDeplete:ShowMDTAlert()
|
|
Util.showAlert(
|
|
"MDT_NOT_FOUND",
|
|
L["Mythic Dungeon Tools (MDT) is not installed."].."\n\n" ..
|
|
L["WarpDeplete will not show you Pride spawn alert or display the count for you current pull."]
|
|
.. " \n\n" .. L["Install MDT to enable this functionality."])
|
|
end
|
|
|
|
function WarpDeplete:OnDisable()
|
|
end
|
|
|
|
function WarpDeplete:EnableDemoMode()
|
|
if self.challengeState.inChallenge then
|
|
self:Print(L["Can't enable demo mode while in an active challenge!"])
|
|
return
|
|
end
|
|
|
|
if self.challengeState.demoModeActive then return end
|
|
|
|
self:ResetState()
|
|
self.challengeState.demoModeActive = true
|
|
|
|
local objectives = {}
|
|
for i = 1, 5 do
|
|
objectives[i] = { name = L["Test Boss Name"] .. " " .. i }
|
|
|
|
if i < 3 then
|
|
objectives[i].time = 520 * i
|
|
end
|
|
end
|
|
|
|
self:SetObjectives(objectives)
|
|
self:SetKeyDetails(30, {L["Tyrannical"], L["Bolstering"], L["Spiteful"], L["Prideful"]})
|
|
|
|
self:SetTimerLimit(35 * 60)
|
|
self:SetTimerRemaining(20 * 60)
|
|
self:SetForcesCurrent(34)
|
|
self:SetForcesPull(7)
|
|
self:SetDeaths(3)
|
|
|
|
local classTable = {
|
|
"SHAMAN",
|
|
"DEMONHUNTER",
|
|
"MONK",
|
|
"DRUID",
|
|
"MAGE"
|
|
}
|
|
|
|
local nameTable = {
|
|
"GroupMember1",
|
|
"GroupMember2",
|
|
"GroupMember3",
|
|
"GroupMember4",
|
|
"GroupMember5",
|
|
}
|
|
|
|
for i = 1, 30 do
|
|
local class = classTable[(i % #classTable) + 1]
|
|
local name = nameTable[(i % #nameTable) + 1]
|
|
local time = i * 7
|
|
|
|
self:AddDeathDetails(time, name, class)
|
|
end
|
|
|
|
self:Show()
|
|
end
|
|
|
|
function WarpDeplete:DisableDemoMode()
|
|
if not self.challengeState.demoModeActive then return end
|
|
self.challengeState.demoModeActive = false
|
|
|
|
self:Hide()
|
|
self:ResetState()
|
|
end
|
|
|
|
function WarpDeplete:Show()
|
|
self.frames.root:Show()
|
|
self:UpdateLayout()
|
|
ObjectiveTrackerFrame:Hide()
|
|
if KT ~= nil then
|
|
KT.frame:Hide()
|
|
end
|
|
end
|
|
|
|
function WarpDeplete:Hide()
|
|
self.frames.root:Hide()
|
|
if KT ~= nil then
|
|
KT.frame:Show()
|
|
end
|
|
ObjectiveTrackerFrame:Show()
|
|
end
|
|
|
|
function WarpDeplete:ResetState()
|
|
self:PrintDebug("Resetting state")
|
|
|
|
self.forcesState = Util.copy(self.defaultForcesState)
|
|
self.timerState = Util.copy(self.defaultTimerState)
|
|
self.challengeState = Util.copy(self.defaultChallengeState)
|
|
self.objectivesState = Util.copy(self.defaultObjectivesState)
|
|
self.keyDetailsState = Util.copy(self.defaultKeyDetailsState)
|
|
|
|
self:HidePrideGlow()
|
|
end
|
|
|