Back to Home

ESO Lua File v101035

internalingame/tutorial/tutorial_manager.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
-- Tutorial types that should neither fire TriggeredTutorialChanged callbacks nor affect TUTORIAL_MANAGER:IsTutorialTriggered()
-- For now this works with no additional logic required for tutorial as they are hidden because Pointer Box tutorials do not fire the hidden event.
local UNTRACKED_TUTORIAL_TYPES = ZO_CreateSetFromArguments(TUTORIAL_TYPE_POINTER_BOX, TUTORIAL_TYPE_HUD_BRIEF, TUTORIAL_TYPE_HUD_INFO_BOX)
local Tutorial_Manager = ZO_InitializingCallbackObject:Subclass()
function Tutorial_Manager:Initialize()
    self.triggeredTutorial = false
    local function OnTutorialHidden(eventCode, ...)
        self:OnTutorialHidden(...)
    end
    EVENT_MANAGER:RegisterForEvent("Tutorial_Manager", EVENT_TUTORIAL_HIDDEN, OnTutorialHidden)
end
function Tutorial_Manager:CanShowTutorial(tutorialId)
    return CanTutorialBeSeen(tutorialId) and (not HasSeenTutorial(tutorialId))
end
function Tutorial_Manager:CanTutorialTriggerFire(tutorialTrigger)
    local tutorialId = GetTutorialId(tutorialTrigger)
    return self:CanShowTutorial(tutorialId)
end
function Tutorial_Manager:RemoveTutorialByTrigger(tutorialTrigger)
    RemoveTutorial(tutorialTrigger)
end
function Tutorial_Manager:IsTutorialTriggered()
    return self.triggeredTutorial
end
function Tutorial_Manager:OnTutorialHidden(tutorialIndex)
    if not self.triggeredTutorial then
        return
    end
    local tutorialType = GetTutorialType(tutorialIndex)
    if not UNTRACKED_TUTORIAL_TYPES[tutorialType] then
        self.triggeredTutorial = false
        self:FireCallbacks("TriggeredTutorialChanged", false)
    end
end
function Tutorial_Manager:OnTutorialTriggered(tutorialTrigger)
    if self.triggeredTutorial then
        return
    end
    local tutorialIndex = GetTutorialIndex(tutorialTrigger)
    local tutorialType = GetTutorialType(tutorialIndex)
    if not UNTRACKED_TUTORIAL_TYPES[tutorialType] then
        self.triggeredTutorial = true
        self:FireCallbacks("TriggeredTutorialChanged", true)
    end
end
function Tutorial_Manager:ShowTutorial(tutorialTrigger)
    if self:CanTutorialTriggerFire(tutorialTrigger) and TriggerTutorial(tutorialTrigger) then
        self:OnTutorialTriggered(tutorialTrigger)
    end
end
function Tutorial_Manager:ShowTutorialWithPosition(tutorialTrigger, anchorPosition, screenX, screenY)
    if self:CanTutorialTriggerFire(tutorialTrigger) and TriggerTutorialWithPosition(tutorialTrigger, anchorPosition, screenX, screenY) then
        self:OnTutorialTriggered(tutorialTrigger)
    end
end
TUTORIAL_MANAGER = Tutorial_Manager:New()