annotate Modules/PaperDoll.lua @ 91:fe8806a7b6fc v7.1-r91

7.1 TOC
author Nenue
date Tue, 25 Oct 2016 12:27:47 -0400
parents 74e714637d6a
children caded2668701
rev   line source
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@62 6
Nenue@62 7 local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent)
Nenue@75 8 local vn, print = LibStub("LibKraken").register(Veneer, plugin)
Nenue@62 9
Nenue@64 10 local slot_anchors = {
Nenue@64 11 [1] = 'TOPLEFT',
Nenue@64 12 [2] = 'TOPLEFT',
Nenue@64 13 [3] = 'TOPLEFT',
Nenue@64 14 [15] = 'TOPLEFT',
Nenue@64 15 [5] = 'TOPLEFT',
Nenue@64 16 [9] = 'TOPLEFT',
Nenue@62 17
Nenue@64 18 [10] = 'TOPRIGHT',
Nenue@64 19 [6] = 'TOPRIGHT',
Nenue@64 20 [7] = 'TOPRIGHT',
Nenue@64 21 [8] = 'TOPRIGHT',
Nenue@64 22 [11] = 'TOPRIGHT',
Nenue@64 23 [12] = 'TOPRIGHT',
Nenue@64 24 [13] = 'TOPRIGHT',
Nenue@64 25 [14] = 'TOPRIGHT',
Nenue@64 26
Nenue@64 27 [16] = 'BOTTOMRIGHT',
Nenue@64 28 [17] = 'BOTTOMLEFT',
Nenue@64 29 }
Nenue@64 30
Nenue@64 31 local slot_relative = {
Nenue@64 32 [1] = 'TOPRIGHT',
Nenue@64 33 [2] = 'TOPRIGHT',
Nenue@64 34 [3] = 'TOPRIGHT',
Nenue@64 35 [15] = 'TOPRIGHT',
Nenue@64 36 [5] = 'TOPRIGHT',
Nenue@64 37 [9] = 'TOPRIGHT',
Nenue@64 38
Nenue@64 39 [10] = 'TOPLEFT',
Nenue@64 40 [6] = 'TOPLEFT',
Nenue@64 41 [7] = 'TOPLEFT',
Nenue@64 42 [8] = 'TOPLEFT',
Nenue@64 43 [11] = 'TOPLEFT',
Nenue@64 44 [12] = 'TOPLEFT',
Nenue@64 45 [13] = 'TOPLEFT',
Nenue@64 46 [14] = 'TOPLEFT',
Nenue@64 47
Nenue@64 48 [16] = 'TOPRIGHT',
Nenue@64 49 [17] = 'TOPLEFT',
Nenue@64 50 }
Nenue@64 51 local ticker
Nenue@64 52 local vnslot = {}
Nenue@64 53 local pendingSlots = {}
Nenue@64 54
Nenue@65 55
Nenue@80 56 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
Nenue@80 57 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
Nenue@80 58 local tooltip = CreateFrame('GameTooltip', 'VeneerTooltip', UIParent, 'GameTooltipTemplate')
Nenue@71 59 local jewel = {}
Nenue@80 60
Nenue@80 61 local artifactBar_OnEvent = function (self)
Nenue@80 62 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
Nenue@80 63 if not itemID then
Nenue@80 64 self:Hide()
Nenue@80 65 return
Nenue@80 66 end
Nenue@80 67
Nenue@80 68 local numRelicSlots = C_ArtifactUI.GetNumRelicSlots() or 0;
Nenue@89 69 for i = 1, numRelicSlots do
Nenue@80 70
Nenue@89 71 end
Nenue@80 72
Nenue@80 73 local pointsAvailable = 0
Nenue@80 74 local nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
Nenue@80 75
Nenue@80 76 while totalXP >= nextRankCost do
Nenue@80 77 totalXP = totalXP - nextRankCost
Nenue@80 78 pointsAvailable = pointsAvailable + 1
Nenue@80 79 nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
Nenue@80 80 end
Nenue@80 81 self.Header:SetText(name)
Nenue@81 82 self.Level:SetText((pointsAvailable >= 1) and (pointsSpent .. ' ('.. pointsAvailable..')') or (pointsSpent))
Nenue@80 83 self.ProgressText:SetFormattedText("|cFF00FFFF%d|r / %d", totalXP, nextRankCost)
Nenue@80 84
Nenue@80 85 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()*(totalXP/nextRankCost), 0)
Nenue@80 86 self.ProgressBar:SetColorTexture(1,.5,0)
Nenue@80 87
Nenue@80 88 self:Show()
Nenue@80 89 end
Nenue@80 90
Nenue@80 91
Nenue@80 92 local artifactBar = CreateFrame('Frame', 'VnPaperDollArtifact', CharacterModelFrame, 'VeneerStatusBarTemplate')
Nenue@80 93 artifactBar:ClearAllPoints()
Nenue@80 94 artifactBar:SetHeight(28)
Nenue@80 95 artifactBar:SetPoint('LEFT', CharacterModelFrame, 'LEFT', 30, 0)
Nenue@80 96 artifactBar:SetPoint('RIGHT', CharacterModelFrame, 'RIGHT', -30, 0)
Nenue@80 97 artifactBar:SetPoint('BOTTOM', CharacterMainHandSlotFrame, 'TOP', 0, 1)
Nenue@80 98 artifactBar.ProgressBG:SetColorTexture(0.5, 0.5, 0.5)
Nenue@80 99 artifactBar.Header:Show()
Nenue@80 100 artifactBar:RegisterEvent('ARTIFACT_UPDATE')
Nenue@80 101 artifactBar:SetScript('OnEvent', artifactBar_OnEvent)
Nenue@80 102
Nenue@80 103 plugin.artifactBar = artifactBar
Nenue@80 104 print(CharacterMainHandSlotFrame:GetPoint(1))
Nenue@80 105 print(artifactBar:GetPoint(3))
Nenue@80 106
Nenue@80 107 for i = 1, 3 do
Nenue@80 108 local relicSlot = CreateFrame('Frame', 'VnPaperDollRelic'..i, artifactBar)
Nenue@80 109 relicSlot:SetSize(40,40)
Nenue@80 110 relicSlot:SetPoint('BOTTOM', artifactBar, 'TOP', (i-2)*40, 24)
Nenue@80 111 relicSlot.relicArt = relicSlot:CreateTexture(nil, 'BACKGROUND')
Nenue@80 112 artifactBar['RelicSlot'..i] = relicSlot
Nenue@80 113 end
Nenue@80 114
Nenue@80 115
Nenue@80 116 artifactBar:EnableMouse(true)
Nenue@80 117 artifactBar:SetScript('OnMouseUp', function()
Nenue@80 118 SocketInventoryItem(16)
Nenue@80 119 end)
Nenue@80 120
Nenue@64 121 local UpdateVeneer = function(itemslot, frame)
Nenue@64 122 local slot = itemslot:GetID()
Nenue@64 123 if itemslot.hasItem then
Nenue@80 124 local unit = frame.target.unit or 'player'
Nenue@80 125 frame.link = GetInventoryItemLink(unit, slot)
Nenue@80 126 tooltip:SetOwner(frame, 'ANCHOR_NONE')
Nenue@80 127 tooltip:SetInventoryItem(unit, slot)
Nenue@80 128 tooltip:Show()
Nenue@80 129 --print(tooltip:NumLines())
Nenue@80 130 if tooltip:NumLines() >= 3 then
Nenue@71 131
Nenue@80 132 local ilvl
Nenue@80 133 if _G['VeneerTooltipTextLeft2'] then
Nenue@80 134 ilvl = _G['VeneerTooltipTextLeft2']:GetText():match("Item Level (%d+)")
Nenue@80 135 --print('l2', ilvl)
Nenue@80 136 end
Nenue@62 137
Nenue@80 138 if _G['VeneerTooltipTextLeft3'] then
Nenue@80 139 if not ilvl then
Nenue@80 140 ilvl = _G['VeneerTooltipTextLeft3']:GetText():match("Item Level (%d+)")
Nenue@80 141 --print('l3', ilvl)
Nenue@80 142 end
Nenue@80 143 end
Nenue@64 144
Nenue@80 145 if ilvl then
Nenue@80 146 frame.label:SetText(ilvl)
Nenue@62 147 end
Nenue@62 148 end
Nenue@80 149
Nenue@80 150 local quality = GetInventoryItemQuality(unit, slot)
Nenue@80 151 if slot == 16 and quality == LE_ITEM_QUALITY_ARTIFACT then
Nenue@80 152 artifactBar_OnEvent(plugin.artifactBar)
Nenue@71 153 end
Nenue@71 154
Nenue@71 155
Nenue@80 156
Nenue@71 157
Nenue@62 158 frame:Show()
Nenue@62 159 else
Nenue@62 160 frame:Hide()
Nenue@62 161 end
Nenue@62 162 end
Nenue@62 163
Nenue@76 164 local UpdateNext = function(frame)
Nenue@76 165
Nenue@76 166 plugin.next(function()
Nenue@76 167 print('updating', frame:GetName())
Nenue@76 168 UpdateVeneer(frame:GetParent(), frame)
Nenue@76 169 end)
Nenue@76 170 end
Nenue@76 171
Nenue@76 172
Nenue@64 173 local UpdateAll = function()
Nenue@64 174 for index, frame in pairs(vnslot) do
Nenue@64 175 if frame:IsVisible() then
Nenue@64 176 print('forcing', index, frame:GetName())
Nenue@76 177 UpdateNext(frame)
Nenue@64 178 end
Nenue@64 179 end
Nenue@64 180 end
Nenue@64 181
Nenue@71 182
Nenue@64 183 -- PaperDollFrame is separate from InspectUI handlers
Nenue@64 184 local PaperDollItemSlotButton_Update = function(self)
Nenue@64 185 local name = self:GetName()
Nenue@64 186 local slot = self:GetID()
Nenue@64 187 if not slot_anchors[slot] then
Nenue@64 188 return
Nenue@64 189 end
Nenue@80 190 print(self:GetName())
Nenue@64 191
Nenue@64 192 local frame = _G[name .. 'Veneer']
Nenue@64 193
Nenue@64 194 if not frame then
Nenue@64 195
Nenue@64 196 frame = CreateFrame('Frame', name..'Veneer', self)
Nenue@64 197 vnslot[slot] = frame
Nenue@64 198
Nenue@64 199 frame.label = frame:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFont')
Nenue@64 200 frame.gemslot = {}
Nenue@64 201
Nenue@64 202
Nenue@80 203 frame.target = self
Nenue@71 204 frame.gemslot = {}
Nenue@80 205 frame:SetAllPoints(self)
Nenue@80 206 frame:SetParent(self)
Nenue@80 207 frame.label:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', 2, 2)
Nenue@64 208
Nenue@64 209 tinsert(pendingSlots, frame)
Nenue@64 210 end
Nenue@66 211
Nenue@80 212 UpdateVeneer(self, frame)
Nenue@80 213
Nenue@64 214 end
Nenue@64 215
Nenue@80 216 local PaperDollFrame_UpdateStats = function()
Nenue@80 217
Nenue@80 218 end
Nenue@64 219
Nenue@64 220
Nenue@64 221
Nenue@65 222 plugin.event = function(self, event, ...)
Nenue@80 223 print(self, event, ...)
Nenue@64 224
Nenue@65 225 if event == 'PLAYER_EQUIPMENT_CHANGED' then
Nenue@65 226 local slot, hasItem = ...
Nenue@65 227 if vnslot[slot] then
Nenue@65 228 UpdateVeneer(vnslot[slot]:GetParent(), vnslot[slot])
Nenue@80 229
Nenue@65 230 end
Nenue@64 231
Nenue@66 232 elseif event == 'PLAYER_ENTERING_WORLD' then
Nenue@66 233 UpdateAll()
Nenue@66 234
Nenue@65 235 end
Nenue@65 236
Nenue@64 237 end
Nenue@80 238 local artifactBarCreated
Nenue@80 239 plugin.init = function()
Nenue@80 240 LoadAddOn('Blizzard_ArtifactUI')
Nenue@80 241 end
Nenue@66 242
Nenue@72 243 --plugin:SetScript('OnEvent', plugin.event)
Nenue@65 244 plugin:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
Nenue@66 245 plugin:RegisterEvent('PLAYER_ENTERING_WORLD')
Nenue@64 246
Nenue@66 247
Nenue@80 248 hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update)
Nenue@80 249
Nenue@80 250 hooksecurefunc("PaperDollFrame_UpdateStats", PaperDollFrame_UpdateStats)