comparison ObjectiveUI.lua @ 2:a2396b03ce63

- identify action buttons by the associated QuestID instead of QuestLogIndex - deferred button placement in general to a self-destructing OnUpdate -- and defer self-destruct to a end of combat event if InCombatLockdown - tracker wrapper has an experience/reputation bar; the two elements "feel" related and it's a very simple info display
author Nenue
date Thu, 31 Mar 2016 01:38:47 -0400
parents b0447b382f36
children 3397aae1f44d
comparison
equal deleted inserted replaced
1:b0447b382f36 2:a2396b03ce63
88 88
89 89
90 local itemButton 90 local itemButton
91 if not info.itemButton then 91 if not info.itemButton then
92 if #freeButtons >= 1 then 92 if #freeButtons >= 1 then
93 print('|cFF00FFFFfound a free button') 93 print(' |cFF00FFFFfound a free button')
94 itemButton = freeButtons[#freeButtons] 94 itemButton = freeButtons[#freeButtons]
95 freeButtons[#freeButtons] = nil 95 freeButtons[#freeButtons] = nil
96 if itemButton.block then
97 itemButton.block.itemButton = nil
98 itemButton.block = nil
99 end
96 else 100 else
97 print('|cFFFF4400starting new button') 101 print(' |cFFFF4400starting new button')
98 local buttonIndex = mod.Quest.numButtons + #freeButtons + 1 102 local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
99 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate') 103 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
100 itemButton.buttonIndex = buttonIndex 104 itemButton.buttonIndex = buttonIndex
101 itemButton:SetSize(48, 48) 105 itemButton:SetSize(48, 48)
102 itemButton:GetNormalTexture():SetSize(80,80) 106 itemButton:GetNormalTexture():SetSize(80,80)
103 end 107 end
104 mod.Quest.numButtons = mod.Quest.numButtons + 1 108 mod.Quest.numButtons = mod.Quest.numButtons + 1
105 else 109 else
106 print('|cFF00FF00found assigned button') 110 print(' |cFF00FF00found assigned button')
107 itemButton = info.itemButton 111 itemButton = info.itemButton
112 if itemButton.block then
113 print(' - moving from old block')
114 itemButton.block.itemButton = nil
115 end
116
108 end 117 end
109 -- set values 118 -- set values
119
120
110 info.itemButton = itemButton 121 info.itemButton = itemButton
111 block.itemButton = itemButton 122 block.itemButton = itemButton
112 usedButtons[info.questLogIndex] = itemButton 123 usedButtons[info.questID] = itemButton
113 124
114 itemButton:SetAttribute("type", "item") 125 itemButton:SetAttribute("type", "item")
115 itemButton:SetAttribute("item", itemInfo.link) 126 itemButton:SetAttribute("item", itemInfo.link)
116 127
128 itemButton.questID = info.questID
117 itemButton.questLogIndex = info.questLogIndex 129 itemButton.questLogIndex = info.questLogIndex
118 itemButton.charges = itemInfo.charges 130 itemButton.charges = itemInfo.charges
119 itemButton.rangeTimer = -1 131 itemButton.rangeTimer = -1
120 itemButton.block = block 132 itemButton.block = block
121 133
124 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton); 136 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
125 137
126 return itemButton 138 return itemButton
127 end 139 end
128 --- Clear an itemButton from the given block 140 --- Clear an itemButton from the given block
129 mod.FreeItemButton = function(block, itemButton) 141 mod.FreeItemButtons = function(block)
130 if block.itemButton ~= itemButton then 142
131 print('|cFFFF0088trying to release mismatched action button') 143 if block.itemButton then
132 return 144 local itemButton = block.itemButton
145 itemButton.block = nil
146 itemButton:Hide()
147
148 usedButtons[itemButton.questID] = nil
149 freeButtons[#freeButtons + 1] = itemButton
150 mod.Quest.numButtons = mod.Quest.numButtons - 1
151 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
133 end 152 end
134
135 block.itemButton = nil
136 block.icon:Hide()
137
138 itemButton.block = nil
139 itemButton:Hide()
140
141 usedButtons[itemButton.questLogIndex] = nil
142 freeButtons[#freeButtons + 1] = itemButton
143 mod.Quest.numButtons = mod.Quest.numButtons - 1
144 print('|cFFFF0088released', itemButton:GetName(),'from', block:GetName())
145 end 153 end
146 154
147 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed) 155 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
148 -- Handle range indicator 156 -- Handle range indicator
149 local rangeTimer = self.rangeTimer 157 local rangeTimer = self.rangeTimer
150 if (rangeTimer) then 158 if (rangeTimer) then
151 rangeTimer = rangeTimer - elapsed 159 rangeTimer = rangeTimer - elapsed
152 if (rangeTimer <= 0) then 160 if (rangeTimer <= 0) then
153 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex) 161 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
154 if ((not charges) or (charges ~= self.charges)) then 162 if ((not charges) or (charges ~= self.charges)) then
155 QuestKing:UpdateTracker() 163 mod.UpdateWrapper()
156 return 164 return
157 end 165 end
158 166
159 local count = self.HotKey 167 local count = self.HotKey
160 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex) 168 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)