view ObjectiveEvents.lua @ 7:5301c68f28d8

TrackerBlock - use IsModifiedClick function to determine appropriate OnClick actions - handle 'CHATLINK' modifier - handle 'TOGGLEQUESTWATCH' modifier TrackerBlockObjectives - use a generic framework to manage frame creation for various criteria tracker types: - ProgressBar when Blizzard flag data indicates so - skip when Blizzard flag data indicates so - DynamicText otherwise - events related to the criteria are registered in the criteria frame, and unregistered when the frame is hidden, either by destruction of its parent or completion
author Nenue
date Fri, 01 Apr 2016 12:27:05 -0400
parents 589de8ea05b9
children 7923243ae972
line wrap: on
line source
--- ${PACKAGE_NAME}
-- @file-author@
-- @project-revision@ @project-hash@
-- @file-revision@ @file-hash@
-- Created: 3/30/2016 1:23 AM
local B = select(2,...).frame
local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
local print = B.print('ObjectiveEvent')

local isHooked
local SmallEvents = {
  QUEST_ACCEPTED = 'OnQuestAccepted',
  QUEST_REMOVED = 'OnQuestRemoved'
}

local HandlerEvents = {
  QUEST_ACCEPTED = mod.Quest,
  QUEST_REMOVED = mod.Quest,
  QUEST_WATCH_LIST_CHANGED = mod.Quest,
  SUPER_TRACKED_QUEST_CHANGED = mod.Quest,
  QUEST_LOG_UPDATE = mod.Quest,
  TRACKED_ACHIEVEMENT_LIST_CHANGED = mod.Cheevs,
  TRACKED_ACHIEVEMENT_UPDATE = mod.Cheevs
}

local BlizzHooks = {
  ['AddQuestWatch'] = 'AddQuestWatch',
  ['RemoveQuestWatch'] = 'RemoveQuestWatch',
  ['AbandonQuest'] = 'AbandonQuest',
  ['AcknowledgeAutoAcceptQuest'] = 'AcknowledgeAutoAcceptQuest',
  ['AddAutoQuestPopUp'] = 'AddAutoQuestPopUp'
}

mod.SetEvents = function()

  for event, _ in pairs(SmallEvents) do
    mod:RegisterEvent(event)
  end

  for event, _ in pairs(HandlerEvents) do
    mod:RegisterEvent(event)
  end
  mod:SetScript('OnEvent', mod.OnEvent)


  if not isHooked then
    VeneerData.CallLog = {}
    isHooked = true
    for blizzFunc, veneerFunc in pairs(BlizzHooks) do
      if mod[veneerFunc] then
        hooksecurefunc(blizzFunc, mod[veneerFunc])
      else
        hooksecurefunc(blizzFunc, function(...)
          print('catching', blizzFunc, ...)
          tinsert(VeneerData.CallLog, {blizzFunc, ...})
        end)
      end
    end

  end
end

function mod:OnEvent (event, ...)
  local isHandled
  if SmallEvents[event] then
    print('|cFF00FF00'..SmallEvents[event]..'(' ..event..'|r', ...)
    mod[SmallEvents[event]](event, ...)
    isHandled = true
  end
  if HandlerEvents[event] then
    print('|cFF0088FF'..event..'|r wrapper update')
    mod.UpdateWrapper()
    isHandled = true
  end
  if not isHandled then
    print('|cFFFF4400'..event..'|r', ...)
  end
end

--------------------------------------------------------------------
--- Events that are handled by Blizzard_ObjectiveTracker
--------------------------------------------------------------------
print(mod:GetName())
mod.OnQuestAccepted = function(_, questLogIndex, questID)
  AddQuestWatch(questLogIndex)
  SetSuperTrackedQuestID(questID)
end

mod.OnQuestComplete = function(_, questLogIndex, questID)
  QuestPOIUpdateIcons()
end

mod.OnQuestFinished = function(_, questLogIndex, questID)
  mod.TrackClosest()
  RemoveQuestWatch(questLogIndex)
end


mod.OnQuestRemoved = function(_, questLogIndex, questID)

  mod.UpdateWrapper()

end

mod.OnQuestFromLocation = function(event) end

-------------------------------------------------------------------
--- Function hooks for BlizzUI compatibility
-------------------------------------------------------------------
mod.AddQuestWatch = function(questID)
  mod.UpdateWrapper()
end

mod.RemoveQuestWatch = function(questIndex)
  mod.UpdateWrapper()
end

mod.AcceptQuest = function()
end

mod.AbandonQuest = function()
end

mod.TurnInQuest = function()
end