Back to Home

ESO Lua File v100019

ingame/tutorial/briefhudtutorial.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
local AUTO_CLOSE_MS = 1 * 60 * 1000
ZO_BriefHudTutorial = ZO_TutorialHandlerBase:Subclass()
function ZO_BriefHudTutorial:Initialize(parent)    
    self.tutorial = CreateControlFromVirtual(parent:GetName(), parent, "ZO_BriefHudTutorialTip", "BriefHudTip")
    
    local function UpdateDescription()
        local tutorialIndex = self:GetCurrentlyDisplayedTutorialIndex()
        if tutorialIndex then
            local title, description = GetTutorialInfo(tutorialIndex) --Grab the Gamepad/Keyboard binding
            self.tutorial:SetText(zo_strformat(SI_TUTORIAL_FORMATTER, description))
        end
    end
    local function UpdateTemplate()
        UpdateDescription()
        if IsInGamepadPreferredMode() then          
            self.tutorial:SetWidth(850)
            self.tutorial:SetFont("ZoFontGamepad42")
        else
            self.tutorial:SetWidth(650)
            self.tutorial:SetFont("ZoInteractionPrompt")
        end
    end
    self.tutorial:RegisterForEvent(EVENT_GAMEPAD_PREFERRED_MODE_CHANGED, UpdateTemplate)
    --in case the player changes the keybind or resets to default while a tutorial is up.
    self.tutorial:RegisterForEvent(EVENT_KEYBINDING_SET, UpdateDescription)
    self.tutorial:RegisterForEvent(EVENT_KEYBINDINGS_LOADED, UpdateDescription)
    
    self.tutorialAnimation = ANIMATION_MANAGER:CreateTimelineFromVirtual("HudBriefTutorialAnimation", self.tutorial)
    self.tutorialAnimation:SetHandler("OnStop", function(timeline) 
        if not timeline:IsPlayingBackward() then 
            FireTutorialHiddenEvent(self.tutorialIndex)
            SHARED_INFORMATION_AREA:SetHidden(self.tutorial, true) 
        end 
    end)
    EVENT_MANAGER:RegisterForUpdate(self.tutorial:GetName() .. "OnUpdate", 0, function() self:OnUpdate() end)
    EVENT_MANAGER:RegisterForEvent("BriefHudTutorial", EVENT_PLAYER_DEAD, function() self:ClearAll() end)
    SHARED_INFORMATION_AREA:AddTutorial(self.tutorial)
    UpdateTemplate()
    self:ClearAll()
end
function ZO_BriefHudTutorial:SetHidden(hide)
    self.tutorial:SetHidden(hide)
end
function ZO_BriefHudTutorial:GetTutorialType()
    return TUTORIAL_TYPE_HUD_BRIEF
end
function ZO_BriefHudTutorial:SuppressTutorials(suppress, reason)
    -- Suppression is disabled since we're potentially disabling
    -- input so the player ought to know why
end
function ZO_BriefHudTutorial:DisplayTutorial(tutorialIndex)
    self.tutorialIndex = tutorialIndex
    local title, description = GetTutorialInfo(tutorialIndex)
    SetTutorialSeen(tutorialIndex)
    self.tutorial:SetText(zo_strformat(SI_TUTORIAL_FORMATTER, description))
    self.tutorialAnimation:PlayBackward()
    self:SetCurrentlyDisplayedTutorialIndex(tutorialIndex)
    self.displayedTutorialIsActionRequired = IsTutorialActionRequired(tutorialIndex)
    self.currentlyDisplayedTutorialTimeLeft = (not self.displayedTutorialIsActionRequired) and AUTO_CLOSE_MS
    SHARED_INFORMATION_AREA:SetHidden(self.tutorial, false)
end
function ZO_BriefHudTutorial:OnDisplayTutorial(tutorialIndex, priority)
     if tutorialIndex ~= self:GetCurrentlyDisplayedTutorialIndex() then
        if not self:CanShowTutorial() then
            self:ClearAll()
        end
        self:DisplayTutorial(tutorialIndex)
    end
end
function ZO_BriefHudTutorial:RemoveTutorial(tutorialIndex)
    if self:GetCurrentlyDisplayedTutorialIndex() == tutorialIndex then
        if self.displayedTutorialIsActionRequired then
            self.displayedTutorialIsActionRequired = nil
        end
        self:SetCurrentlyDisplayedTutorialIndex(nil)
        self.currentlyDisplayedTutorialTimeLeft = nil
        self.tutorialAnimation:PlayForward()
    end
end
function ZO_BriefHudTutorial:OnUpdate()
    if self.displayedTutorialIsActionRequired then return end
    local now = GetFrameTimeMilliseconds()
    local delta = now - (self.lastUpdate or now)
    if self:GetCurrentlyDisplayedTutorialIndex() and not self.tutorial:IsHidden() then
        self.currentlyDisplayedTutorialTimeLeft = self.currentlyDisplayedTutorialTimeLeft - delta
        if self.currentlyDisplayedTutorialTimeLeft < 0 then
            self:RemoveTutorial(self:GetCurrentlyDisplayedTutorialIndex())
        end
    end
    self.lastUpdate = now
end
function ZO_BriefHudTutorial:ClearAll()
    self.currentlyDisplayedTutorialTimeLeft = nil
    self.tutorialAnimation:PlayForward()
    if self.displayedTutorialIsActionRequired then
        self.displayedTutorialIsActionRequired = nil
        ClearActiveActionRequiredTutorial()        
    end
    self.queue = {}
end