ESO Lua File v100010

ingame/zo_loot/console/loothistory_console.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
local GAMEPAD_LOOT_HISTORY_ENTRY_TEMPLATE = "ZO_LootGamepad_HistoryEntry"
local ZO_LootHistory_Gamepad = ZO_Object:Subclass()
function ZO_LootHistory_Gamepad:New(control)
    history = ZO_Object.New(self)
    history:Initialize(control)
    return history
end
local function LootSetupFunction(control, data)
    local label = control:GetNamedChild("Label")
    label:SetText(data.text)
    label:SetColor(data.color:UnpackRGBA())
    local icon = control:GetNamedChild("Icon")
    icon:SetTexture(data.icon)
    local background = control:GetNamedChild("bg")
    background:SetColor(data.backgroundColor:UnpackRGBA())
    
    local stackCount = icon:GetNamedChild("StackCount")
    stackCount:SetText(data.stackCount)
    stackCount:SetHidden(data.stackCount <= 1)
end
function ZO_LootHistory_Gamepad:Initialize(control)
    self.fadeAnim = ZO_AlphaAnimation:New(control)
    self.fadeAnim:SetMinMaxAlpha(0.0, 1.0)
    self.lootQueue = {}
end
local MONEY_TYPE_GOLD = 1
local MONEY_TYPE_ALLIANCE_POINTS = 2
local MONEY_TEXT = {
    [MONEY_TYPE_GOLD] = GetString(SI_CURRENCY_GOLD),
    [MONEY_TYPE_ALLIANCE_POINTS] = GetString(SI_CURRENCY_ALLIANCE_POINTS),
}
local MONEY_ICONS = {
    [MONEY_TYPE_GOLD] = LOOT_MONEY_ICON,
    [MONEY_TYPE_ALLIANCE_POINTS] = "EsoUI/Art/currency/gamepad/gp_alliancePoints.dds",
}
local MONEY_TEXT_COLOR = ZO_SELECTED_TEXT
local MONEY_BACKGROUND_COLORS = {
    [MONEY_TYPE_GOLD] = ZO_ColorDef:New(GetInterfaceColor(INTERFACE_COLOR_TYPE_CURRENCY, CURRENCY_COLOR_GOLD)),
    [MONEY_TYPE_ALLIANCE_POINTS] = ZO_ColorDef:New(GetInterfaceColor(INTERFACE_COLOR_TYPE_CURRENCY, CURRENCY_COLOR_ALLIANCE_POINTS)),
}
function ZO_LootHistory_Gamepad:RegisterForEvents(control)
    local function InsertOrQueue(lootData)
        if self.hidden then
            table.insert(self.lootQueue, lootData)
        else
            self.loot:AddEntry(GAMEPAD_LOOT_HISTORY_ENTRY_TEMPLATE, lootData)
        end
    end
    local function OnLootReceived(_, _, itemLink, stackCount)
        if not SCENE_MANAGER:IsSceneOnStack("gamepad_inventory_root") then
            local itemName = GetItemLinkName(itemLink)
            local icon = GetItemLinkInfo(itemLink)
            local quality = GetItemLinkQuality(itemLink)
            local color = ZO_ColorDef:New(GetInterfaceColor(INTERFACE_COLOR_TYPE_ITEM_QUALITY_COLORS, quality))
            local lootData = {
                lines = {
                    { text = zo_strformat(SI_TOOLTIP_ITEM_NAME, itemName), icon = icon, stackCount = stackCount, color = color, backgroundColor = color }
                }
            }
            InsertOrQueue(lootData)
        end
    end
    local function AddMoneyEntry(moneyAdded, moneyType)
        local lootData = {
            lines = {
                { text = MONEY_TEXT[moneyType], icon = MONEY_ICONS[moneyType], stackCount = moneyAdded, color = MONEY_TEXT_COLOR, backgroundColor = MONEY_BACKGROUND_COLORS[moneyType] }
            }
        }
        InsertOrQueue(lootData)
    end
    local function OnGoldUpdate(_, newGold, oldGold, reason)
        if not SCENE_MANAGER:IsSceneOnStack("gamepad_inventory_root") then
            if reason == CURRENCY_CHANGE_REASON_LOOT or reason == CURRENCY_CHANGE_REASON_LOOT_STOLEN or reason == CURRENCY_CHANGE_REASON_QUESTREWARD then
                local goldAdded = newGold - oldGold
                AddMoneyEntry(goldAdded, MONEY_TYPE_GOLD)
            end
        end
    end
    local function OnGoldPickpocket(_, goldAmount)
        AddMoneyEntry(goldAmount, MONEY_TYPE_GOLD)
    end
    local function OnAlliancePointUpdate(_, _, _, alliancePoints)
        if SCENE_MANAGER:IsShowing("gamepadInteract") then
            AddMoneyEntry(alliancePoints, MONEY_TYPE_ALLIANCE_POINTS)
        end
    end
    control:RegisterForEvent(EVENT_LOOT_RECEIVED, OnLootReceived)
    control:RegisterForEvent(EVENT_MONEY_UPDATE, OnGoldUpdate)
    control:RegisterForEvent(EVENT_JUSTICE_GOLD_PICKPOCKETED, OnGoldPickpocket)
    control:RegisterForEvent(EVENT_ALLIANCE_POINT_UPDATE, OnAlliancePointUpdate)
end
function ZO_LootHistory_Gamepad:InitializeFragment()
    GAMEPAD_LOOT_HISTORY_FRAGMENT = ZO_HUDFadeSceneFragment:New(ZO_LootGamepad_History)
    GAMEPAD_LOOT_HISTORY_FRAGMENT:RegisterCallback("StateChange", function(oldState, newState)
        if newState == SCENE_FRAGMENT_SHOWN then
            self.hidden = false
            self:DisplayLootQueue()
        elseif newState == SCENE_FRAGMENT_HIDING then
            self.hidden = true
            self.loot:FadeAll()
        end
    end)
end
function ZO_LootHistory_Gamepad:InitializeFadingControlBuffer(control)
    local _, screenHeight = GuiRoot:GetDimensions()
    local MAX_HEIGHT = screenHeight/2
    local HORIZ_OFFSET = ZO_GAMEPAD_SCREEN_PADDING + ZO_GAMEPAD_DEFAULT_HORIZ_PADDING
    local VERTICAL_OFFSET = -164
    local anchor = ZO_Anchor:New(BOTTOMLEFT, GuiRoot, BOTTOMLEFT, HORIZ_OFFSET, VERTICAL_OFFSET)
    local MAX_LINES_PER_ENTRY = 1
    self.loot = ZO_FadingControlBuffer:New(control, nil, MAX_HEIGHT, MAX_LINES_PER_ENTRY, "AlertFadeGamepad", "AlertTranslateGamepad", anchor)
    self.loot:AddTemplate(GAMEPAD_LOOT_HISTORY_ENTRY_TEMPLATE, {setup = LootSetupFunction})
    self.loot:SetTranslateDuration(1500) -- in milliseconds
    self.loot:SetHoldTimes(6000) -- in milliseconds
    self.loot:SetFadesInImmediately(true)
    self.loot:SetPushDirection(FCB_PUSH_DIRECTION_UP)
end
function ZO_LootHistory_Gamepad:DisplayLootQueue()
    for i, entry in ipairs(self.lootQueue) do
        self.loot:AddEntry(GAMEPAD_LOOT_HISTORY_ENTRY_TEMPLATE, entry)
        self.lootQueue[i] = nil
    end
end
    LOOT_HISTORY_GAMEPAD = ZO_LootHistory_Gamepad:New(control)
end