Back to Home

ESO Lua File v101034

ingame/lorelibrary/gamepad/library_gamepad.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
177
178
179
180
181
local LoreLibraryGamepad = ZO_LoreLibraryBookSetGamepad:Subclass()
function LoreLibraryGamepad:New(...)
    return ZO_LoreLibraryBookSetGamepad.New(self, ...)
end
function LoreLibraryGamepad:Initialize(control)
    ZO_LoreLibraryBookSetGamepad.Initialize(self, control)
    LORE_LIBRARY_SCENE_GAMEPAD = ZO_Scene:New("loreLibraryGamepad", SCENE_MANAGER)
    local function OnStateChanged(...)
        self:OnStateChanged(...)
    end
    LORE_LIBRARY_SCENE_GAMEPAD:RegisterCallback("StateChange", OnStateChanged)
end
function LoreLibraryGamepad:InitializeKeybindStripDescriptors()
    self.keybindStripDescriptor =
    {
        alignment = KEYBIND_STRIP_ALIGN_LEFT,
        -- Back
        KEYBIND_STRIP:GetDefaultGamepadBackButtonDescriptor(),
        -- Open collection.
        {
            name = GetString(SI_GAMEPAD_LORE_LIBRARY_OPEN_COLLECTION),
            keybind = "UI_SHORTCUT_PRIMARY",
            visible = function()
                local selectedData = self.itemList:GetTargetData()
                return selectedData and selectedData.collectionIndex
            end,
            callback = function()
                local selectedData = self.itemList:GetTargetData()
                BOOK_SET_GAMEPAD:Push(selectedData)
            end,
        },
        -- Open in Achievements
        {
            name = GetString(SI_LORE_LIBRARY_TO_ACHIEVEMENT_ACTION),
            keybind = "UI_SHORTCUT_SECONDARY",
            visible = function()
                local selectedData = self.itemList:GetTargetData()
                if selectedData and selectedData.collectionIndex then
                    local achievementId = GetLoreBookCollectionLinkedAchievement(selectedData.categoryIndex, selectedData.collectionIndex)
                    return achievementId ~= 0
                end
                return false
            end,
            callback = function()
                local selectedData = self.itemList:GetTargetData()
                local achievementId = GetLoreBookCollectionLinkedAchievement(selectedData.categoryIndex, selectedData.collectionIndex)
                MAIN_MENU_GAMEPAD:SelectMenuEntry(ZO_MENU_MAIN_ENTRIES.JOURNAL)
                ACHIEVEMENTS_GAMEPAD:ShowAchievement(achievementId)
            end,
        },
    }
    -- Jump to next section.
end
function LoreLibraryGamepad:SetupList(list)
    list:AddDataTemplateWithHeader("ZO_GamepadLoreCollectionEntryTemplate", ZO_SharedGamepadEntry_OnSetup, ZO_GamepadMenuEntryTemplateParametricListFunction, nil, "ZO_GamepadMenuEntryHeaderTemplate")
end
local function NameSorter(left, right)
    return left.name < right.name
end
function LoreLibraryGamepad:SetCollectionIdToSelect(collectionId)
    self.collectionIdToSelect = collectionId
    self.dirty = true
end
function LoreLibraryGamepad:PerformUpdate()
    self.dirty = false
    local totalCurrentlyCollected = 0
    local totalPossibleCollected = 0
    self.itemList:Clear()
    -- Get the list of categories that we need to show.
    local categories = {}
    for categoryIndex = 1, GetNumLoreCategories() do
        local categoryName, numCollections = GetLoreCategoryInfo(categoryIndex)
        for collectionIndex = 1, numCollections do
            local _, _, _, _, hidden = GetLoreCollectionInfo(categoryIndex, collectionIndex)
            if not hidden then
                categories[#categories + 1] = { categoryIndex = categoryIndex, name = categoryName, numCollections = numCollections}
                break
            end
        end
    end
    table.sort(categories, NameSorter)
    -- Add the categories and their contents to the list.
    for i, categoryData in ipairs(categories) do
        local categoryIndex = categoryData.categoryIndex
        local numCollections = categoryData.numCollections
        -- Get the list of collections that we need to show.
        local collections = {}
        for collectionIndex = 1, numCollections do
            local collectionName, description, numKnownBooks, totalBooks, hidden, gamepadIcon, collectionId = GetLoreCollectionInfo(categoryIndex, collectionIndex)
            if not hidden then
                collections[#collections + 1] = { categoryIndex = categoryIndex, collectionIndex = collectionIndex, name = collectionName, knownBooks = numKnownBooks, totalBooks = totalBooks, description = description, enabled = (numKnownBooks > 0), icon = gamepadIcon, collectionId = collectionId }
                totalCurrentlyCollected = totalCurrentlyCollected + numKnownBooks
                totalPossibleCollected = totalPossibleCollected + totalBooks
            end
        end
        table.sort(collections, NameSorter)
        -- Add the collections to the list.
        for k, collectionData in ipairs(collections) do
            local isHeader = (k == 1)
            local entryData = ZO_GamepadEntryData:New(collectionData.name, collectionData.icon)
            entryData:AddSubLabel(zo_strformat("<<1>>/<<2>>", collectionData.knownBooks, collectionData.totalBooks))
            entryData.categoryIndex = collectionData.categoryIndex
            entryData.collectionIndex = collectionData.collectionIndex
            entryData.description = collectionData.description
            entryData.enabled = collectionData.enabled
            entryData:SetFontScaleOnSelection(false)
            entryData:SetShowUnselectedSublabels(true)
            if collectionData.enabled then
                entryData:SetNameColors(ZO_SELECTED_TEXT, ZO_CONTRAST_TEXT)
                entryData:SetSubLabelColors(ZO_SELECTED_TEXT, ZO_CONTRAST_TEXT)
                entryData:SetIconDesaturation(0)
            else
                entryData:SetNameColors(ZO_DISABLED_TEXT, ZO_DISABLED_TEXT)
                entryData:SetSubLabelColors(ZO_DISABLED_TEXT, ZO_DISABLED_TEXT)
                entryData:SetIconDesaturation(1)
            end
            local categoryName = nil
            local templateName
            if isHeader then
                entryData:SetHeader(categoryData.name)
                templateName = "ZO_GamepadLoreCollectionEntryTemplateWithHeader"
            else
                templateName = "ZO_GamepadLoreCollectionEntryTemplate"
            end
            self.itemList:AddEntry(templateName, entryData)
            if self.collectionIdToSelect == collectionData.collectionId then
                self.itemList:SetSelectedIndex(k)
            end
        end
    end
    self.itemList:Commit()
    -- Update the collection count label.
    self.headerData.data1HeaderText = GetString(SI_GAMEPAD_LORE_LIBRARY_TOTAL_COLLECTED_TITLE)
    self.headerData.data1Text = zo_strformat(SI_GAMEPAD_LORE_LIBRARY_TOTAL_COLLECTED, totalCurrentlyCollected, totalPossibleCollected)
    -- Update the key bindings.
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
    -- Update the header.
    self.headerData.titleText = GetString(SI_WINDOW_TITLE_LORE_LIBRARY)
    if self.collectionIdToSelect then
        local selectedData = self.itemList:GetTargetData()
        BOOK_SET_GAMEPAD:Push(selectedData)
    end
    self.collectionIdToSelect = nil
end
    LORE_LIBRARY_GAMEPAD = LoreLibraryGamepad:New(control)
end