Back to Home

ESO Lua File v100030

libraries/utility/zo_gamepadutils.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
GAMEPAD_INCLUDE_DEADZONE = true
GAMEPAD_EXCLUDE_DEADZONE = false
    return g_defaultEaseFunction(GetGamepadLeftStickX(GAMEPAD_INCLUDE_DEADZONE))
end
    return g_defaultEaseFunction(GetGamepadLeftStickY(GAMEPAD_INCLUDE_DEADZONE))
end
    return g_defaultEaseFunction(GetGamepadRightStickX(GAMEPAD_INCLUDE_DEADZONE))
end
    return g_defaultEaseFunction(GetGamepadRightStickY(GAMEPAD_INCLUDE_DEADZONE))
end
local function DefaultIsDataHeader(data)
    return data.isHeader or data.header
end
function ZO_Gamepad_CreateListTriggerKeybindDescriptors(list, optionalHeaderComparator)
    local leftTrigger = {
        --Ethereal binds show no text, the name field is used to help identify the keybind when debugging. This text does not have to be localized.
        name = function()
            local list = list --need a local copy so the original isn't overwritten on subsequent calls
            if type(list) == "function" then
                list = list()
            end
            local listControl = list:GetControl()
               if listControl then
                    return listControl:GetName()
               end
        end,
        keybind = "UI_SHORTCUT_LEFT_TRIGGER",
        ethereal = true,
        callback = function()
            local list = list --need a local copy so the original isn't overwritten on subsequent calls
            if type(list) == "function" then
                list = list()
            end
            if list:IsActive() and not list:IsEmpty() and not list:SetPreviousSelectedDataByEval(optionalHeaderComparator or DefaultIsDataHeader, ZO_PARAMETRIC_MOVEMENT_TYPES.JUMP_PREVIOUS) then
                list:SetFirstIndexSelected(ZO_PARAMETRIC_MOVEMENT_TYPES.JUMP_PREVIOUS)
            end
        end,
    }
    local rightTrigger = {
        --Ethereal binds show no text, the name field is used to help identify the keybind when debugging. This text does not have to be localized.
        name = function()
            local list = list --need a local copy so the original isn't overwritten on subsequent calls
            if type(list) == "function" then
                list = list()
            end
            local listControl = list:GetControl()
               if listControl then
                    return listControl:GetName()
               end
        end,
        keybind = "UI_SHORTCUT_RIGHT_TRIGGER",
        ethereal = true,
        callback = function()
            local list = list --need a local copy so the original isn't overwritten on subsequent calls
            if type(list) == "function" then
                list = list()
            end
            if list:IsActive() and not list:IsEmpty() and not list:SetNextSelectedDataByEval(optionalHeaderComparator or DefaultIsDataHeader, ZO_PARAMETRIC_MOVEMENT_TYPES.JUMP_NEXT) then
                list:SetLastIndexSelected(ZO_PARAMETRIC_MOVEMENT_TYPES.JUMP_NEXT)
            end
        end,
    }
    return leftTrigger, rightTrigger
end
function ZO_Gamepad_AddListTriggerKeybindDescriptors(descriptor, list, optionalHeaderComparator)
    local leftTrigger, rightTrigger = ZO_Gamepad_CreateListTriggerKeybindDescriptors(list, optionalHeaderComparator)
    table.insert(descriptor, leftTrigger)
     table.insert(descriptor, rightTrigger)
end
GAME_NAVIGATION_TYPE_STICK = 1
GAME_NAVIGATION_TYPE_BUTTON = 2
GAME_NAVIGATION_TYPE_BOTH = 3
function ZO_Gamepad_AddForwardNavigationKeybindDescriptors(descriptor, navigationType, callback, name, visible, enabled, sound)
    if navigationType == GAME_NAVIGATION_TYPE_STICK or navigationType == GAME_NAVIGATION_TYPE_BOTH then
        descriptor[#descriptor + 1] = {
            --Ethereal binds show no text, the name field is used to help identify the keybind when debugging. This text does not have to be localized.
            name = name or GetString(SI_GAMEPAD_SELECT_OPTION),
            keybind = "UI_SHORTCUT_INPUT_RIGHT",
            ethereal = true,
            visible = visible,
            callback = callback,
            sound = sound,
               enabled = enabled,
        }
    end
    if navigationType == GAME_NAVIGATION_TYPE_BUTTON or navigationType == GAME_NAVIGATION_TYPE_BOTH then
        descriptor[#descriptor + 1] = {
            alignment = KEYBIND_STRIP_ALIGN_LEFT,
            name = name or GetString(SI_GAMEPAD_SELECT_OPTION),
            keybind = "UI_SHORTCUT_PRIMARY",
            order = -500,
            callback = callback,
            visible = visible,
            sound = sound,
               enabled = enabled,
        }
    end
end
    ZO_Gamepad_AddForwardNavigationKeybindDescriptors(descriptor, navigationType, callback, name, visible, enabled, SOUNDS.GAMEPAD_MENU_FORWARD)
end
local function DefaultBack()
    SCENE_MANAGER:HideCurrentScene()
end
function ZO_Gamepad_AddBackNavigationKeybindDescriptors(descriptor, navigationType, callback, name, sound)
    if navigationType == GAME_NAVIGATION_TYPE_STICK or navigationType == GAME_NAVIGATION_TYPE_BOTH then
        descriptor[#descriptor + 1] = {
            --Ethereal binds show no text, the name field is used to help identify the keybind when debugging. This text does not have to be localized.
            name = name or GetString(SI_GAMEPAD_BACK_OPTION),
            keybind = "UI_SHORTCUT_INPUT_LEFT",
            ethereal = true,
            sound = sound,
            callback = callback or DefaultBack,
        }
    end
    if navigationType == GAME_NAVIGATION_TYPE_BUTTON or navigationType == GAME_NAVIGATION_TYPE_BOTH then
        descriptor[#descriptor + 1] = {
            alignment = KEYBIND_STRIP_ALIGN_LEFT,
            name = name or GetString(SI_GAMEPAD_BACK_OPTION),
            keybind = "UI_SHORTCUT_NEGATIVE",
            visible = IsInGamepadPreferredMode,
            order = -1500,
            sound = sound,
            callback = callback or DefaultBack,
        }
    end
end
function ZO_Gamepad_AddBackNavigationKeybindDescriptorsWithSound(descriptor, navigationType, callback, name)
    ZO_Gamepad_AddBackNavigationKeybindDescriptors(descriptor, navigationType, callback, name, SOUNDS.GAMEPAD_MENU_BACK)
end
local ALPHABET_TABLE = { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z" }
function ZO_Gamepad_TempVirtualKeyboardGenRandomString(prefix, totalLength)
    totalLength = totalLength or (string.len(prefix) + 7)
    local result = prefix .. "-"
    local prevChar = nil
    while(string.len(result) < totalLength) do
        local char = ALPHABET_TABLE[math.random(1, #ALPHABET_TABLE)]
        if(char ~= prevChar) then -- prevent the violation state of multiple instances of the same char.
            result = result .. char
            prevChar = char
        end
    end
    return result
end