Back to Home

ESO Lua File v100019

ingame/tutorial/tutorial.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
TUTORIAL_SYSTEM = nil
local function AreTutorialsEnabled()
    return GetSetting_Bool(SETTING_TYPE_TUTORIAL, TUTORIAL_ENABLED_SETTING_ID)
end
ZO_Tutorials = ZO_Object:Subclass()
function ZO_Tutorials:New(...)
    local tutorial = ZO_Object.New(self)
    tutorial:Initialize(...)
    return tutorial
end
function ZO_Tutorials:Initialize(control)
    self.control = control
    self.tutorialHandlers = {}
    self.tutorialQueue = {}
    -- Events that have no TutorialTriggerHandler
    control:RegisterForEvent(EVENT_DISPLAY_TUTORIAL, function(eventCode, ...) self:DisplayOrQueueTutorial(...) end)
    control:RegisterForEvent(EVENT_REMOVE_TUTORIAL, function(eventCode, ...) self:OnRemoveTutorial(...) end)
    control:RegisterForEvent(EVENT_TUTORIAL_SYSTEM_ENABLED_STATE_CHANGED, function(eventCode, enabled) self:OnTutorialEnabledStateChanged(enabled) end)
    do
        local triggerHandlers = ZO_Tutorial_GetTriggerHandlers()
        local function OnTriggeredEvent(eventCode, ...)
            local tutorialTypeToTrigger = triggerHandlers[eventCode](...)
            if tutorialTypeToTrigger then
                TriggerTutorial(tutorialTypeToTrigger)
            end
        end
        -- Unfortunate events that overlap with tutorial triggers
        local hasPlayerActivatedEvent = triggerHandlers[EVENT_PLAYER_ACTIVATED] ~= nil
        control:RegisterForEvent(EVENT_PLAYER_ACTIVATED, function(...)
            if hasPlayerActivatedEvent then
                OnTriggeredEvent(...)
            end
            -- Dequeue tutorial display events
            -- I use a while loop just in case the list changes while I'm calling the tutorial function
            while #self.tutorialQueue > 0 do 
                self.tutorialQueue[1]()
                table.remove(self.tutorialQueue, 1)
            end
        end)
        for event in pairs(triggerHandlers) do
            if event ~= EVENT_PLAYER_ACTIVATED then --avoid ones we've already registered
                control:RegisterForEvent(event, OnTriggeredEvent)
            end
        end
    end
    self:AddTutorialHandler(ZO_BriefHudTutorial:New(control))
    self:AddTutorialHandler(ZO_HudInfoTutorial:New(control))
    self:AddTutorialHandler(ZO_UiInfoBoxTutorial:New(control))
end
function ZO_Tutorials:DisplayOrQueueTutorial(tutorialIndex, priority)
    local currentScene = SCENE_MANAGER:GetCurrentScene()
    if currentScene == nil then
       -- Queue Tutorial
       self.tutorialQueue[#self.tutorialQueue + 1] = function() self:OnDisplayTutorial(tutorialIndex, priority) end
    else
        self:OnDisplayTutorial(tutorialIndex, priority)
    end
end
function ZO_Tutorials:AddTutorialHandler(handler)
    self.tutorialHandlers[handler:GetTutorialType()] = handler
end
function ZO_Tutorials:SuppressTutorialType(tutorialType, suppress, reason)
    self.tutorialHandlers[tutorialType]:SuppressTutorials(suppress, reason)
end
function ZO_Tutorials:OnTutorialEnabledStateChanged(enabled)
    if not enabled then
        for type, handler in pairs(self.tutorialHandlers) do
            handler:ClearAll()
        end
    end
end
function ZO_Tutorials:ForceRemoveAll()
    for type, handler in pairs(self.tutorialHandlers) do
        if handler:GetCurrentlyDisplayedTutorialIndex() then
        end
    end
end
function ZO_Tutorials:OnDisplayTutorial(tutorialIndex)
    local tutorialType = GetTutorialType(tutorialIndex)
    if self.tutorialHandlers[tutorialType] then
        local _, _, priority = GetTutorialInfo(tutorialIndex)
        self.tutorialHandlers[tutorialType]:OnDisplayTutorial(tutorialIndex, priority)
    end
end
function ZO_Tutorials:OnRemoveTutorial(tutorialIndex)
    local tutorialType = GetTutorialType(tutorialIndex)
    if self.tutorialHandlers[tutorialType] then
        self.tutorialHandlers[tutorialType]:OnRemoveTutorial(tutorialIndex)
    end
end
function ZO_Tutorials:ShowHelp()
    for type, handler in pairs(self.tutorialHandlers) do
        if handler:ShowHelp() then
            return true
        end
    end
    return false
end
    TUTORIAL_SYSTEM = ZO_Tutorials:New(control)
end