Back to Home

ESO Lua File v101041

ingame/utilitywheel/gamepad/accessibleassignableutilitywheel_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
182
183
184
185
186
187
188
189
190
191
192
193
ZO_AccessibleAssignableUtilityWheel_Gamepad = ZO_Gamepad_ParametricList_Screen:Subclass()
function ZO_AccessibleAssignableUtilityWheel_Gamepad:Initialize(control)
    self.control = control
    GAMEPAD_ACCESSIBLE_ASSIGNABLE_UTILITY_WHEEL_SCENE = ZO_Scene:New("gamepadAccessibleAssignableUtilityWheel", SCENE_MANAGER)
    local ACTIVATE_ON_SHOW = true
    ZO_Gamepad_ParametricList_Screen.Initialize(self, control, ZO_GAMEPAD_HEADER_TABBAR_DONT_CREATE, ACTIVATE_ON_SHOW, GAMEPAD_ACCESSIBLE_ASSIGNABLE_UTILITY_WHEEL_SCENE)
    self.headerData =
    {
        titleText = GetString(SI_GAMEPAD_ITEM_ACTION_QUICKSLOT_ASSIGN),
        subtitleText = function()
            local hotbarCategory = self.wheel:GetHotbarCategory()
            if hotbarCategory ~= ZO_UTILITY_WHEEL_HOTBAR_CATEGORY_HIDDEN then
                return GetString("SI_HOTBARCATEGORY", hotbarCategory)
            else
                return ""
            end
        end,
        messageText = function()
            return self.wheel:GetPendingName()
        end,
    }
    self:RefreshHeader()
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:RegisterForEvents()
    local function OnSlotUpdated(eventCode, physicalSlot, hotbarCategory)
        if self.wheel:GetHotbarCategory() == hotbarCategory then
            self:Update()
            if self:IsShowing() then
                SCREEN_NARRATION_MANAGER:QueueParametricListEntry(self:GetCurrentList())
            end
        end
    end
    self.control:RegisterForEvent(EVENT_HOTBAR_SLOT_UPDATED, OnSlotUpdated)
    self.control:RegisterForEvent(EVENT_PERSONALITY_CHANGED, function()
        --This event is only relevant if the wheel supports emotes
        if self.wheel:IsActionTypeSupported(ACTION_TYPE_EMOTE) then
            self:Update()
        end
    end)
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:InitializeUtilityWheel()
    self.wheelControl = self.control:GetNamedChild("QuickslotWheel")
    local wheelData =
    {
        hotbarCategories = { HOTBAR_CATEGORY_QUICKSLOT_WHEEL },
        numSlots = ACTION_BAR_UTILITY_BAR_SIZE,
        showPendingIcon = true,
        showCategoryLabel = true,
        --Do not show name labels on the wheel
        overrideShowNameLabels = false,
        --Display the accessibility keybinds on the wheel
        showKeybinds = true,
        --Do not activate the radial menu on showing to prevent it from accepting directional input
        overrideActivateOnShow = false,
        --We do not need to disable tooltip scrolling in any circumstances for this wheel
        overrideTooltipScrollEnabled = true,
        --Use the right tooltip instead of the default GAMEPAD_QUAD1_TOOLTIP
        overrideGamepadTooltip = GAMEPAD_RIGHT_TOOLTIP,
        onHotbarCategoryChangedCallback = function()
            self:Update()
            if self:IsShowing() then
                --Re-narrate the header if the hotbar category changed
                local NARRATE_HEADER = true
                SCREEN_NARRATION_MANAGER:QueueParametricListEntry(self:GetCurrentList(), NARRATE_HEADER)
            end
        end,
    }
    self.wheel = ZO_AssignableUtilityWheel_Gamepad:New(self.wheelControl, wheelData)
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:Show(hotbarCategories)
    self.wheel:SetHotbarCategories(hotbarCategories)
    self:Update()
    SCENE_MANAGER:Push("gamepadAccessibleAssignableUtilityWheel")
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:RefreshHeader()
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:SetPendingItem(bagId, slotIndex)
    self.wheel:SetPendingItem(bagId, slotIndex)
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:SetPendingSimpleAction(slotType, actionId)
    self.wheel:SetPendingSimpleAction(slotType, actionId)
