Back to Home

ESO Lua File v101041

ingame/tutorial/keyboard/pointerboxtutorial.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
ZO_PointerBoxTutorial = ZO_TutorialHandlerBase:Subclass()
function ZO_PointerBoxTutorial:Initialize(parent)
    self.parent = parent
    self.tutorial = CreateControlFromVirtual(parent:GetName(), parent, "ZO_PointerBoxTutorialTip", "PointerBoxTip")
end
do
    local g_triggerLayoutInfo = {}
    function ZO_PointerBoxTutorial:RegisterTriggerLayoutInfo(tutorialTrigger, parent, fragment, anchor, optionalParams)
        g_triggerLayoutInfo[tutorialTrigger] =
        {
            parent = parent,
            fragment = fragment,
            anchor = anchor,
            optionalParams = optionalParams,
        }
    end
    function ZO_PointerBoxTutorial:GetTriggerLayoutInfo(tutorialTrigger)
        return g_triggerLayoutInfo[tutorialTrigger]
    end
end
function ZO_PointerBoxTutorial:SuppressTutorials(suppress, reason)
    -- Suppression is disabled in ZO_PointerBoxTutorial
end
function ZO_PointerBoxTutorial:DisplayTutorial(tutorialIndex, anchor, offsetX, offsetY)
    local title, description = GetTutorialInfo(tutorialIndex)
    local trigger = GetTutorialTrigger(tutorialIndex)
    local layoutInfo = self:GetTriggerLayoutInfo(trigger)
    if not layoutInfo then
        internalassert(false, string.format("No tutorial layout registered for trigger %d", trigger or 0))
        return
    end
    self.tutorial:SetText(description)
    local pointerBox = POINTER_BOXES:Acquire()
    pointerBox:SetContentsControl(self.tutorial)
    pointerBox:SetCloseable(true)
    pointerBox:SetParent(layoutInfo.parent)
    pointerBox:SetReleaseOnHidden(true)
    pointerBox:SetTutorialIndex(tutorialIndex)
    if not anchor or anchor == NONE then
        -- Preregistered layout anchoring
        layoutInfo.anchor:Set(pointerBox)
    else
        -- Ad-hoc anchoring
        local customAnchor = ZO_Anchor:New()
        customAnchor:ResetToAnchor(layoutInfo.anchor)
        customAnchor:SetMyPoint(anchor)
        customAnchor:SetOffsets(offsetX, offsetY)
        customAnchor:Set(pointerBox)
    end
    if layoutInfo.fragment then
        pointerBox:SetHideWithFragment(layoutInfo.fragment)
    end
    self:SetOptionalPointerBoxParams(layoutInfo.optionalParams)
    pointerBox:Commit()
    pointerBox:Show()
    SetTutorialSeen(tutorialIndex)
end
do
    local DEFAULT_VERTICAL_ALIGNMENT = TEXT_ALIGN_TOP
    local DEFAULT_HORIZONTAL_ALIGNMENT = TEXT_ALIGN_CENTER
    local DEFAULT_WIDTH = 290
    local DEFAULT_HEIGHT = 0
    function ZO_PointerBoxTutorial:SetOptionalPointerBoxParams(optionalParams)
        local tutorialControl = self.tutorial
        if optionalParams then
            if optionalParams.dimensionConstraintsMinX or optionalParams.dimensionConstraintsMinY or optionalParams.dimensionConstraintsMaxX or optionalParams.dimensionConstraintsMaxY then
                tutorialControl:SetDimensionConstraints(optionalParams.dimensionConstraintsMinX or 0, optionalParams.dimensionConstraintsMinY or 0, optionalParams.dimensionConstraintsMaxX or 0, optionalParams.dimensionConstraintsMaxY or 0)
            else
                tutorialControl:SetDimensions(optionalParams.width or DEFAULT_WIDTH, optionalParams.height or DEFAULT_HEIGHT)
            end
            tutorialControl:SetVerticalAlignment(optionalParams.verticalAlignment or DEFAULT_VERTICAL_ALIGNMENT)
            tutorialControl:SetHorizontalAlignment(optionalParams.horizontalAlignment or DEFAULT_HORIZONTAL_ALIGNMENT)
        else
            tutorialControl:SetDimensionConstraints(0, 0, 0, 0)
            tutorialControl:SetDimensions(DEFAULT_WIDTH, DEFAULT_HEIGHT)
            tutorialControl:SetVerticalAlignment(DEFAULT_VERTICAL_ALIGNMENT)
            tutorialControl:SetHorizontalAlignment(DEFAULT_HORIZONTAL_ALIGNMENT)
        end
    end
end
function ZO_PointerBoxTutorial:GetActiveTutorials()
    local activePointerBoxes = {}
    local activeObjects = POINTER_BOXES:GetActiveObjects()
    for _, pointerBox in pairs(activeObjects) do
        if pointerBox:GetTutorialIndex() then
            table.insert(activePointerBoxes, pointerBox)
        end
    end
    return activePointerBoxes
end
function ZO_PointerBoxTutorial:GetActiveTutorialByIndex(tutorialIndex)
    local activeObjects = POINTER_BOXES:GetActiveObjects()
    for _, pointerBox in pairs(activeObjects) do
        if pointerBox:GetTutorialIndex() == tutorialIndex then
            return pointerBox
        end
    end
end
function ZO_PointerBoxTutorial:GetActiveTutorialByTrigger(tutorialTrigger)
    local activeObjects = POINTER_BOXES:GetActiveObjects()
    for _, pointerBox in pairs(activeObjects) do
        if pointerBox:GetTutorialTrigger() == tutorialTrigger then
            return pointerBox
        end
    end
end
function ZO_PointerBoxTutorial:GetCurrentlyDisplayedTutorialIndex()
    -- For backward compatibility with:
    -- ZO_Tutorials:ForceRemoveAll()
    -- ZO_TutorialHandlerBase:SuppressTutorials()
    -- ZO_TutorialHandlerBase:CanShowTutorial()
    local activeObjects = POINTER_BOXES:GetActiveObjects()
    for _, pointerBox in pairs(activeObjects) do
        local tutorialIndex = pointerBox:GetTutorialIndex()
        if tutorialIndex then
            return tutorialIndex
        end
    end
end
function ZO_PointerBoxTutorial:IsTutorialDisplayed(tutorialIndex)
    return self:GetActiveTutorialByIndex(tutorialIndex) ~= nil
end
function ZO_PointerBoxTutorial:OnDisplayTutorial(tutorialIndex, priority, ...)
     if not self:GetActiveTutorialByIndex(tutorialIndex) then
        if self:CanShowTutorial() then
            self:DisplayTutorial(tutorialIndex, ...)
        end
    end
end
function ZO_PointerBoxTutorial:RemoveTutorialByTrigger(tutorialTrigger)
    local pointerBox = self:GetActiveTutorialByTrigger(tutorialTrigger)
    if pointerBox then
        pointerBox:Hide()
    end
end
function ZO_PointerBoxTutorial:RemoveTutorial(tutorialIndex)
    local pointerBox = self:GetActiveTutorialByIndex(tutorialIndex)
    if pointerBox then
        pointerBox:Hide()
    end
end
function ZO_PointerBoxTutorial:GetTutorialType()
    return TUTORIAL_TYPE_POINTER_BOX
end
function ZO_PointerBoxTutorial:ClearAll()
    local activePointerBoxes = self:GetActiveTutorials()
    for _, pointerBox in ipairs(activePointerBoxes) do
        pointerBox:Hide()
    end
end