ESO Lua File v100010

ingame/stable/gamepad/stable_header.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
local ZO_StableHeader = ZO_Object:Subclass()
function ZO_StableHeader:New(...)
    local stableHeader = ZO_Object.New(self)
    stableHeader:Initialize(...)
    return stableHeader
end
function ZO_StableHeader:Initialize(control)
    self.control = control
    self.tooltipContainer = control:GetNamedChild("Tooltip")
    self.tooltip = self.tooltipContainer:GetNamedChild("Tip")
    ZO_Tooltip:Initialize(self.tooltip, ZO_TOOLTIP_STYLES)
    self:InitializeTabs()
end
function ZO_StableHeader:InitializeTabs()
    self.tabBar = ZO_GamepadTabBarScrollList:New(self.control:GetNamedChild("TabBar"))
    local function CreateModeData(name, mode, icon, fragment)
        return {
            text = GetString(name),
            mode = mode,
            iconFile = icon,
            fragment = fragment
        }
    end
    local function AddModeEntry(name, mode, icon, fragment)
        self.tabBar:AddEntry("ZO_GamepadTabBarTemplate", CreateModeData(name, mode, icon, fragment))
    end
    -- NOTE: If the order of these tabs change, the code farther down to pick the correct starting screen also needs to change.
    AddModeEntry(SI_GAMEPAD_STABLE_STABLES_BUY, 1, "EsoUI/Art/Vendor/vendor_tabIcon_buy_up.dds", BUY_MOUNT_GAMEPAD_FRAGMENT)
    AddModeEntry(SI_GAMEPAD_STABLE_STABLES_SELL, 1, "EsoUI/Art/Vendor/vendor_tabIcon_sell_up.dds", SELL_MOUNT_GAMEPAD_FRAGMENT)
    AddModeEntry(SI_GAMEPAD_STABLE_STABLES_TAB, 1, "EsoUI/Art/Vendor/tabIcon_mounts_up.dds", STABLES_GAMEPAD_FRAGMENT)
    local function OnCategoryChanged(list, selectedData)
        local stablesGamepadScene = SCENE_MANAGER:GetScene("stablesGamepad")
        if self.previousFragment then
            stablesGamepadScene:RemoveFragment(self.previousFragment)
        end
        stablesGamepadScene:AddFragment(selectedData.fragment)
        self.previousFragment = selectedData.fragment
        self:UpdateControls()
    end
    self.tabBar:Commit()
end
function ZO_StableHeader:SetHidden(hidden)
    ZO_MountWindowHeader:SetHidden(hidden)
    if hidden then
        SCENE_MANAGER:Hide("stablesGamepad") 
        STABLE_HEADER.tooltip:ClearLines()
        STABLE_HEADER.tooltipContainer:SetHidden(true)
    else
        -- Determine the correct starting screen for the user, based on whether they currently have any mounts.
        -- NOTE: If the order of the tabs above changes, the index here need to be updated.
        if ZO_Stables_HasAnyMounts() then
            self.tabBar:SetSelectedIndex(3) -- Default to the stable screen if the user already has mounts.
        else
            self.tabBar:SetSelectedIndex(1) -- Or to the buy screen if they do not have mounts.
        end
        SCENE_MANAGER:Show("stablesGamepad") 
    end
end
function ZO_StableHeader:OnStablesInteractStart()
    if IsInGamepadPreferredMode() then
        self:SetHidden(false)
        self:UpdateHeader()
        self.tabBar:Activate()
    end
end
function ZO_StableHeader:OnStablesInteractEnd()
    self:SetHidden(true)
    self.tabBar:Deactivate()
end
function ZO_StableHeader:UpdateHeader()
    self:UpdateControls()
end
function ZO_StableHeader:InitializeEvents()
    self.control:RegisterForEvent(EVENT_STABLE_INTERACT_START, function(eventCode, ...) self:OnStablesInteractStart(...) end)
    self.control:RegisterForEvent(EVENT_STABLE_INTERACT_END, function(eventCode, ...) self:OnStablesInteractEnd(...) end)
    self.control:RegisterForEvent(EVENT_MOUNTS_FULL_UPDATE, function(eventCode, ...) self:UpdateHeader(...) end)
    self.control:RegisterForEvent(EVENT_MOUNT_UPDATE, function(eventCode, ...) self:UpdateHeader(...) end)
    local STABLES_INTERACTION =
    {
        type = "Stable",
        End =   function()
                    self:SetHidden(true)
                end,
        interactTypes = { INTERACTION_STABLE },
    }
    STABLES_GAMEPAD_SCENE = ZO_InteractScene:New("stablesGamepad", SCENE_MANAGER, STABLES_INTERACTION)
end
function ZO_StableHeader:InitializeControls()
    self.money = self.control:GetNamedChild("Money")
    ZO_SharedInventory_ConnectPlayerCurrencyLabel(self.money, GAMEPAD_INVENTORY_CURRENCY_OPTIONS)
    self.freeSlots = self.control:GetNamedChild("FreeSlots")
end
function ZO_StableHeader:UpdateControls()
    local selectedData = self.tabBar:GetSelectedData()
    local selectedFragment = selectedData.fragment
    local useColoring = (selectedFragment == BUY_MOUNT_GAMEPAD_FRAGMENT)
    local numUsedSlots, numSlots = ZO_Stables_GetNumMounts(), GetNumStableSlots() + ACTIVE_MOUNT_INDEX
    if (not useColoring) or (numUsedSlots < numSlots) then
        self.freeSlots:SetText(zo_strformat(SI_GAMEPAD_STABLE_SLOTS_REMAINING_SPACES, numUsedSlots, numSlots))
    else
        self.freeSlots:SetText(zo_strformat(SI_GAMEPAD_STABLE_SLOTS_COMPLETELY_FULL, numUsedSlots, numSlots))
    end
end
    STABLE_HEADER = ZO_StableHeader:New(control)
end
    STABLE_HEADER:OnShown()
end