Nenue@62
|
1 -- Veneer
|
Nenue@62
|
2 -- PaperDoll.lua
|
Nenue@62
|
3 -- Created: 8/16/2016 8:18 AM
|
Nenue@62
|
4 -- %file-revision%
|
Nenue@80
|
5 -- Displays the item level and modifications of character sheet equipment, including artifact power
|
Nenue@93
|
6 local print = DEVIAN_WORKSPACE and function(...) print('PaperDoll', ...) end or nop
|
Nenue@96
|
7 local artifactSlot
|
Nenue@93
|
8 local slot_overlays = {}
|
Nenue@93
|
9 VeneerPaperDollMixin = {
|
Nenue@93
|
10 anchorFrame = 'CharacterFrame',
|
Nenue@93
|
11 anchorPoint = 'TOPLEFT',
|
Nenue@93
|
12 KnownRelics = {},
|
Nenue@93
|
13 }
|
Nenue@93
|
14
|
Nenue@93
|
15 local relic_slot_paths = {
|
Nenue@93
|
16 Arcane = {"Relic-Arcane-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.849609375, 0.919921875, 0.1181640625, 0.1884765625, false, false},
|
Nenue@93
|
17 Blood = {"Relic-Blood-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.921875, 0.9921875, 0.1181640625, 0.1884765625, false, false},
|
Nenue@93
|
18 Fel = {"Relic-Fel-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.572265625, 0.642578125, false, false},
|
Nenue@93
|
19 Fire = {"Relic-Fire-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.669921875, 0.740234375, 0.572265625, 0.642578125, false, false},
|
Nenue@93
|
20 Frost = {"Relic-Frost-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.7421875, 0.8125, 0.572265625, 0.642578125, false, false},
|
Nenue@93
|
21 Holy = {"Relic-Holy-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.814453125, 0.884765625, 0.572265625, 0.642578125, false, false},
|
Nenue@93
|
22 Iron = {"Relic-Iron-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.88671875, 0.95703125, 0.572265625, 0.642578125, false, false},
|
Nenue@93
|
23 Life = {"Relic-Life-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.64453125, 0.71484375, false, false},
|
Nenue@93
|
24 Shadow = {"Relic-Shadow-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.716796875, 0.787109375, false, false},
|
Nenue@93
|
25 Water = {"Relic-Water-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.7890625, 0.859375, false, false},
|
Nenue@93
|
26 Wind = {"Relic-Wind-Slot", [[Interface\Artifacts\Artifacts.BLP]], 72, 72, 0.59765625, 0.66796875, 0.861328125, 0.931640625, false, false},
|
Nenue@93
|
27 }
|
Nenue@93
|
28
|
Nenue@93
|
29 local slots_left = {'TOPLEFT', 'TOPRIGHT', 1, 0, 'TOPLEFT', 'BOTTOMLEFT', 0, -1}
|
Nenue@93
|
30 local slots_right = {'TOPRIGHT', 'TOPLEFT', -1, 0, 'TOPRIGHT', 'BOTTOMRIGHT', 0, -1}
|
Nenue@93
|
31 local slots_bottomleft = {'BOTTOMRIGHT', 'TOPRIGHT', 0, 1, 'BOTTOMRIGHT', 'TOPRIGHT', 0, 1 }
|
Nenue@93
|
32 local slots_bottomright = {'BOTTOMLEFT', 'TOPLEFT', 0, -1, 'BOTTOMLEFT', 'TOPLEFT', 0, 1}
|
Nenue@62
|
33
|
Nenue@64
|
34 local slot_anchors = {
|
Nenue@93
|
35 [1] = slots_left,
|
Nenue@93
|
36 [2] = slots_left,
|
Nenue@93
|
37 [3] = slots_left,
|
Nenue@93
|
38 [15] = slots_left,
|
Nenue@93
|
39 [5] = slots_left,
|
Nenue@93
|
40 [9] = slots_left,
|
Nenue@62
|
41
|
Nenue@93
|
42 [10] = slots_right,
|
Nenue@93
|
43 [6] = slots_right,
|
Nenue@93
|
44 [7] = slots_right,
|
Nenue@93
|
45 [8] = slots_right,
|
Nenue@93
|
46 [11] = slots_right,
|
Nenue@93
|
47 [12] = slots_right,
|
Nenue@93
|
48 [13] = slots_right,
|
Nenue@93
|
49 [14] = slots_right,
|
Nenue@64
|
50
|
Nenue@93
|
51 [16] = slots_bottomleft,
|
Nenue@93
|
52 [17] = slots_bottomright,
|
Nenue@64
|
53 }
|
Nenue@64
|
54
|
Nenue@64
|
55
|
Nenue@93
|
56 function VeneerPaperDollMixin:OnLoad()
|
Nenue@93
|
57 hooksecurefunc("PaperDollItemSlotButton_Update", function(...)
|
Nenue@93
|
58 self:GetSlotButton(PaperDollItemsFrame, ...)
|
Nenue@93
|
59 end)
|
Nenue@64
|
60
|
Nenue@93
|
61 hooksecurefunc("PaperDollFrame_UpdateStats", function(...)
|
Nenue@93
|
62 self:GetStats(PaperDollItemsFrame, ...)
|
Nenue@93
|
63 end)
|
Nenue@64
|
64
|
Nenue@93
|
65 self:RegisterEvent('INSPECT_READY')
|
Nenue@102
|
66 Veneer:AddHandler(self)
|
Nenue@80
|
67 end
|
Nenue@80
|
68
|
Nenue@93
|
69 function VeneerPaperDollMixin:SetupInspectFrame()
|
Nenue@93
|
70 hooksecurefunc("InspectPaperDollItemSlotButton_Update", function(...)
|
Nenue@93
|
71 self:GetSlotButton(InspectFrame, ...)
|
Nenue@93
|
72 end)
|
Nenue@93
|
73 self:RegisterEvent('INSPECT_READY')
|
Nenue@93
|
74 end
|
Nenue@93
|
75 function VeneerPaperDollMixin:SetupArtifactUI()
|
Nenue@80
|
76 end
|
Nenue@80
|
77
|
Nenue@93
|
78 function VeneerPaperDollMixin:Setup()
|
Nenue@93
|
79 VeneerData.PaperDoll = VeneerData.PaperDoll or {}
|
Nenue@93
|
80 VeneerData.PaperDoll.KnownRelics = VeneerData.PaperDoll.KnownRelics or {}
|
Nenue@93
|
81 self.KnownRelics = VeneerData.PaperDoll.KnownRelics
|
Nenue@80
|
82
|
Nenue@93
|
83 self:RegisterEvent('UNIT_INVENTORY_CHANGED')
|
Nenue@93
|
84 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
|
Nenue@93
|
85 self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED')
|
Nenue@116
|
86 self:RegisterEvent('ARTIFACT_RELIC_INFO_RECEIVED')
|
Nenue@96
|
87 self:RegisterEvent('ARTIFACT_UPDATE')
|
Nenue@80
|
88
|
Nenue@93
|
89 self:MarkForUpdate()
|
Nenue@133
|
90
|
Nenue@133
|
91
|
Nenue@62
|
92 end
|
Nenue@62
|
93
|
Nenue@93
|
94 function VeneerPaperDollMixin:MarkForUpdate()
|
Nenue@93
|
95 for frame, overlays in pairs(slot_overlays) do
|
Nenue@93
|
96 for slot, overlay in pairs(overlays) do
|
Nenue@93
|
97 if overlay:IsVisible() then
|
Nenue@93
|
98 overlay:Update()
|
Nenue@93
|
99 else
|
Nenue@93
|
100 overlay.isDirty = true
|
Nenue@93
|
101 end
|
Nenue@64
|
102 end
|
Nenue@64
|
103 end
|
Nenue@64
|
104 end
|
Nenue@64
|
105
|
Nenue@93
|
106 function VeneerPaperDollMixin:GetStats()
|
Nenue@93
|
107 end
|
Nenue@93
|
108 function VeneerPaperDollMixin:GetSlotButton(panel, frame)
|
Nenue@93
|
109 print('|cFF00FF88'..self:GetName()..':GetSlotButton()', frame:GetName(), frame:GetID())
|
Nenue@93
|
110 local slot = frame:GetID()
|
Nenue@93
|
111 local unit = panel.unit or 'player'
|
Nenue@93
|
112 if slot_anchors[slot] then
|
Nenue@93
|
113 slot_overlays[panel] = slot_overlays[panel] or {}
|
Nenue@93
|
114 local overlay = slot_overlays[panel][slot]
|
Nenue@93
|
115 if not overlay then
|
Nenue@96
|
116 print('creating slot overlay', slot)
|
Nenue@93
|
117 overlay = CreateFrame('Frame', 'VeneerPaperDollSlot' .. unit .. slot, frame, 'VeneerPaperDollSlotInfoTemplate')
|
Nenue@93
|
118 overlay:SetID(slot)
|
Nenue@93
|
119 slot_overlays[panel][slot] = overlay
|
Nenue@93
|
120 overlay.checkRelic = frame.checkRelic
|
Nenue@71
|
121
|
Nenue@93
|
122 local anchorPoint, relativePoint, dX, dY, statPoint, statRelative, statdX, statdY = unpack(slot_anchors[slot])
|
Nenue@93
|
123 local offset = 7
|
Nenue@93
|
124 overlay:SetPoint(anchorPoint, frame, relativePoint, dX * offset, dY * offset)
|
Nenue@93
|
125 overlay:SetSize(frame:GetWidth()*3, frame:GetHeight())
|
Nenue@93
|
126
|
Nenue@93
|
127 local relativeFrame = overlay
|
Nenue@93
|
128 for i, region in ipairs(overlay.StatsLeft) do
|
Nenue@93
|
129 region:ClearAllPoints()
|
Nenue@93
|
130 print(statPoint, relativeFrame, (i == 1) and statPoint or statRelative)
|
Nenue@93
|
131 region:SetPoint(statPoint, relativeFrame, (i == 1) and statPoint or statRelative, 0, 0)
|
Nenue@93
|
132 relativeFrame = region
|
Nenue@93
|
133 end
|
Nenue@93
|
134 if slot == 16 then
|
Nenue@93
|
135 overlay.Sockets:ClearAllPoints()
|
Nenue@93
|
136 overlay.Sockets:SetPoint('BOTTOM', CharacterFrameInsetBg, 'BOTTOM', 0, frame:GetHeight() + 14)
|
Nenue@93
|
137 overlay.ItemLevel:SetFontObject(VeneerNumberFontLarge)
|
Nenue@93
|
138 overlay.ItemLevel:ClearAllPoints()
|
Nenue@93
|
139 overlay.ItemLevel:SetPoint('BOTTOM', overlay.Sockets, 'TOP', 0, 4)
|
Nenue@96
|
140 if unit == 'player' then
|
Nenue@96
|
141 artifactSlot = overlay
|
Nenue@96
|
142 end
|
Nenue@96
|
143
|
Nenue@93
|
144 end
|
Nenue@93
|
145
|
Nenue@93
|
146 print(overlay.Sockets:GetPoint(1))
|
Nenue@93
|
147 overlay.anchors = slot_anchors[slot]
|
Nenue@93
|
148 end
|
Nenue@93
|
149
|
Nenue@93
|
150 overlay.unit = unit
|
Nenue@93
|
151 overlay.checkRelic = (unit == 'player' and slot == 16)
|
Nenue@93
|
152
|
Nenue@93
|
153
|
Nenue@93
|
154 if frame.hasItem then
|
Nenue@93
|
155 overlay.isDirty = true
|
Nenue@93
|
156 overlay:Show()
|
Nenue@93
|
157 else
|
Nenue@93
|
158 overlay:Hide()
|
Nenue@93
|
159 end
|
Nenue@64
|
160 end
|
Nenue@64
|
161 end
|
Nenue@64
|
162
|
Nenue@93
|
163 function VeneerPaperDollMixin:OnEvent(event, arg)
|
Nenue@93
|
164 print(event, arg)
|
Nenue@93
|
165 if event == 'ADDON_LOADED' then
|
Nenue@93
|
166 if arg == 'Blizzard_InspectUI' then
|
Nenue@93
|
167 self:SetupInspectFrame()
|
Nenue@93
|
168 end
|
Nenue@93
|
169 if arg == 'Blizzard_ArtifactUI' then
|
Nenue@93
|
170 self:SetupArtifactUI()
|
Nenue@93
|
171 self:MarkForUpdate()
|
Nenue@93
|
172 end
|
Nenue@93
|
173 elseif event == 'ARTIFACT_UPDATE' then
|
Nenue@133
|
174 self:ScoopRelics()
|
Nenue@96
|
175 if artifactSlot then
|
Nenue@133
|
176 artifactSlot.isDirty = true
|
Nenue@116
|
177 end
|
Nenue@116
|
178 elseif event == 'ARTIFACT_RELIC_INFO_RECEIVED' then
|
Nenue@116
|
179 if artifactSlot then
|
Nenue@133
|
180 artifactSlot.isDirty = true
|
Nenue@96
|
181 end
|
Nenue@93
|
182 else
|
Nenue@93
|
183 if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then
|
Nenue@93
|
184 if arg ~= 'player' then
|
Nenue@93
|
185 return
|
Nenue@93
|
186 end
|
Nenue@65
|
187 end
|
Nenue@93
|
188 self:MarkForUpdate()
|
Nenue@65
|
189 end
|
Nenue@80
|
190 end
|
Nenue@66
|
191
|
Nenue@64
|
192
|
Nenue@93
|
193 VeneerPaperDollSlotMixin = {}
|
Nenue@66
|
194
|
Nenue@93
|
195 function VeneerPaperDollSlotMixin:OnLoad()
|
Nenue@93
|
196 self.SocketText = {}
|
Nenue@93
|
197 self.SocketType = {}
|
Nenue@93
|
198 self.SocketLink = {}
|
Nenue@133
|
199 self.SocketForge = {}
|
Nenue@93
|
200 end
|
Nenue@93
|
201 function VeneerPaperDollSlotMixin:OnShow()
|
Nenue@93
|
202 if self.isDirty then
|
Nenue@93
|
203 self:Update()
|
Nenue@93
|
204 end
|
Nenue@93
|
205 end
|
Nenue@133
|
206
|
Nenue@133
|
207 function VeneerPaperDollSlotMixin:OnHide()
|
Nenue@133
|
208 if GameTooltip:IsOwned(self) then
|
Nenue@133
|
209 GameTooltip:Hide()
|
Nenue@133
|
210 end
|
Nenue@133
|
211 end
|
Nenue@133
|
212
|
Nenue@93
|
213 function VeneerPaperDollSlotMixin:OnUpdate()
|
Nenue@93
|
214 if self.isDirty then
|
Nenue@93
|
215 --print('|cFF00FF00pushing update for', self:GetID())
|
Nenue@93
|
216 self:Update()
|
Nenue@93
|
217 end
|
Nenue@80
|
218
|
Nenue@93
|
219 if self.checkRelic then
|
Nenue@133
|
220 local setTip
|
Nenue@93
|
221 for i = 1, 3 do
|
Nenue@133
|
222 if self.SocketType[i] and self.Sockets.SocketIcon[i]:IsMouseOver() then
|
Nenue@133
|
223 setTip = self.SocketForge[i]
|
Nenue@93
|
224 end
|
Nenue@93
|
225 end
|
Nenue@133
|
226 if setTip then
|
Nenue@133
|
227 GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
Nenue@133
|
228 for _, info in ipairs(setTip) do
|
Nenue@133
|
229 if type(info) == 'table' then
|
Nenue@133
|
230 GameTooltip:AddLine(unpack(info))
|
Nenue@133
|
231 elseif type(info) == 'string' then
|
Nenue@133
|
232 GameTooltip:AddLine(info)
|
Nenue@133
|
233 end
|
Nenue@93
|
234 end
|
Nenue@133
|
235 GameTooltip:Show()
|
Nenue@133
|
236 elseif GameTooltip:IsOwned(self) then
|
Nenue@133
|
237 GameTooltip:Hide()
|
Nenue@93
|
238 end
|
Nenue@93
|
239 end
|
Nenue@93
|
240 end
|
Nenue@93
|
241
|
Nenue@133
|
242 local tooltipName= 'VeneerPaperDollTooltip'
|
Nenue@93
|
243 function VeneerPaperDollSlotMixin:UpdateRelicInfo()
|
Nenue@93
|
244
|
Nenue@93
|
245
|
Nenue@93
|
246 local itemID = GetInventoryItemID(self.unit, 16)
|
Nenue@93
|
247 if not itemID then
|
Nenue@93
|
248 return
|
Nenue@93
|
249 end
|
Nenue@93
|
250
|
Nenue@133
|
251 print('|cFF00FFFFRelic Info:', itemID)
|
Nenue@133
|
252 local guid = UnitGUID(self.unit or 'player')
|
Nenue@133
|
253 local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID]
|
Nenue@93
|
254
|
Nenue@133
|
255 if not relicCache then
|
Nenue@133
|
256 relicCache = {}
|
Nenue@133
|
257 VeneerPaperDoll.KnownRelics[guid] = VeneerPaperDoll.KnownRelics[guid] or {}
|
Nenue@133
|
258 VeneerPaperDoll.KnownRelics[guid][itemID] = relicCache
|
Nenue@133
|
259 end
|
Nenue@133
|
260
|
Nenue@133
|
261 for i = 1, 3 do
|
Nenue@133
|
262 if relicCache[i] then
|
Nenue@133
|
263 local relicIcon, relicLevel, relicType, relicLink, relicForge = unpack(relicCache[i])
|
Nenue@133
|
264
|
Nenue@133
|
265 print('reading', i, unpack(relicCache[i]))
|
Nenue@133
|
266 self.SocketInfo[i] = relicIcon
|
Nenue@133
|
267 self.SocketText[i] = relicLevel
|
Nenue@133
|
268 self.SocketType[i] = relicType
|
Nenue@133
|
269 self.SocketLink[i] = relicLink
|
Nenue@133
|
270 self.SocketForge[i] = self.SocketForge[i] or {}
|
Nenue@133
|
271 if relicForge then
|
Nenue@133
|
272 for l, info in ipairs(relicForge) do
|
Nenue@133
|
273 self.SocketForge[i][l] = info
|
Nenue@133
|
274 end
|
Nenue@133
|
275 end
|
Nenue@133
|
276
|
Nenue@133
|
277 end
|
Nenue@133
|
278 end
|
Nenue@133
|
279 end
|
Nenue@133
|
280
|
Nenue@133
|
281 function VeneerPaperDollMixin:ScoopRelics()
|
Nenue@133
|
282
|
Nenue@133
|
283 -- not a viewed artifact
|
Nenue@133
|
284 local itemID = C_ArtifactUI.GetArtifactInfo()
|
Nenue@133
|
285 if not itemID then
|
Nenue@133
|
286 return
|
Nenue@133
|
287 end
|
Nenue@133
|
288
|
Nenue@133
|
289 print('|cFFFF00FFScoopRelics:|r', itemID)
|
Nenue@93
|
290 local guid = UnitGUID(self.unit or 'player')
|
Nenue@93
|
291 local relicCache = VeneerPaperDoll.KnownRelics[guid] and VeneerPaperDoll.KnownRelics[guid][itemID]
|
Nenue@93
|
292 if VeneerPaperDoll.KnownRelics[guid] then
|
Nenue@93
|
293 for k, v in pairs(VeneerPaperDoll.KnownRelics[guid]) do
|
Nenue@93
|
294 if tonumber(k) and tonumber(k) < 72 then
|
Nenue@93
|
295 VeneerPaperDoll.KnownRelics[guid][k] = nil
|
Nenue@93
|
296 end
|
Nenue@93
|
297 end
|
Nenue@93
|
298 end
|
Nenue@93
|
299
|
Nenue@93
|
300
|
Nenue@93
|
301 if not relicCache then
|
Nenue@93
|
302 relicCache = {}
|
Nenue@93
|
303 VeneerPaperDoll.KnownRelics[guid] = VeneerPaperDoll.KnownRelics[guid] or {}
|
Nenue@93
|
304 VeneerPaperDoll.KnownRelics[guid][itemID] = relicCache
|
Nenue@93
|
305 end
|
Nenue@93
|
306
|
Nenue@93
|
307 local numRelics = C_ArtifactUI.GetNumRelicSlots()
|
Nenue@93
|
308 local isEquipped = C_ArtifactUI.IsViewedArtifactEquipped()
|
Nenue@93
|
309 local tooltip = VeneerPaperDollTooltip
|
Nenue@93
|
310
|
Nenue@133
|
311 for i = 1, numRelics do
|
Nenue@135
|
312 relicCache[i] = relicCache[i] or {}
|
Nenue@133
|
313 local relicName, relicIcon, relicType, relicLink = C_ArtifactUI.GetRelicInfo(i);
|
Nenue@133
|
314 local relicLevel = relicCache[i][2] or ""
|
Nenue@133
|
315 local relicForge = relicCache[i][5] or {}
|
Nenue@133
|
316 local relicType = C_ArtifactUI.GetRelicSlotType(i);
|
Nenue@133
|
317
|
Nenue@133
|
318 if relicType then
|
Nenue@133
|
319 if relicLink then
|
Nenue@133
|
320 tooltip:SetSocketedRelic(i)
|
Nenue@133
|
321 print(tooltip:NumLines())
|
Nenue@133
|
322
|
Nenue@133
|
323 local numLines = tooltip:NumLines()
|
Nenue@133
|
324 if numLines >= 1 then
|
Nenue@133
|
325 wipe(relicForge)
|
Nenue@133
|
326 local foundRank = 0
|
Nenue@133
|
327 for line = 1, numLines do
|
Nenue@133
|
328 --print( _G[tooltipName .. 'TextLeft' .. line]:GetText(), _G[tooltipName .. 'TextLeft' .. line]:GetTextColor())
|
Nenue@133
|
329 local lineText = _G[tooltipName .. 'TextLeft' .. line]:GetText()
|
Nenue@133
|
330
|
Nenue@133
|
331 if lineText then
|
Nenue@133
|
332 local iLevel = lineText:match('Item Level (%d+)')
|
Nenue@133
|
333 local rank = lineText:match('+1 Rank: (.+)')
|
Nenue@133
|
334
|
Nenue@133
|
335 if iLevel then
|
Nenue@133
|
336 relicLevel = iLevel
|
Nenue@133
|
337 print('iLevel = ',iLevel)
|
Nenue@133
|
338 end
|
Nenue@133
|
339
|
Nenue@133
|
340 tinsert(relicForge, {lineText, _G[tooltipName .. 'TextLeft' .. line]:GetTextColor()})
|
Nenue@133
|
341 end
|
Nenue@105
|
342 end
|
Nenue@93
|
343 end
|
Nenue@93
|
344 end
|
Nenue@93
|
345
|
Nenue@133
|
346 print('storing', i, relicIcon, relicLevel, relicType, relicLink, relicForge)
|
Nenue@93
|
347
|
Nenue@133
|
348 relicCache[i] = {relicIcon, relicLevel, relicType, relicLink, relicForge}
|
Nenue@93
|
349 end
|
Nenue@93
|
350 end
|
Nenue@133
|
351
|
Nenue@133
|
352
|
Nenue@133
|
353 end
|
Nenue@133
|
354
|
Nenue@133
|
355 function VeneerPaperDollSlotMixin:OnLeave()
|
Nenue@133
|
356
|
Nenue@93
|
357 end
|
Nenue@93
|
358
|
Nenue@96
|
359 function VeneerPaperDollSlotMixin:Update(forced)
|
Nenue@93
|
360 local id = self:GetID()
|
Nenue@93
|
361
|
Nenue@93
|
362 self.SocketInfo = self.SocketInfo or {}
|
Nenue@93
|
363 table.wipe(self.SocketInfo)
|
Nenue@93
|
364 self.ItemLevel:SetText(nil)
|
Nenue@93
|
365
|
Nenue@93
|
366 local tooltip = VeneerPaperDollTooltip
|
Nenue@93
|
367 tooltip:SetOwner(self, 'ANCHOR_NONE')
|
Nenue@96
|
368 if forced then
|
Nenue@96
|
369 print('refresh', self.unit, id)
|
Nenue@96
|
370 end
|
Nenue@96
|
371
|
Nenue@93
|
372 tooltip:SetInventoryItem(self.unit or 'player', id)
|
Nenue@93
|
373 tooltip:Show()
|
Nenue@93
|
374
|
Nenue@93
|
375 local numLines = tooltip:NumLines()
|
Nenue@93
|
376 local numTextures = 0
|
Nenue@93
|
377 local itemLevel
|
Nenue@131
|
378 local ignoreIL = IsAddOnLoaded("DejaCharacterStats")
|
Nenue@93
|
379 local itemLevelLine
|
Nenue@96
|
380 --print('|cFFFFFF00Sockets scan:', numLines)
|
Nenue@133
|
381 for i = 1, numLines do
|
Nenue@133
|
382 local line = _G['VeneerPaperDollTooltipTextLeft'..i]
|
Nenue@133
|
383 local text = line and line:GetText()
|
Nenue@133
|
384 if text and not ignoreIL then
|
Nenue@133
|
385 itemLevel = text:match('Item Level (%d+)')
|
Nenue@133
|
386 if itemLevel then
|
Nenue@133
|
387 self.ItemLevel:SetText(itemLevel)
|
Nenue@133
|
388 break
|
Nenue@93
|
389 end
|
Nenue@93
|
390 end
|
Nenue@133
|
391
|
Nenue@133
|
392 local texture = _G['VeneerPaperDollTooltipTexture'..i]
|
Nenue@133
|
393 if texture and texture:IsShown() then
|
Nenue@133
|
394 numTextures = numTextures + 1
|
Nenue@133
|
395 --print('picked up socket', numTextures, texture:GetTexture())
|
Nenue@133
|
396 self.SocketInfo[numTextures] = texture:GetTexture()
|
Nenue@133
|
397 end
|
Nenue@133
|
398 end
|
Nenue@133
|
399
|
Nenue@93
|
400 if self.checkRelic then
|
Nenue@93
|
401 self:UpdateRelicInfo()
|
Nenue@93
|
402 end
|
Nenue@93
|
403
|
Nenue@93
|
404
|
Nenue@93
|
405 local relativeIcon
|
Nenue@93
|
406 local socketsWidth = 0
|
Nenue@93
|
407 local socketsHeight = 24
|
Nenue@93
|
408 for index, icon in ipairs(self.Sockets.SocketIcon) do
|
Nenue@93
|
409 if self.SocketInfo[index] then
|
Nenue@116
|
410 print('|cFF0088FFsocketInfo|r', index, self.SocketType[index], self.SocketInfo[index])
|
Nenue@93
|
411 icon:ClearAllPoints()
|
Nenue@93
|
412
|
Nenue@93
|
413 icon:SetTexture(self.SocketInfo[index])
|
Nenue@93
|
414 icon:SetSize(16, 16)
|
Nenue@93
|
415 icon:Show()
|
Nenue@93
|
416 if index == 1 then
|
Nenue@93
|
417 icon:SetPoint('LEFT', self.Sockets, 'LEFT', 0, 0)
|
Nenue@93
|
418 socketsWidth = socketsWidth + icon:GetWidth()
|
Nenue@93
|
419 socketsHeight = icon:GetHeight()
|
Nenue@93
|
420 else
|
Nenue@93
|
421 if id == 16 then
|
Nenue@93
|
422 icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 14, 0)
|
Nenue@93
|
423 socketsWidth = socketsWidth + 14
|
Nenue@93
|
424 else
|
Nenue@93
|
425 icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 2, 0)
|
Nenue@93
|
426 socketsWidth = socketsWidth + 2
|
Nenue@93
|
427 end
|
Nenue@93
|
428 socketsWidth = socketsWidth + icon:GetWidth()
|
Nenue@93
|
429 end
|
Nenue@96
|
430 print( '|cFFFF4400', icon:GetPoint(1))
|
Nenue@93
|
431
|
Nenue@93
|
432 local label = self.Sockets.SocketLabel[index]
|
Nenue@93
|
433 label:ClearAllPoints()
|
Nenue@93
|
434 label:SetPoint('BOTTOM', icon, 'TOP',0, 2)
|
Nenue@93
|
435 label:SetFontObject(VeneerNumberFont)
|
Nenue@93
|
436 label:SetText(self.SocketText[index])
|
Nenue@93
|
437
|
Nenue@105
|
438 if self.checkRelic and self.SocketType[index] then
|
Nenue@105
|
439 print(self.SocketType[index])
|
Nenue@116
|
440 self.Sockets.SocketBg = self.Sockets.SocketBg or {}
|
Nenue@116
|
441 self.Sockets.SocketBg[index] = self.Sockets.SocketBg[index] or self.Sockets:CreateTexture(nil, 'OVERLAY')
|
Nenue@116
|
442
|
Nenue@116
|
443
|
Nenue@116
|
444 local relicBG = self.Sockets.SocketBg[index]
|
Nenue@93
|
445 local relicAtlasName = ("Relic-%s-Slot"):format(self.SocketType[index]);
|
Nenue@116
|
446 relicBG:SetMask(nil)
|
Nenue@116
|
447 relicBG:SetAtlas(relicAtlasName)
|
Nenue@116
|
448 relicBG:SetPoint('TOPRIGHT', icon, 'TOPRIGHT', 10, 10)
|
Nenue@116
|
449 relicBG:SetPoint('BOTTOMLEFT', icon, 'BOTTOMLEFT', -10,-10)
|
Nenue@96
|
450 --print('', self.SocketType[index], relicAtlasName)
|
Nenue@105
|
451 if self.SocketInfo[index] == 0 then
|
Nenue@105
|
452 icon:SetAtlas("Relic-SlotBG")
|
Nenue@116
|
453 else
|
Nenue@116
|
454 icon:SetMask(nil);
|
Nenue@116
|
455 icon:SetTexCoord(0, 1, 0, 1); -- Masks may overwrite our tex coords (even ones set by an atlas), force it back to using the full item icon texture
|
Nenue@116
|
456 icon:SetMask("Interface\\CharacterFrame\\TempPortraitAlphaMask");
|
Nenue@116
|
457 icon:SetTexture(self.SocketInfo[index])
|
Nenue@116
|
458
|
Nenue@105
|
459 end
|
Nenue@93
|
460
|
Nenue@93
|
461 socketsHeight = self.Sockets.SocketBg[index]:GetHeight()
|
Nenue@96
|
462 print(socketsWidth, socketsHeight)
|
Nenue@93
|
463 end
|
Nenue@93
|
464
|
Nenue@93
|
465
|
Nenue@93
|
466 relativeIcon = icon
|
Nenue@93
|
467 else
|
Nenue@93
|
468 if self.checkRelic and self.Sockets.SocketBg and self.Sockets.SocketBg[index] then
|
Nenue@93
|
469 self.Sockets.SocketBg[index]:SetTexture(nil)
|
Nenue@93
|
470 self.Sockets.SocketLabel[index]:SetText(nil)
|
Nenue@93
|
471 end
|
Nenue@93
|
472
|
Nenue@93
|
473 icon:Hide()
|
Nenue@93
|
474 end
|
Nenue@93
|
475
|
Nenue@93
|
476
|
Nenue@93
|
477 end
|
Nenue@93
|
478 self.Sockets:SetWidth(socketsWidth)
|
Nenue@93
|
479 self.Sockets:SetHeight(socketsHeight)
|
Nenue@93
|
480
|
Nenue@93
|
481
|
Nenue@93
|
482
|
Nenue@93
|
483
|
Nenue@93
|
484
|
Nenue@93
|
485 self.isDirty = nil
|
Nenue@93
|
486 end |