Back to Home

ESO Lua File v101044

libraries/zo_horizontalscrolllist/gamepad/zo_horizontalscrolllist_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
ZO_HorizontalScrollList_Gamepad = ZO_HorizontalScrollList:Subclass()
--[[ Public API ]]--
function ZO_HorizontalScrollList_Gamepad:New(...)
    return ZO_HorizontalScrollList.New(self, ...)
end
-- for best results numVisibleEntries should be odd
function ZO_HorizontalScrollList_Gamepad:Initialize(control, templateName, numVisibleEntries, setupFunction, equalityFunction, onCommitWithItemsFunction, onClearedFunction)
    ZO_HorizontalScrollList.Initialize(self, control, templateName, numVisibleEntries, setupFunction, equalityFunction, onCommitWithItemsFunction, onClearedFunction)
    self:SetActive(false)
    self.movementController = ZO_MovementController:New(MOVEMENT_CONTROLLER_DIRECTION_HORIZONTAL)
    local function GetDirectionalInputNarrationData()
        --Only narrate directional input if there is more than one possible value
        if self.active and self:CanScroll() then
            local numItems = self:GetNumItems()
            local selectedIndex = self:GetSelectedIndex()
            local disableArrows = numItems == 0 or (numItems == 1 and not self.allowWrapping)
            if disableArrows then
                --Don't include directional input if both arrows are disabled
                return {}
            elseif selectedIndex and not self.allowWrapping then
                --Only include enabled state if we are not allowed to wrap
                local DEFAULT_LEFT_TEXT = nil
                local DEFAULT_RIGHT_TEXT = nil
                local leftArrowEnabled = selectedIndex ~= 0
                local rightArrowEnabled = zo_abs(selectedIndex) ~= numItems - 1
                return ZO_GetHorizontalDirectionalInputNarrationData(DEFAULT_LEFT_TEXT, DEFAULT_RIGHT_TEXT, leftArrowEnabled, rightArrowEnabled)
            else
                return ZO_GetHorizontalDirectionalInputNarrationData()
            end
        else
            return {}
        end
    end
end
function ZO_HorizontalScrollList_Gamepad:SetOnActivatedChangedFunction(onActivatedChangedFunction)
    self.dirty = true
end
function ZO_HorizontalScrollList_Gamepad:Commit()
    ZO_HorizontalScrollList.Commit(self)
    self:UpdateArrows()
end
function ZO_HorizontalScrollList_Gamepad:SetActive(active)
    if self.active ~= active or self.dirty then
        self.active = active
        self.dirty = false
        if self.active then
            DIRECTIONAL_INPUT:Activate(self, self.control)
        else
            DIRECTIONAL_INPUT:Deactivate(self)
        end
        self:UpdateArrows()
        if self.onActivatedChangedFunction then
            self.onActivatedChangedFunction(self, self.active)
        end
    end
end
function ZO_HorizontalScrollList_Gamepad:IsActive()
    return self.active
end
function ZO_HorizontalScrollList_Gamepad:UpdateArrows()
    local hideArrows = not self.active or not self:CanScroll()
    self.leftArrow:SetHidden(hideArrows)
    self.rightArrow:SetHidden(hideArrows)
    if not hideArrows then
        local numItems = self:GetNumItems()
        local selectedIndex = self:GetSelectedIndex()
        local disableArrows = numItems == 0 or (numItems == 1 and not self.allowWrapping)
        
        if disableArrows then
            self.leftArrow:SetEnabled(not disableArrows)
            self.rightArrow:SetEnabled(not disableArrows)
        elseif not disableArrows and selectedIndex and not self.allowWrapping then
            if selectedIndex == 0 then
                self.leftArrow:SetEnabled(false)
            elseif zo_abs(selectedIndex) == numItems - 1 then
                self.rightArrow:SetEnabled(false)
            end
        end
    end
end
function ZO_HorizontalScrollList_Gamepad:Activate()
    self:SetActive(true)
    self.lastScrollTime = GetFrameTimeSeconds()
    self.lastInteractionAutomatic = true
end
function ZO_HorizontalScrollList_Gamepad:Deactivate()
    self:SetActive(false)
end
function ZO_HorizontalScrollList_Gamepad:UpdateDirectionalInput()
    local result = self.movementController:CheckMovement()
        return
    end
    if result == MOVEMENT_CONTROLLER_MOVE_NEXT then
        self:MoveLeft()
    elseif result == MOVEMENT_CONTROLLER_MOVE_PREVIOUS then
        self:MoveRight()
    end
end
-- Will fire a callback with the directional input result
-- Optionally you can return true to consume the result before the list processes it
function ZO_HorizontalScrollList_Gamepad:SetCustomDirectionInputHandler(handler)
end
function ZO_HorizontalScrollList_Gamepad:GetAdditionalInputNarrationFunction()
end