Back to Home

ESO Lua File v101044

internalingame/tribute/tributetargetviewer_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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
ZO_TributeTargetViewer_Shared = ZO_InitializingObject:Subclass()
function ZO_TributeTargetViewer_Shared:Initialize(control, templateData)
    self.control = control
    self.templateData = templateData
    self.hasTargets = false
    ZO_TRIBUTE_TARGET_VIEWER_MANAGER:RegisterCallback("ActivationStateChanged", function(...) self:OnActivationStateChanged(...) end)
    ZO_TRIBUTE_TARGET_VIEWER_MANAGER:RegisterCallback("CardStateFlagsChanged", function(...) self:OnCardStateFlagsChanged(...) end)
    ZO_TRIBUTE_TARGET_VIEWER_MANAGER:RegisterCallback("ViewingBoardChanged", function(...) self:OnViewingBoardChanged(...) end)
end
function ZO_TributeTargetViewer_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_TributeTargetViewer_Shared:InitializeKeybindStripDescriptors()
    self.keybindStripDescriptor =
    {
        {
            alignment = KEYBIND_STRIP_ALIGN_CENTER,
            name = GetString(SI_TRIBUTE_TARGET_VIEWER_CONFIRM_ACTION),
            order = 2,
            keybind = "UI_SHORTCUT_SECONDARY",
            callback = function()
                TributeConfirmTargetSelection()
            end,
            enabled = function()
                local canConfirm, expectedResult = CanConfirmTributeTargetSelection()
                if canConfirm then
                    return true
                else
                    local resultString = GetString("SI_TRIBUTETARGETSELECTIONCONFIRMATIONRESULT", expectedResult)
                    if resultString ~= "" then
                        return false, resultString
                    else
                        return false
                    end
                end
            end,
            visible = function()
                return not IsTributeTargetSelectionAutoComplete()
            end,
        },
    }
end
function ZO_TributeTargetViewer_Shared:RefreshGridList(resetToTop, reselectData)
    self.targetData = ZO_TRIBUTE_TARGET_VIEWER_MANAGER:GetCurrentTargetData()
    if self.gridList then
        local selectedData = self.gridList:GetSelectedData()
        self.gridList:ClearGridList(not resetToTop)
        if self.targetData then
            for _, cardData in ipairs(self.targetData) 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_TributeTargetViewer_Shared:OnActivationStateChanged(viewer, hasTargets)
    if self.hasTargets ~= hasTargets then
        if hasTargets then
            if self:CanShow() then
                local RESET_TO_TOP = true
                self:RefreshGridList(RESET_TO_TOP)
                self:Show()
            end
        else
            --If we get here, that means we no longer want to be showing the target viewer
            self:Hide()
        end
        self.hasTargets = hasTargets
    end
end
function ZO_TributeTargetViewer_Shared:OnCardStateFlagsChanged(cardInstanceId, stateFlags)
    local ALL_ENTRIES = nil
    local function RefreshCardObject(control, data)
        if data.cardInstanceId == cardInstanceId then
            local cardObject = control.object.cardData
            if cardObject then
                local wasTargeted = cardObject:IsTargeted()
                cardObject:OnStateFlagsChanged(stateFlags)
                local isTargeted = cardObject:IsTargeted()
                --If there is no associated board object for this card, we need to handle playing the sound effects ourselves
                --Otherwise the board object will handle playing the sound for us
                if not TRIBUTE:GetCardByInstanceId(cardInstanceId) and wasTargeted ~= isTargeted then
                    if isTargeted then
                        PlaySound(SOUNDS.TRIBUTE_CARD_TARGETED)
                    else
                        PlaySound(SOUNDS.TRIBUTE_CARD_UNTARGETED)
                    end
                end
            end
            KEYBIND_STRIP:UpdateKeybindButtonGroup(control.object.keybindStripDescriptor)
        end
    end
    self.gridList:RefreshGridListEntryData(ALL_ENTRIES, RefreshCardObject)
    KEYBIND_STRIP:UpdateKeybindButtonGroup(self.keybindStripDescriptor)
end
function ZO_TributeTargetViewer_Shared:Hide()
    if self.gridList then
        self.gridList:ClearGridList()
    end
end
function ZO_TributeTargetViewer_Shared:RefreshInstruction()
    local instructionText = ZO_TRIBUTE_TARGET_VIEWER_MANAGER:GetInstructionText()
    self:SetInstruction(instructionText)
end
function ZO_TributeTargetViewer_Shared:OnViewingBoardChanged(isViewingBoard)
    if isViewingBoard then
        SCENE_MANAGER:RemoveFragment(self.fragment)
    elseif self:CanShow() then
        SCENE_MANAGER:AddFragment(self.fragment)
    end
end
ZO_TributeTargetViewer_Shared.InitializeControls = ZO_TributeTargetViewer_Shared:MUST_IMPLEMENT()
ZO_TributeTargetViewer_Shared.CanShow = ZO_TributeTargetViewer_Shared:MUST_IMPLEMENT()
ZO_TributeTargetViewer_Shared.Show = ZO_TributeTargetViewer_Shared:MUST_IMPLEMENT()
ZO_TributeTargetViewer_Shared.SetInstruction = ZO_TributeTargetViewer_Shared:MUST_IMPLEMENT()