Back to Home

ESO Lua File v101037

internalingame/tribute/tributepileviewer_shared.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
ZO_TributePileViewer_Shared = ZO_InitializingObject:Subclass()
function ZO_TributePileViewer_Shared:Initialize(control, templateData)
    self.control = control
    self.templateData = templateData
    ZO_TRIBUTE_PILE_VIEWER_MANAGER:RegisterCallback("ViewingPileChanged", function(...) self:OnViewingPileChanged(...) end)
    ZO_TRIBUTE_PILE_VIEWER_MANAGER:RegisterCallback("CardStateFlagsChanged", function(...) self:OnCardStateFlagsChanged(...) end)
    ZO_TRIBUTE_PILE_VIEWER_MANAGER:RegisterCallback("AgentDefeatCostChanged", function(...) self:OnAgentDefeatCostChanged(...) end)
end
function ZO_TributePileViewer_Shared:InitializeGridList()
    self.gridContainerControl = self.control:GetNamedChild("GridContainer")
    self.gridListControl = self.gridContainerControl:GetNamedChild("GridList")
    self.gridListEmptyLabel = self.gridContainerControl:GetNamedChild("ContentEmptyLabel")
    self.gridList = self.templateData.gridListClass:New(self.gridListControl)
    local function CardEntryEqualityFunction(left, right)
        return left.cardInstanceId == right.cardInstanceId
    end
    local cardEntryData = self.templateData.cardEntryData
    local HIDE_CALLBACK = nil
    self.gridList:AddEntryTemplate(cardEntryData.entryTemplate, cardEntryData.width, cardEntryData.height, ZO_DefaultGridTileEntrySetup, HIDE_CALLBACK, ZO_DefaultGridTileEntryReset, cardEntryData.gridPaddingX, cardEntryData.gridPaddingY)
    self.gridList:SetEntryTemplateEqualityFunction(cardEntryData.entryTemplate, CardEntryEqualityFunction)
end
function ZO_TributePileViewer_Shared:RefreshGridList(resetToTop, reselectData)
    self.currentPileData = ZO_TRIBUTE_PILE_VIEWER_MANAGER:GetCurrentPileData()
    if self.gridList then
        local selectedData = self.gridList:GetSelectedData()
        self.gridList:ClearGridList(not resetToTop)
        if self.currentPileData then
            local cardList = self.currentPileData:GetCardList()
            for _, cardData in ipairs(cardList) do
                local entryData = ZO_EntryData:New(cardData)
                self.gridList:AddEntry(entryData, self.templateData.cardEntryData.entryTemplate)
            end
        end
        if reselectData then
            self.gridList:SetAutoSelectToMatchingDataEntry(selectedData)
        end
        self.gridList:CommitGridList()
        self.gridListEmptyLabel:SetHidden(self.gridList:HasEntries())
    end
end
function ZO_TributePileViewer_Shared:OnViewingPileChanged(boardLocation)
    if self.viewingPileLocation ~= boardLocation then
        if boardLocation then
            if self:CanShow() then
                local RESET_TO_TOP = true
                self:RefreshGridList(RESET_TO_TOP)
                --If we don't already have a viewing pile location, then that means we are not currently viewing a pile
                if self.viewingPileLocation == nil then
                    self:Show()
                end
            end
        else
            --If we get here, that means we no longer want to be showing the pile viewer
            self:Hide()
        end
        self.viewingPileLocation = boardLocation
    elseif self.viewingPileLocation and self:CanShow() then
        --If we get here, then we just need to refresh the pile we are currently viewing
        self:RefreshPile()
    end
end
function ZO_TributePileViewer_Shared:OnCardStateFlagsChanged(cardInstanceId, stateFlags)
    if not self:CanShow() then
        return
    end
    local ALL_ENTRIES = nil
    local function RefreshCardObject(control, data)
        if data.cardInstanceId == cardInstanceId then
            local cardObject = control.object.cardData
            if cardObject then
                cardObject:OnStateFlagsChanged(stateFlags)
            end
            KEYBIND_STRIP:UpdateKeybindButtonGroup(control.object.keybindStripDescriptor)
        end
    end
    self.gridList:RefreshGridListEntryData(ALL_ENTRIES, RefreshCardObject)
end
function ZO_TributePileViewer_Shared:OnAgentDefeatCostChanged(cardInstanceId, delta, newDefeatCost, shouldPlayFx)
    if not self:CanShow() then
        return
    end
    local ALL_ENTRIES = nil
    local function RefreshCardObject(control, data)
        if data.cardInstanceId == cardInstanceId then
            local cardObject = control.object.cardData
            if cardObject then
                if shouldPlayFx then
                    --Let the world space cards handle playing the SFX
                    local SUPPRESS_SOUND = true
                    cardObject:UpdateDefeatCost(newDefeatCost, delta, SUPPRESS_SOUND)
                else
                    cardObject:RefreshDefeatCost()
                end
            end
            KEYBIND_STRIP:UpdateKeybindButtonGroup(control.object.keybindStripDescriptor)
        end
    end
    self.gridList:RefreshGridListEntryData(ALL_ENTRIES, RefreshCardObject)
end
function ZO_TributePileViewer_Shared:Hide()
    if self.gridList then
        self.gridList:ClearGridList()
    end
end
ZO_TributePileViewer_Shared.InitializeControls = ZO_TributePileViewer_Shared:MUST_IMPLEMENT()
ZO_TributePileViewer_Shared.InitializeKeybindStripDescriptors = ZO_TributePileViewer_Shared:MUST_IMPLEMENT()
ZO_TributePileViewer_Shared.RefreshPile = ZO_TributePileViewer_Shared:MUST_IMPLEMENT()
ZO_TributePileViewer_Shared.CanShow = ZO_TributePileViewer_Shared:MUST_IMPLEMENT()
ZO_TributePileViewer_Shared.Show = ZO_TributePileViewer_Shared:MUST_IMPLEMENT()