Mercurial > wow > buffalo2
comparison Modules/PaperDoll.lua @ 64:ba9c13261bb2
- parametrize buff button customizations
| author | Nenue |
|---|---|
| date | Wed, 17 Aug 2016 15:26:54 -0400 |
| parents | ef4116179e2f |
| children | 4fe16cb3f5d6 |
comparison
equal
deleted
inserted
replaced
| 63:619dc10924af | 64:ba9c13261bb2 |
|---|---|
| 5 -- | 5 -- |
| 6 | 6 |
| 7 local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent) | 7 local plugin = CreateFrame('Frame', 'VeneerPaper', UIParent) |
| 8 local vn, print = LibStub("LibKraken").register(VeneerController, plugin) | 8 local vn, print = LibStub("LibKraken").register(VeneerController, plugin) |
| 9 | 9 |
| 10 -- PaperDollFrame is separate from InspectUI handlers | 10 local slot_anchors = { |
| 11 local PaperDollItemSlotButton_Update = function(self) | 11 [1] = 'TOPLEFT', |
| 12 local name = self:GetName() | 12 [2] = 'TOPLEFT', |
| 13 local slot = self:GetID() | 13 [3] = 'TOPLEFT', |
| 14 local frame = _G[name .. 'Veneer'] | 14 [15] = 'TOPLEFT', |
| 15 if not frame then | 15 [5] = 'TOPLEFT', |
| 16 frame = CreateFrame('Frame', name..'Veneer', self) | 16 [9] = 'TOPLEFT', |
| 17 frame.label = frame:CreateFontString(nil, 'OVERLAY', 'GameFontNormal') | |
| 18 frame.gemslot = {} | |
| 19 frame:SetPoint('LEFT', self, 'RIGHT') | |
| 20 end | |
| 21 | 17 |
| 22 if self.hasItem then | 18 [10] = 'TOPRIGHT', |
| 19 [6] = 'TOPRIGHT', | |
| 20 [7] = 'TOPRIGHT', | |
| 21 [8] = 'TOPRIGHT', | |
| 22 [11] = 'TOPRIGHT', | |
| 23 [12] = 'TOPRIGHT', | |
| 24 [13] = 'TOPRIGHT', | |
| 25 [14] = 'TOPRIGHT', | |
| 26 | |
| 27 [16] = 'BOTTOMRIGHT', | |
| 28 [17] = 'BOTTOMLEFT', | |
| 29 } | |
| 30 | |
| 31 local slot_relative = { | |
| 32 [1] = 'TOPRIGHT', | |
| 33 [2] = 'TOPRIGHT', | |
| 34 [3] = 'TOPRIGHT', | |
| 35 [15] = 'TOPRIGHT', | |
| 36 [5] = 'TOPRIGHT', | |
| 37 [9] = 'TOPRIGHT', | |
| 38 | |
| 39 [10] = 'TOPLEFT', | |
| 40 [6] = 'TOPLEFT', | |
| 41 [7] = 'TOPLEFT', | |
| 42 [8] = 'TOPLEFT', | |
| 43 [11] = 'TOPLEFT', | |
| 44 [12] = 'TOPLEFT', | |
| 45 [13] = 'TOPLEFT', | |
| 46 [14] = 'TOPLEFT', | |
| 47 | |
| 48 [16] = 'TOPRIGHT', | |
| 49 [17] = 'TOPLEFT', | |
| 50 } | |
| 51 local ticker | |
| 52 local vnslot = {} | |
| 53 local pendingSlots = {} | |
| 54 | |
| 55 local UpdateVeneer = function(itemslot, frame) | |
| 56 local slot = itemslot:GetID() | |
| 57 if itemslot.hasItem then | |
| 23 frame.link = GetInventoryItemLink('player', slot) | 58 frame.link = GetInventoryItemLink('player', slot) |
| 24 frame.gem1, frame.gem2, frame.gem3 = GetInventoryItemGems('player', slot) | 59 --print(frame.link) |
| 25 frame.label:SetText(GetInventoryItemLink('player', slot)) | 60 local name, link, something, ilevel = GetItemInfo(frame.link) |
| 61 frame.label:SetText(ilevel) | |
| 26 -- todo: test GetExtendedItemInfo() | 62 -- todo: test GetExtendedItemInfo() |
| 63 | |
| 64 local lastOwner = GameTooltip:GetOwner() | |
| 65 print(lastOwner) | |
| 66 | |
| 67 GameTooltip:SetOwner(plugin) | |
| 68 GameTooltip:SetInventoryItem('player', slot) | |
| 27 | 69 |
| 28 for i = 1, 3 do | 70 for i = 1, 3 do |
| 29 local gname = 'gem'..i | 71 local gname = 'gem'..i |
| 30 if frame[gname] then | 72 if frame[gname] then |
| 31 frame.gemslot[i] = frame.gemslot[i] or frame:CreateTexture(nil, 'ARTWORK') | 73 frame.gemslot[i] = frame.gemslot[i] or frame:CreateTexture(nil, 'ARTWORK') |
| 36 else | 78 else |
| 37 frame:Hide() | 79 frame:Hide() |
| 38 end | 80 end |
| 39 end | 81 end |
| 40 | 82 |
| 41 plugin.init = function() | 83 local UpdateAll = function() |
| 42 hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update) | 84 for index, frame in pairs(vnslot) do |
| 85 if frame:IsVisible() then | |
| 86 print('forcing', index, frame:GetName()) | |
| 87 tinsert(pendingSlots, frame) | |
| 88 end | |
| 89 end | |
| 90 plugin.ticker() | |
| 43 end | 91 end |
| 44 | 92 |
| 93 local UpdateNext = function() | |
| 94 | |
| 95 local frame = tremove(pendingSlots) | |
| 96 if frame and frame:IsVisible() then | |
| 97 print('updating', frame:GetName()) | |
| 98 UpdateVeneer(frame:GetParent(), frame) | |
| 99 else | |
| 100 ticker:Cancel() | |
| 101 ticker = nil | |
| 102 end | |
| 103 | |
| 104 end | |
| 105 | |
| 106 -- PaperDollFrame is separate from InspectUI handlers | |
| 107 local PaperDollItemSlotButton_Update = function(self) | |
| 108 local name = self:GetName() | |
| 109 local slot = self:GetID() | |
| 110 if not slot_anchors[slot] then | |
| 111 return | |
| 112 end | |
| 113 | |
| 114 | |
| 115 local frame = _G[name .. 'Veneer'] | |
| 116 | |
| 117 if not frame then | |
| 118 | |
| 119 frame = CreateFrame('Frame', name..'Veneer', self) | |
| 120 vnslot[slot] = frame | |
| 121 | |
| 122 frame.label = frame:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFont') | |
| 123 frame.gemslot = {} | |
| 124 | |
| 125 local anchor, relative, x, y = slot_anchors[slot], slot_relative[slot], 8, -4 | |
| 126 if anchor:match('RIGHT') then | |
| 127 x = -x | |
| 128 end | |
| 129 if anchor:match('BOTTOM') then | |
| 130 y = 4 | |
| 131 end | |
| 132 | |
| 133 | |
| 134 frame:SetPoint(anchor, self, relative, x, y) | |
| 135 frame:SetSize(200,24) | |
| 136 frame.label:ClearAllPoints() | |
| 137 frame.label:SetPoint(slot_anchors[slot], frame, slot_anchors[slot]) | |
| 138 | |
| 139 tinsert(pendingSlots, frame) | |
| 140 end | |
| 141 end | |
| 142 | |
| 143 | |
| 144 plugin.ticker = function() | |
| 145 if (not ticker) and #pendingSlots >= 1 then | |
| 146 ticker = C_Timer.NewTicker(0, UpdateNext) | |
| 147 end | |
| 148 end | |
| 149 | |
| 150 | |
| 151 plugin.event = function(self, event, flag, slot) | |
| 152 print(self, event, flag, slot) | |
| 153 | |
| 154 | |
| 155 plugin.ticker() | |
| 156 end | |
| 157 plugin:SetScript('OnEvent', plugin.event) | |
| 158 plugin:RegisterUnitEvent('UNIT_INVENTORY_CHANGED', 'player') | |
| 159 | |
| 160 hooksecurefunc("ToggleCharacter", UpdateAll) | |
| 161 hooksecurefunc("PaperDollItemSlotButton_Update", PaperDollItemSlotButton_Update) | |
| 162 | |
| 163 hooksecurefunc(GameTooltip, "SetInventoryItem", function(self, unit, slot) | |
| 164 if self:GetOwner() == plugin then | |
| 165 if unit == 'player' and vnslot[slot] then | |
| 166 vnslot[slot].label:SetText(GameTooltipTextLeft3:GetText():match('%d+')) | |
| 167 end | |
| 168 end | |
| 169 end) | |
| 170 |