end
-- Parametric scroll list overrides
function ZO_AccessibleAssignableUtilityWheel_Gamepad:InitializeKeybindStripDescriptors()
    self.keybindStripDescriptor = 
    {
        {
            name = GetString(SI_GAMEPAD_ITEM_ACTION_QUICKSLOT_ASSIGN),
            keybind = "UI_SHORTCUT_PRIMARY",
            alignment = KEYBIND_STRIP_ALIGN_LEFT,
            visible = function()
                return self.wheel:GetSelectedRadialEntry() ~= nil
            end,
            callback = function()
                self.wheel:TryAssignPendingToSelectedEntry()
            end,
        }
    }
    ZO_Gamepad_AddBackNavigationKeybindDescriptors(self.keybindStripDescriptor, GAME_NAVIGATION_TYPE_BUTTON)
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:SetupList(list)
    ZO_Gamepad_ParametricList_Screen.SetupList(self, list)
    local function EntrySetup(control, data, selected, reselectingDuringRebuild, enabled, active)
        ZO_SharedGamepadEntry_OnSetup(control, data, selected, reselectingDuringRebuild, enabled, active)
        --First unregister for binding updates so we don't accidentally double register
        local actionName = ZO_GetRadialMenuActionNameForOrdinalIndex(data.ordinalIndex)
        if actionName then
            ZO_Keybindings_RegisterLabelForBindingUpdate(control.keybindLabel, actionName)
        end
    end
    list:AddDataTemplate("ZO_AccessibleAssignableUtilityWheel_Gamepad_MenuEntryTemplate", EntrySetup, ZO_GamepadMenuEntryTemplateParametricListFunction, nil, "Slot")
    local function OnSelectedDataChangedCallback(innerList, selectedData)
        --Set the wheel selection to match the parametric list selection
        self.wheel:SetSelectedRadialEntry(selectedData)
    end
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:OnShowing()
    --Order matters. Show the wheel first so the information is updated before we try to perform an update
    self.wheel:Show()
    ZO_Gamepad_ParametricList_Screen.OnShowing(self)
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:OnHide()
    ZO_Gamepad_ParametricList_Screen.OnHide(self)
    self.wheel:Hide()
end
function ZO_AccessibleAssignableUtilityWheel_Gamepad:PerformUpdate()
    self:RefreshHeader()
    local list = self:GetMainList()
    list:Clear()
    local function GetSlotEntryNarrationText(entryData, entryControl)
        local narrations = {}
        -- Generate the standard parametric list entry narration
        ZO_AppendNarration(narrations, ZO_GetSharedGamepadEntryDefaultNarrationText(entryData, entryControl))
        --Generate the narration for the keybind
        local actionName = ZO_GetRadialMenuActionNameForOrdinalIndex(entryData.ordinalIndex)
        local bindingTextNarration = ZO_Keybindings_GetHighestPriorityNarrationStringFromAction(actionName) or GetString(SI_ACTION_IS_NOT_BOUND)
        ZO_AppendNarration(narrations, SCREEN_NARRATION_MANAGER:CreateNarratableObject(bindingTextNarration))
        return narrations
    end
    --Iterate through each ordinal entry in the wheel and add it to the parametric list
    self.wheel:ForEachOrdinalEntry(function(ordinalIndex, entry)
        local slotData = entry.data
        local entryData = ZO_GamepadEntryData:New(zo_strformat(SI_UTILITY_WHEEL_SLOT_FORMATTER, ordinalIndex))
        entryData:AddIcon(slotData.icon)
        entryData:AddSubLabel(slotData.name)
        entryData.slotIndex = slotData.slotIndex
        entryData.ordinalIndex = ordinalIndex
        entryData.narrationText = GetSlotEntryNarrationText
        list:AddEntry("ZO_AccessibleAssignableUtilityWheel_Gamepad_MenuEntryTemplate", entryData)
    end)
    list:Commit()
end
-- Global UI
    ACCESSIBLE_ASSIGNABLE_UTILITY_WHEEL_GAMEPAD = ZO_AccessibleAssignableUtilityWheel_Gamepad:New(control)
end
    control.keybindLabel = control:GetNamedChild("Keybind")
end