Back to Home

ESO Lua File v101041

ingame/gamepad/gamepadtemplates/gamepadtemplates.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
--[[ Global Helper Functions ]]--
do
    local function ApplyParametricScaling(control, parametricValue)
        control:SetScale(zo_lerp(ZO_GAMEPAD_DEFAULT_LIST_MAX_CONTROL_SCALE, ZO_GAMEPAD_DEFAULT_LIST_MIN_CONTROL_SCALE, parametricValue))
    end
    function ZO_GamepadMenuEntryTemplateParametricListFunction(control, distanceFromCenter, continousParametricOffset)
        if control.icon then
            local parametricValue = zo_abs(zo_clamp(distanceFromCenter - continousParametricOffset, -1, 1))
            ApplyParametricScaling(control.icon, parametricValue)
        end
    end
end
--[[ Item Templates ]]--
local function SetupCooldown(control, data)
    if control.cooldown then
        control.inCooldown = false
        control.cooldown:SetTexture(data.icon)
        local remaining, duration = GetItemCooldownInfo(data.bagId, data.slotIndex)
        ZO_GamepadItemSlot_UpdateCooldowns(control, remaining, duration)
    end
end
function ZO_GamepadCheckboxOptionTemplate_Setup(control, data, selected, selectedDuringRebuild, enabled, activated)
    ZO_SharedGamepadEntry_OnSetup(control, data, selected, selectedDuringRebuild, enabled, activated)
    control.optionEnabledIcon:SetHidden(not data.currentValue)
end
ZO_GamepadQuantitySpinner = {}
function ZO_GamepadQuantitySpinner:InitializeSpinner(valueChangedCallback, direction)
    self.spinner = ZO_Spinner_Gamepad:New(self:GetNamedChild("Spinner"), 1, 1, direction or GAMEPAD_SPINNER_DIRECTION_HORIZONTAL)
    self.spinner:RegisterCallback("OnValueChanged", function(newValue) self:OnValueChanged(newValue) end)
    self.currencyControl = self:GetNamedChild("Price")
    SCREEN_NARRATION_MANAGER:RegisterSpinner(self.spinner)
    self.spinner:SetName(GetString(SI_GAMEPAD_QUANTITY_SPINNER_TEMPLATE_LABEL))
    self.spinner:SetCanNarrateTooltips(false)
    local function GetSpinnerNarrationText()
        local narrations = {}
        ZO_AppendNarration(narrations, ZO_FormatSpinnerNarrationText(self.spinner:GetName(), self.spinner:GetFormattedValueText()))
        if self.unitPrice then
            local totalCost = self:GetValue() * self.unitPrice
            local costText = ZO_Currency_FormatGamepad(self.currencyType, totalCost, ZO_CURRENCY_FORMAT_AMOUNT_NAME)
            ZO_AppendNarration(narrations, SCREEN_NARRATION_MANAGER:CreateNarratableObject(costText))
        end
        return narrations
    end
end
function ZO_GamepadQuantitySpinner:SetValueChangedCallback(callback)
end
function ZO_GamepadQuantitySpinner:SetMinMax(min, max)
    self.spinner:SetMinMax(min, max)
end
function ZO_GamepadQuantitySpinner:SetValue(value)
    self.spinner:SetValue(value)
end
function ZO_GamepadQuantitySpinner:GetValue(value)
    return self.spinner:GetValue()
end
function ZO_GamepadQuantitySpinner:SetupCurrency(unitPrice, currencyType)
    self.unitPrice = unitPrice
    if currencyType and (currencyType ~= 0) then
        self.currencyType = currencyType
    else
        self.currencyType = CURT_MONEY
    end
    self.currencyControl:SetHidden(not unitPrice)
end
function ZO_GamepadQuantitySpinner:Activate()
    self.spinner:Activate()
end
function ZO_GamepadQuantitySpinner:Deactivate()
    self.spinner:Deactivate()
end
function ZO_GamepadQuantitySpinner:OnValueChanged(newValue)
    if self.valueChangedCallback then
        self.valueChangedCallback(newValue)
    end
    if self.unitPrice then
        local totalCost = newValue * self.unitPrice
        local notEnough = not self.ignoreInvalidCost and totalCost > GetCurrencyAmount(self.currencyType, GetCurrencyPlayerStoredLocation(self.currencyType)) or false
        ZO_CurrencyControl_SetSimpleCurrency(self.currencyControl, self.currencyType, totalCost, ZO_GAMEPAD_CURRENCY_OPTIONS, CURRENCY_SHOW_ALL, notEnough)
    end
end
function ZO_GamepadQuantitySpinner:AttachAndShowSpinner(list, targetControl)
    self:Activate()
    self:SetHidden(false)
    self:ClearAnchors()
    self:SetAnchor(TOPLEFT, targetControl, TOPLEFT, 0, -8)
    self:SetAnchor(BOTTOMRIGHT, targetControl, BOTTOMRIGHT, 0, 8)
    self.anchoredToList = list
    self.ignoreInvalidCost = false
     self.anchoredToList:SetMouseEnabled(false)
end
local function OnSelectedDataChanged(list, selectedData)
    local spinner = selectedData.gamepadQuantitySpinner
    if spinner then
        spinner:AttachAndShowSpinner(list, list:GetSelectedControl())
    end
end
function ZO_GamepadQuantitySpinner:AttachToTargetListEntry(list)
    local targetControl = list:GetTargetControl()
    if targetControl then
        self:AttachAndShowSpinner(list, targetControl)
    else
        --There may be no target control if the target is off the top or bottom of the list (not in view). In this case save it off on the target for when it is selected.
        local targetData = list:GetTargetData()
        if targetData then
            targetData.gamepadQuantitySpinner = self
        end
    end
end
function ZO_GamepadQuantitySpinner:DetachFromListEntry()
    if self.anchoredToList then
        self:Deactivate()
        self:SetValue(1)
        self:SetHidden(true)
        local targetData = self.anchoredToList:GetTargetData()
        if targetData then
            targetData.gamepadQuantitySpinner = nil
        end
        self.anchoredToList:SetMouseEnabled(true)
        --Re-narrate the list we are anchored to when the spinner is detached
        SCREEN_NARRATION_MANAGER:QueueParametricListEntry(self.anchoredToList)
        self.anchoredToList = nil
    end
end
function ZO_GamepadQuantitySpinner:SetIgnoreInvalidCost(ignoreInvalidCost)
    self.ignoreInvalidCost = ignoreInvalidCost
end
    zo_mixin(control, ZO_GamepadQuantitySpinner)
end
    control.label = control:GetNamedChild("Label")
    control.icon = control:GetNamedChild("Icon")
    control.leftIndicator = control:GetNamedChild("LeftIndicator")
    control.circleFrame = control:GetNamedChild("CircleFrame")
    control.edgeFrame = control:GetNamedChild("EdgeFrame")
    control.lock = control:GetNamedChild("Lock")
    control.keybind = control:GetNamedChild("Keybind")
    local fonts =
    {
        {
            font = "ZoFontGamepad34",
            lineLimit = 1,
        },
        {
            font = "ZoFontGamepad27",
            lineLimit = 1,
            dontUseForAdjusting = true,
        },
    }
    ZO_FontAdjustingWrapLabel_OnInitialized(control.label, fonts, TEXT_WRAP_MODE_ELLIPSIS)
end