Back to Home

ESO Lua File v101044

internalingame/tribute/tributeconfinementviewer_manager.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
-------------------------------------
-- Tribute Confinement Viewer Manager
-------------------------------------
ZO_TributeConfinementViewer_Manager = ZO_TributeViewer_Manager_Base:Subclass()
function ZO_TributeConfinementViewer_Manager:Initialize()
    ZO_TributeViewer_Manager_Base.Initialize(self)
    self.confinedCardsData = {}
    ZO_HELP_OVERLAY_SYNC_OBJECT:SetHandler("OnShown", function(isVisible)
        self:RequestClose()
    end, "tributeConfinementViewer")
    self.keybindStripDescriptor = 
    {
        alignment = KEYBIND_STRIP_ALIGN_RIGHT,
        {
            name = GetString(SI_TRIBUTE_CONFINEMENT_VIEWER_BACK_ACTION),
            keybind = "UI_SHORTCUT_NEGATIVE",
            callback = function()
                self:RequestClose()
            end,
        },
    }
end
function ZO_TributeConfinementViewer_Manager:RegisterForEvents(systemName)
    ZO_TributeViewer_Manager_Base.RegisterForEvents(self, systemName)
    EVENT_MANAGER:RegisterForEvent(systemName, EVENT_TRIBUTE_BEGIN_TARGET_SELECTION, function(_, needsTargetViewer)
        --Close the viewer if target selection begins
        if self:IsActive() then
            self:RequestClose()
        end
    end)
    EVENT_MANAGER:RegisterForEvent(systemName, EVENT_TRIBUTE_END_TARGET_SELECTION, function()
        --Close the viewer if target selection ends
        if self:IsActive() then
            self:RequestClose()
        end
    end)
    EVENT_MANAGER:RegisterForEvent(systemName, EVENT_TRIBUTE_BEGIN_MECHANIC_SELECTION, function(_, cardInstanceId)
        --Close the viewer if mechanic selection begins
        if self:IsActive() then
            self:RequestClose()
        end
    end)
    EVENT_MANAGER:RegisterForEvent(systemName, EVENT_TRIBUTE_AGENT_CONFINEMENTS_CHANGED, function(_, agentInstanceId)
        if self:IsActive() and self.viewingAgentInstanceId == agentInstanceId then
            self:RefreshConfinedCards()
            if #self.confinedCardsData > 0 then
                self:FireCallbacks("ConfinementsChanged")
            else
                --If we have no confined cards, we should automatically close
                self:RequestClose()
            end
        end
    end)
end
function ZO_TributeConfinementViewer_Manager:SetViewingAgent(viewingAgentInstanceId, previousViewer)
    if self.viewingAgentInstanceId ~= viewingAgentInstanceId then
        --Order matters. Set the data before firing the activation state change
        self.viewingAgentInstanceId = viewingAgentInstanceId
        --If we are opening from a viewer, store it off so we know where to return later
        self.previousViewer = previousViewer
        self:RefreshConfinedCards()
        if viewingAgentInstanceId then
            --Order matters. Wait until the callback has been fired before adding the keybinds
            self:FireActivationStateChanged()
            KEYBIND_STRIP:AddKeybindButtonGroup(self.keybindStripDescriptor)
        else
            --Order matters. Remove the keybinds before firing the callback
            KEYBIND_STRIP:RemoveKeybindButtonGroup(self.keybindStripDescriptor)
            self:FireActivationStateChanged()
        end
    end
end
function ZO_TributeConfinementViewer_Manager:GetConfinedCardsData()
    return self.confinedCardsData
end
function ZO_TributeConfinementViewer_Manager:GetConfinementText()
    if self.viewingAgentInstanceId then
        local cardDefId = GetTributeCardInstanceDefIds(self.viewingAgentInstanceId)
        local colorizedName = ZO_SELECTED_TEXT:Colorize(GetTributeCardName(cardDefId))
        return zo_strformat(SI_TRIBUTE_CONFINEMENT_VIEWER_HEADER_FORMATTER, colorizedName)
    end
end
function ZO_TributeConfinementViewer_Manager:RefreshConfinedCards()
    ZO_ClearNumericallyIndexedTable(self.confinedCardsData)
    local viewingAgentInstanceId = self.viewingAgentInstanceId
    if viewingAgentInstanceId then
        local numConfined = GetNumConfinedTributeCards(viewingAgentInstanceId)
        for confinedIndex = 1, numConfined do
            local cardInstanceId = GetConfinedTributeCardInstanceId(viewingAgentInstanceId, confinedIndex)
            local cardId, patronId = GetTributeCardInstanceDefIds(cardInstanceId)
            local data =
            {
                cardId = cardId,
                patronId = patronId,
                cardInstanceId = cardInstanceId,
            }
            table.insert(self.confinedCardsData, data)
        end
    end
end
-- Required Overrides
function ZO_TributeConfinementViewer_Manager:GetSystemName()
    return "TributeConfinementViewer_Manager"
end
function ZO_TributeConfinementViewer_Manager:OnGamepadPreferredModeChanged()
    --If the viewer is already up, we need to close and reopen it to make sure it switches to the correct UI
    if self:IsActive() then
        local viewingAgent = self.viewingAgentInstanceId
        local previousViewer = self.previousViewer
        --Specifically don't call RequestClose here, so we don't attempt to reopen the previous viewer
        self:SetViewingAgent(nil)
        self:SetViewingAgent(viewingAgent, previousViewer)
    end
end
--The confinement viewer does not have functionality for viewing the board while it's open
function ZO_TributeConfinementViewer_Manager:IsViewingBoard()
    return false
end
function ZO_TributeConfinementViewer_Manager:IsActive()
    return self.viewingAgentInstanceId ~= nil
end
--The confinement viewer always has a visible keybind strip
function ZO_TributeConfinementViewer_Manager:IsKeybindStripVisible()
    return true
end
function ZO_TributeConfinementViewer_Manager:RequestClose(isInterceptingCloseAction)
    local previousViewer = self.previousViewer
    local NO_AGENT = nil
    self:SetViewingAgent(NO_AGENT)
    --If we were opened from a viewer, attempt to re-open that viewer upon closing
    if previousViewer then
        previousViewer:OpenFromConfinementViewer(isInterceptingCloseAction)
    end
end
ZO_TRIBUTE_CONFINEMENT_VIEWER_MANAGER = ZO_TributeConfinementViewer_Manager:New()