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.

138 lines
4.0 KiB

local _, L = ...
local Events, API = L.frame, ImmersionAPI
----------------------------------
-- Events
----------------------------------
function Events:GOSSIP_SHOW(customGossipHandler)
self:HandleGossipOpenEvent(customGossipHandler)
end
function Events:GOSSIP_CLOSED(...)
API:CloseGossip(true, ...)
self:PlayOutro()
L.ClickedTitleCache = nil
end
function Events:QUEST_GREETING(...)
self:PlayIntro('QUEST_GREETING')
self:UpdateTalkingHead(API:GetUnitName('questnpc') or API:GetUnitName('npc'), API:GetGreetingText(), 'AvailableQuest')
end
function Events:QUEST_PROGRESS(...) -- special case, doesn't use QuestInfo
self:PlayIntro('QUEST_PROGRESS')
self:AddHint('CROSS', CONTINUE)
self:ToggleHintState('CROSS', API:IsQuestCompletable())
self:UpdateTalkingHead(API:GetTitleText(), API:GetProgressText(), API:IsQuestCompletable() and 'ActiveQuest' or 'IncompleteQuest')
local elements = self.TalkBox.Elements
local hasItems = elements:ShowProgress('Stone')
elements:UpdateBoundaries()
if hasItems then
local width, height = elements.Progress:GetSize()
-- Extra: 32 padding + 8 offset from talkbox + 8 px bottom offset
self.TalkBox:SetExtraOffset((height + 48) * L('elementscale'))
return
end
self:ResetElements()
end
function Events:QUEST_COMPLETE(...)
self:PlayIntro('QUEST_COMPLETE')
self:UpdateTalkingHead(API:GetTitleText(), API:GetRewardText(), 'ActiveQuest')
self:AddQuestInfo('QUEST_REWARD')
self:AddHint('CROSS', COMPLETE_QUEST)
end
function Events:QUEST_FINISHED(...)
API:CloseQuest(true)
self:PlayOutro()
-- if self:IsGossipAvailable(true) then
-- self:OnEvent('GOSSIP_SHOW')
-- self.TitleButtons:OnEvent('GOSSIP_SHOW')
-- end
end
function Events:QUEST_DETAIL(...)
if self:IsQuestAutoAccepted(...) then
self:PlayOutro()
return
end
self:PlayIntro('QUEST_DETAIL')
self:UpdateTalkingHead(API:GetTitleText(), API:GetQuestText(), 'AvailableQuest')
self:AddQuestInfo('QUEST_DETAIL')
self:AddHint('CROSS', ACCEPT)
end
function Events:QUEST_ITEM_UPDATE()
local questEvent = (self.lastEvent ~= 'QUEST_ITEM_UPDATE') and self.lastEvent or self.questEvent
self.questEvent = questEvent
if questEvent and self[questEvent] then
self[questEvent](self)
return questEvent
end
end
function Events:ITEM_TEXT_BEGIN()
local title = ItemTextGetItem()
local creator = ItemTextGetCreator()
if creator then
title = title .. ' (' .. FROM .. ' ' .. creator .. ')'
end
DoEmote('read')
self:RegisterEvent('PLAYER_STARTED_MOVING')
self:PlayIntro('ITEM_TEXT_BEGIN')
self:UpdateTalkingHead(title, '', 'TrainerGossip', 'player')
end
function Events:ITEM_TEXT_READY()
-- special case: pages need to be concatened together before displaying them.
-- each new page re-triggers this event, so keep changing page until we run out.
self.itemText = (self.itemText or '') .. '\n' .. (ItemTextGetText() or '')
if ItemTextHasNextPage() then
ItemTextNextPage()
return
end
-- set text directly instead of updating talking head
self.TalkBox.TextFrame.Text:SetText(self.itemText)
end
function Events:ITEM_TEXT_CLOSED()
local time = GetTime()
if not self.readEmoteCancelled and ( self.lastTextClosed ~= time ) then
DoEmote('read')
end
self.lastTextClosed = time
self.readEmoteCancelled = nil
self.itemText = nil
self:UnregisterEvent('PLAYER_STARTED_MOVING')
self:PlayOutro()
end
function Events:PLAYER_STARTED_MOVING()
self.readEmoteCancelled = true
return 'ITEM_TEXT_READY'
end
function Events:NAME_PLATE_UNIT_ADDED()
self.TalkBox:UpdateNameplateAnchor()
return self.lastEvent
end
function Events:NAME_PLATE_UNIT_REMOVED()
self.TalkBox:UpdateNameplateAnchor()
return self.lastEvent
end
function Events:SUPER_TRACKING_CHANGED()
self:PlaySuperTrackedQuestToast(ImmersionAPI:GetSuperTrackedQuestID())
return self.lastEvent
end
function Events:PLAYER_INTERACTION_MANAGER_FRAME_SHOW(type)
if API:ShouldCloseOnInteraction(type) then
self:ForceClose(false)
end
end