comparison Modules/PaperDoll.lua @ 96:bb38bc0e787f

- fix weapon slot anchors for paperdoll
author Nenue
date Tue, 03 Jan 2017 14:06:41 -0500
parents caded2668701
children 1e511e9aaca5
comparison
equal deleted inserted replaced
95:43303398d1b9 96:bb38bc0e787f
2 -- PaperDoll.lua 2 -- PaperDoll.lua
3 -- Created: 8/16/2016 8:18 AM 3 -- Created: 8/16/2016 8:18 AM
4 -- %file-revision% 4 -- %file-revision%
5 -- Displays the item level and modifications of character sheet equipment, including artifact power 5 -- Displays the item level and modifications of character sheet equipment, including artifact power
6 local print = DEVIAN_WORKSPACE and function(...) print('PaperDoll', ...) end or nop 6 local print = DEVIAN_WORKSPACE and function(...) print('PaperDoll', ...) end or nop
7 7 local artifactSlot
8 local slot_overlays = {} 8 local slot_overlays = {}
9 VeneerPaperDollMixin = { 9 VeneerPaperDollMixin = {
10 anchorFrame = 'CharacterFrame', 10 anchorFrame = 'CharacterFrame',
11 anchorPoint = 'TOPLEFT', 11 anchorPoint = 'TOPLEFT',
12 KnownRelics = {}, 12 KnownRelics = {},
73 self:GetSlotButton(InspectFrame, ...) 73 self:GetSlotButton(InspectFrame, ...)
74 end) 74 end)
75 self:RegisterEvent('INSPECT_READY') 75 self:RegisterEvent('INSPECT_READY')
76 end 76 end
77 function VeneerPaperDollMixin:SetupArtifactUI() 77 function VeneerPaperDollMixin:SetupArtifactUI()
78 self:RegisterEvent('ARTIFACT_UPDATE')
79 end 78 end
80 79
81 function VeneerPaperDollMixin:Setup() 80 function VeneerPaperDollMixin:Setup()
82 VeneerData.PaperDoll = VeneerData.PaperDoll or {} 81 VeneerData.PaperDoll = VeneerData.PaperDoll or {}
83 VeneerData.PaperDoll.KnownRelics = VeneerData.PaperDoll.KnownRelics or {} 82 VeneerData.PaperDoll.KnownRelics = VeneerData.PaperDoll.KnownRelics or {}
84 self.KnownRelics = VeneerData.PaperDoll.KnownRelics 83 self.KnownRelics = VeneerData.PaperDoll.KnownRelics
85 84
86 self:RegisterEvent('UNIT_INVENTORY_CHANGED') 85 self:RegisterEvent('UNIT_INVENTORY_CHANGED')
87 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED') 86 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
88 self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED') 87 self:RegisterEvent('PLAYER_SPECIALIZATION_CHANGED')
88 self:RegisterEvent('ARTIFACT_UPDATE')
89 89
90 self:MarkForUpdate() 90 self:MarkForUpdate()
91 end 91 end
92 92
93 function VeneerPaperDollMixin:MarkForUpdate() 93 function VeneerPaperDollMixin:MarkForUpdate()
110 local unit = panel.unit or 'player' 110 local unit = panel.unit or 'player'
111 if slot_anchors[slot] then 111 if slot_anchors[slot] then
112 slot_overlays[panel] = slot_overlays[panel] or {} 112 slot_overlays[panel] = slot_overlays[panel] or {}
113 local overlay = slot_overlays[panel][slot] 113 local overlay = slot_overlays[panel][slot]
114 if not overlay then 114 if not overlay then
115 print('creating slot overlay', slot)
115 overlay = CreateFrame('Frame', 'VeneerPaperDollSlot' .. unit .. slot, frame, 'VeneerPaperDollSlotInfoTemplate') 116 overlay = CreateFrame('Frame', 'VeneerPaperDollSlot' .. unit .. slot, frame, 'VeneerPaperDollSlotInfoTemplate')
116 overlay:SetID(slot) 117 overlay:SetID(slot)
117 slot_overlays[panel][slot] = overlay 118 slot_overlays[panel][slot] = overlay
118 overlay.checkRelic = frame.checkRelic 119 overlay.checkRelic = frame.checkRelic
119 120
133 overlay.Sockets:ClearAllPoints() 134 overlay.Sockets:ClearAllPoints()
134 overlay.Sockets:SetPoint('BOTTOM', CharacterFrameInsetBg, 'BOTTOM', 0, frame:GetHeight() + 14) 135 overlay.Sockets:SetPoint('BOTTOM', CharacterFrameInsetBg, 'BOTTOM', 0, frame:GetHeight() + 14)
135 overlay.ItemLevel:SetFontObject(VeneerNumberFontLarge) 136 overlay.ItemLevel:SetFontObject(VeneerNumberFontLarge)
136 overlay.ItemLevel:ClearAllPoints() 137 overlay.ItemLevel:ClearAllPoints()
137 overlay.ItemLevel:SetPoint('BOTTOM', overlay.Sockets, 'TOP', 0, 4) 138 overlay.ItemLevel:SetPoint('BOTTOM', overlay.Sockets, 'TOP', 0, 4)
139 if unit == 'player' then
140 artifactSlot = overlay
141 end
142
138 end 143 end
139 144
140 print(overlay.Sockets:GetPoint(1)) 145 print(overlay.Sockets:GetPoint(1))
141 overlay.anchors = slot_anchors[slot] 146 overlay.anchors = slot_anchors[slot]
142 end 147 end
171 if arg == 'Blizzard_ArtifactUI' then 176 if arg == 'Blizzard_ArtifactUI' then
172 self:SetupArtifactUI() 177 self:SetupArtifactUI()
173 self:MarkForUpdate() 178 self:MarkForUpdate()
174 end 179 end
175 elseif event == 'ARTIFACT_UPDATE' then 180 elseif event == 'ARTIFACT_UPDATE' then
176 self:MarkForUpdate() 181
182 if artifactSlot then
183 print('just udpate artifact slot')
184 artifactSlot:Update(true)
185 end
186
187
177 else 188 else
178 if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then 189 if (event == 'PLAYER_SPECIALIZATION_CHANGED' or event == 'UNIT_INVENTORY_CHANGED') then
179 if arg ~= 'player' then 190 if arg ~= 'player' then
180 return 191 return
181 end 192 end
262 local tooltip = VeneerPaperDollTooltip 273 local tooltip = VeneerPaperDollTooltip
263 tooltip:SetOwner(self, 'ANCHOR_NONE') 274 tooltip:SetOwner(self, 'ANCHOR_NONE')
264 self.hasRelicSlots = true 275 self.hasRelicSlots = true
265 if numRelics and isEquipped then 276 if numRelics and isEquipped then
266 print('Relic Query:', itemID, numRelics) 277 print('Relic Query:', itemID, numRelics)
267 self.checkRelic = nil
268 for i = 1, numRelics do 278 for i = 1, numRelics do
269 local lockedReason, relicName, relicIcon, relicLink = C_ArtifactUI.GetRelicInfo(i); 279 local lockedReason, relicName, relicIcon, relicLink = C_ArtifactUI.GetRelicInfo(i);
270 local relicType = C_ArtifactUI.GetRelicSlotType(i); 280 local relicType = C_ArtifactUI.GetRelicSlotType(i);
271 if relicIcon then 281 if relicIcon then
272 tooltip:SetHyperlink(relicLink) 282 tooltip:SetHyperlink(relicLink)
306 self.SocketLink[i] = relicLink 316 self.SocketLink[i] = relicLink
307 end 317 end
308 end 318 end
309 end 319 end
310 320
311 local SocketIcon_Update = function(frame) 321 function VeneerPaperDollSlotMixin:Update(forced)
312 end
313
314 function VeneerPaperDollSlotMixin:Update()
315 local id = self:GetID() 322 local id = self:GetID()
316 323
317 self.SocketInfo = self.SocketInfo or {} 324 self.SocketInfo = self.SocketInfo or {}
318 table.wipe(self.SocketInfo) 325 table.wipe(self.SocketInfo)
319 self.ItemLevel:SetText(nil) 326 self.ItemLevel:SetText(nil)
320 327
321 local tooltip = VeneerPaperDollTooltip 328 local tooltip = VeneerPaperDollTooltip
322 tooltip:SetOwner(self, 'ANCHOR_NONE') 329 tooltip:SetOwner(self, 'ANCHOR_NONE')
323 print('refresh', self.unit, id) 330 if forced then
331 print('refresh', self.unit, id)
332 end
333
324 tooltip:SetInventoryItem(self.unit or 'player', id) 334 tooltip:SetInventoryItem(self.unit or 'player', id)
325 tooltip:Show() 335 tooltip:Show()
326 336
327 local numLines = tooltip:NumLines() 337 local numLines = tooltip:NumLines()
328 local numTextures = 0 338 local numTextures = 0
329 local itemLevel 339 local itemLevel
330 local itemLevelLine 340 local itemLevelLine
331 print('|cFFFFFF00Sockets scan:', numLines) 341 --print('|cFFFFFF00Sockets scan:', numLines)
332 for i = 1, numLines do 342 for i = 1, numLines do
333 local line = _G['VeneerPaperDollTooltipTextLeft'..i] 343 local line = _G['VeneerPaperDollTooltipTextLeft'..i]
334 local text = line and line:GetText() 344 local text = line and line:GetText()
335 if text then 345 if text then
336 itemLevel = text:match('Item Level (%d+)') 346 itemLevel = text:match('Item Level (%d+)')
341 end 351 end
342 352
343 local texture = _G['VeneerPaperDollTooltipTexture'..i] 353 local texture = _G['VeneerPaperDollTooltipTexture'..i]
344 if texture and texture:IsShown() then 354 if texture and texture:IsShown() then
345 numTextures = numTextures + 1 355 numTextures = numTextures + 1
346 print('picked up socket', numTextures, texture:GetTexture()) 356 --print('picked up socket', numTextures, texture:GetTexture())
347 self.SocketInfo[numTextures] = texture:GetTexture() 357 self.SocketInfo[numTextures] = texture:GetTexture()
348 end 358 end
349 end 359 end
350 if self.checkRelic then 360 if self.checkRelic then
351 self:UpdateRelicInfo() 361 self:UpdateRelicInfo()
355 local relativeIcon 365 local relativeIcon
356 local socketsWidth = 0 366 local socketsWidth = 0
357 local socketsHeight = 24 367 local socketsHeight = 24
358 for index, icon in ipairs(self.Sockets.SocketIcon) do 368 for index, icon in ipairs(self.Sockets.SocketIcon) do
359 if self.SocketInfo[index] then 369 if self.SocketInfo[index] then
360 print('|cFF0088FFsocketInfo|r', index, self.SocketInfo[index]) 370 --print('|cFF0088FFsocketInfo|r', index, self.SocketInfo[index])
361 icon:ClearAllPoints() 371 icon:ClearAllPoints()
362 372
363 icon:SetTexture(self.SocketInfo[index]) 373 icon:SetTexture(self.SocketInfo[index])
364 icon:SetSize(16, 16) 374 icon:SetSize(16, 16)
365 icon:Show() 375 icon:Show()
375 icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 2, 0) 385 icon:SetPoint('LEFT', relativeIcon, 'RIGHT', 2, 0)
376 socketsWidth = socketsWidth + 2 386 socketsWidth = socketsWidth + 2
377 end 387 end
378 socketsWidth = socketsWidth + icon:GetWidth() 388 socketsWidth = socketsWidth + icon:GetWidth()
379 end 389 end
390 print( '|cFFFF4400', icon:GetPoint(1))
380 391
381 local label = self.Sockets.SocketLabel[index] 392 local label = self.Sockets.SocketLabel[index]
382 label:ClearAllPoints() 393 label:ClearAllPoints()
383 label:SetPoint('BOTTOM', icon, 'TOP',0, 2) 394 label:SetPoint('BOTTOM', icon, 'TOP',0, 2)
384 label:SetFontObject(VeneerNumberFont) 395 label:SetFontObject(VeneerNumberFont)
389 self.Sockets.SocketBg = self.Sockets.SocketBg or {} 400 self.Sockets.SocketBg = self.Sockets.SocketBg or {}
390 self.Sockets.SocketBg[index] = self.Sockets.SocketBg[index] or self.Sockets:CreateTexture() 401 self.Sockets.SocketBg[index] = self.Sockets.SocketBg[index] or self.Sockets:CreateTexture()
391 self.Sockets.SocketBg[index]:SetAtlas(relicAtlasName) 402 self.Sockets.SocketBg[index]:SetAtlas(relicAtlasName)
392 self.Sockets.SocketBg[index]:SetPoint('TOPRIGHT', icon, 'TOPRIGHT', 12, 12) 403 self.Sockets.SocketBg[index]:SetPoint('TOPRIGHT', icon, 'TOPRIGHT', 12, 12)
393 self.Sockets.SocketBg[index]:SetPoint('BOTTOMLEFT', icon, 'BOTTOMLEFT', -12,-12) 404 self.Sockets.SocketBg[index]:SetPoint('BOTTOMLEFT', icon, 'BOTTOMLEFT', -12,-12)
394 print('', self.SocketType[index], relicAtlasName) 405 --print('', self.SocketType[index], relicAtlasName)
395 406
396 socketsHeight = self.Sockets.SocketBg[index]:GetHeight() 407 socketsHeight = self.Sockets.SocketBg[index]:GetHeight()
408 print(socketsWidth, socketsHeight)
397 end 409 end
398 410
399 411
400 relativeIcon = icon 412 relativeIcon = icon
401 else 413 else