Quantcast
--[[
##############################################################################
_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
 ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
	______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
	 _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
	  __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
	   _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
		___\///////////___________\///___________\/////////_____\///////////_#
##############################################################################
S U P E R - V I L L A I N - U I   By: Munglunch                              #
##############################################################################

QUEST TRACKER BUTTON:

Originally "ExtraQuestButton" by p3lim,
modified/minimally re-written for SVUI by Munglunch

##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack    = _G.unpack;
local select    = _G.select;
local pairs     = _G.pairs;
local ipairs    = _G.ipairs;
local type      = _G.type;
local error     = _G.error;
local pcall     = _G.pcall;
local tostring  = _G.tostring;
local tonumber  = _G.tonumber;
local tinsert 	= _G.tinsert;
local string 	= _G.string;
local math 		= _G.math;
local table 	= _G.table;
--[[ STRING METHODS ]]--
local format = string.format;
--[[ MATH METHODS ]]--
local abs, ceil, floor, round = math.abs, math.ceil, math.floor, math.round;
--[[ TABLE METHODS ]]--
local tremove, twipe = table.remove, table.wipe;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SV = select(2, ...)
local L = SV.L
local LSM = LibStub("LibSharedMedia-3.0")
local MOD = SV.SVQuest;
--[[
##########################################################
LOCALS
##########################################################
]]--
local QuestInZone = {
	[14108] = 541,
	[13998] = 11,
	[25798] = 61,
	[25799] = 61,
	[25112] = 161,
	[25111] = 161,
	[24735] = 201,
};
--[[
##########################################################
BUTTON INTERNALS
##########################################################
]]--
local UpdateButton = function(self)
	local shortestDistance = 62500;
	local currentAreaID = GetCurrentMapAreaID()
	local closestQuest, closestLink, closestTexture, closestLevel, closestCount, closestIndex, closestDuration, closestExpiration, closestID, closestComplete;

	for i = 1, GetNumQuestWatches() do
		local questID, _, questLogIndex, numObjectives, requiredMoney, isComplete, startEvent, isAutoComplete, failureTime, timeElapsed, questType, isTask, isStory, isOnMap, hasLocalPOI = GetQuestWatchInfo(i);
		if(questID) then
			local title, level, suggestedGroup = GetQuestLogTitle(questLogIndex)
			if(QuestHasPOIInfo(questID)) then
				local link, texture, _, showCompleted = GetQuestLogSpecialItemInfo(questLogIndex)
				local areaID = QuestInZone[questID]
				if(areaID and (areaID == currentAreaID)) then
					closestQuest = title
					closestID = questID
					closestLink = link
					closestTexture = texture
					closestLevel = level
					closestCount = numObjectives
					closestIndex = questLogIndex
					closestDuration = failureTime
					closestExpiration = timeElapsed
					closestComplete = isComplete
				elseif(onContinent and (distanceSq < shortestDistance)) then
					shortestDistance = distanceSq
					closestQuest = title
					closestID = questID
					closestLink = link
					closestTexture = texture
					closestLevel = level
					closestCount = numObjectives
					closestIndex = questLogIndex
					closestDuration = failureTime
					closestExpiration = timeElapsed
					closestComplete = isComplete
				end
			end
		end
	end

	if(closestLink and (MOD.CurrentQuest == 0)) then
		self.CurrentQuest = closestIndex;
		self:SetAbility(closestLink, closestTexture, closestQuest, closestLevel, closestTexture, closestID, closestIndex, closestCount, closestDuration, closestExpiration, closestComplete);
		self.Artwork:SetTexture([[Interface\ExtraButton\Smash]]);
	elseif(self:IsShown() and (self.CurrentQuest ~= MOD.CurrentQuest)) then
		self.CurrentQuest = 0;
		self.Artwork:SetTexture([[Interface\AddOns\SVUI\assets\artwork\Template\EMPTY]]);
		self:RemoveAbility();
	end
end
--[[
##########################################################
PACKAGE CALL
##########################################################
]]--
function MOD:InitializeQuestItem()
	SV.SuperButton.ItemBlackList[113191] = true
	SV.SuperButton.ItemBlackList[110799] = true
	SV.SuperButton.ItemBlackList[109164] = true

	local Button = SV.SuperButton:AddItem("SVUI_QuestAutoButton", UpdateButton, nil, 'SVUI_QUESTITEM');
	Button:RegisterEvent('UPDATE_EXTRA_ACTIONBAR')
	Button:RegisterEvent('BAG_UPDATE_COOLDOWN')
	Button:RegisterEvent('BAG_UPDATE_DELAYED')
	Button:RegisterEvent('WORLD_MAP_UPDATE')
	Button:RegisterEvent('QUEST_LOG_UPDATE')
	Button:RegisterEvent('QUEST_POI_UPDATE')

	self.QuestItem = Button
end