ESO Lua File v100015

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
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,
        },
    }
    -- 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: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 = 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 }
                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
                lastCategory = categoryIndex
                entryData:SetHeader(categoryData.name)
                templateName = "ZO_GamepadLoreCollectionEntryTemplateWithHeader"
            else
                templateName = "ZO_GamepadLoreCollectionEntryTemplate"
            end
            self.itemList:AddEntry(templateName, entryData)
        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)
end
    LORE_LIBRARY_GAMEPAD = LoreLibraryGamepad:New(control)
end