annotate 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
rev   line source
Nenue@0 1 --- ${PACKAGE_NAME}
Nenue@0 2 -- @file-author@
Nenue@0 3 -- @project-revision@ @project-hash@
Nenue@0 4 -- @file-revision@ @file-hash@
Nenue@0 5 -- Created: 3/29/2016 7:07 PM
Nenue@0 6 local B = select(2,...).frame
Nenue@0 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@0 8 local print = B.print('Objectives')
Nenue@0 9 local Tracker, AutoQuest, Quest, Cheevs = mod.Tracker, mod.AutoQuest, mod.Quest, mod.Cheevs
Nenue@0 10
Nenue@0 11 --------------------------------------------------------------------
Nenue@0 12 --- Tracker-specific widget functions
Nenue@0 13 --------------------------------------------------------------------
Nenue@0 14
Nenue@0 15 Tracker.Select = function(self) end
Nenue@0 16 Tracker.Open = function(self) end
Nenue@0 17 Tracker.Remove = function(self) end
Nenue@0 18 Tracker.Report = function(self)
Nenue@0 19 print('Stats:', self.numWatched,'items tracked,', self.numBlocks,'blocks assigned.')
Nenue@0 20 end
Nenue@0 21
Nenue@0 22 Tracker.OnMouseUp = function(self, button)
Nenue@1 23
Nenue@1 24 if self.initialButton == 'LeftButton' then
Nenue@0 25 self:Select()
Nenue@0 26 mod.UpdateWrapper()
Nenue@1 27 if self.modShift then
Nenue@1 28 self:Remove()
Nenue@1 29 end
Nenue@0 30 elseif button == 'RightButton' then
Nenue@0 31 self:Open()
Nenue@0 32 end
Nenue@1 33 self.initialButton = nil
Nenue@1 34 self.modShift = nil
Nenue@0 35 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r ->',self.info.trackingID)
Nenue@0 36 end
Nenue@0 37
Nenue@0 38 Tracker.OnMouseDown = function(self, button)
Nenue@1 39 self.initialButton = button
Nenue@1 40 self.modShift = IsShiftKeyDown()
Nenue@0 41 if button == 'LeftButton' then
Nenue@0 42 self:SetStyle('Active')
Nenue@0 43 end
Nenue@0 44 print(self.info.title)
Nenue@0 45 end
Nenue@0 46
Nenue@0 47 -----------------------------
Nenue@0 48 --- AUTO_QUEST
Nenue@0 49 AutoQuest.name = "Remote Quests"
Nenue@0 50 AutoQuest.GetNumWatched = GetNumAutoQuestPopUps
Nenue@0 51
Nenue@0 52 -----------------------------
Nenue@0 53 --- QUEST
Nenue@0 54 Quest.name = "Quests"
Nenue@0 55 Quest.Select = function(self)
Nenue@0 56 SetSuperTrackedQuestID(self.info.questID)
Nenue@0 57 end
Nenue@0 58 Quest.Open = function(self)
Nenue@1 59 QuestMapFrame_OpenToQuestDetails(self.info.questID)
Nenue@1 60 end
Nenue@1 61
Nenue@1 62 Quest.Remove = function(self)
Nenue@1 63 RemoveQuestWatch(self.info.questIndex)
Nenue@1 64 QuestPOIUpdateIcons()
Nenue@0 65 end
Nenue@0 66
Nenue@0 67
Nenue@0 68 -----------------------------
Nenue@0 69 --- CHEEVS
Nenue@0 70 Cheevs.Select = function(self)
Nenue@0 71 end
Nenue@0 72
Nenue@0 73 Cheevs.Open = function(self)
Nenue@0 74 end
Nenue@0 75
Nenue@1 76 ----------------------------------------------------------------------------------------
Nenue@1 77 --- frame template and scripts lifted from "QuestKing 2" by Barjack
Nenue@1 78 --- url: http://mods.curse.com/addons/wow/questking
Nenue@1 79 ----------------------------------------------------------------------------------------
Nenue@1 80 local usedButtons = mod.Quest.itemButtons
Nenue@1 81 local freeButtons = mod.Quest.freeButtons
Nenue@1 82 mod.SetItemButton = function(block, info)
Nenue@1 83 local itemInfo = info.specialItem
Nenue@1 84 if not itemInfo then
Nenue@1 85 return
Nenue@1 86 end
Nenue@1 87 --- .specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable}
Nenue@1 88
Nenue@1 89
Nenue@1 90 local itemButton
Nenue@1 91 if not info.itemButton then
Nenue@1 92 if #freeButtons >= 1 then
Nenue@2 93 print(' |cFF00FFFFfound a free button')
Nenue@1 94 itemButton = freeButtons[#freeButtons]
Nenue@1 95 freeButtons[#freeButtons] = nil
Nenue@2 96 if itemButton.block then
Nenue@2 97 itemButton.block.itemButton = nil
Nenue@2 98 itemButton.block = nil
Nenue@2 99 end
Nenue@1 100 else
Nenue@2 101 print(' |cFFFF4400starting new button')
Nenue@1 102 local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
Nenue@1 103 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
Nenue@1 104 itemButton.buttonIndex = buttonIndex
Nenue@1 105 itemButton:SetSize(48, 48)
Nenue@1 106 itemButton:GetNormalTexture():SetSize(80,80)
Nenue@1 107 end
Nenue@1 108 mod.Quest.numButtons = mod.Quest.numButtons + 1
Nenue@1 109 else
Nenue@2 110 print(' |cFF00FF00found assigned button')
Nenue@1 111 itemButton = info.itemButton
Nenue@2 112 if itemButton.block then
Nenue@2 113 print(' - moving from old block')
Nenue@2 114 itemButton.block.itemButton = nil
Nenue@2 115 end
Nenue@2 116
Nenue@1 117 end
Nenue@1 118 -- set values
Nenue@2 119
Nenue@2 120
Nenue@1 121 info.itemButton = itemButton
Nenue@1 122 block.itemButton = itemButton
Nenue@2 123 usedButtons[info.questID] = itemButton
Nenue@1 124
Nenue@1 125 itemButton:SetAttribute("type", "item")
Nenue@1 126 itemButton:SetAttribute("item", itemInfo.link)
Nenue@1 127
Nenue@2 128 itemButton.questID = info.questID
Nenue@1 129 itemButton.questLogIndex = info.questLogIndex
Nenue@1 130 itemButton.charges = itemInfo.charges
Nenue@1 131 itemButton.rangeTimer = -1
Nenue@1 132 itemButton.block = block
Nenue@1 133
Nenue@1 134 SetItemButtonTexture(itemButton, itemInfo.icon)
Nenue@1 135 SetItemButtonCount(itemButton, itemInfo.charges)
Nenue@1 136 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
Nenue@1 137
Nenue@1 138 return itemButton
Nenue@1 139 end
Nenue@1 140 --- Clear an itemButton from the given block
Nenue@2 141 mod.FreeItemButtons = function(block)
Nenue@2 142
Nenue@2 143 if block.itemButton then
Nenue@2 144 local itemButton = block.itemButton
Nenue@2 145 itemButton.block = nil
Nenue@2 146 itemButton:Hide()
Nenue@2 147
Nenue@2 148 usedButtons[itemButton.questID] = nil
Nenue@2 149 freeButtons[#freeButtons + 1] = itemButton
Nenue@2 150 mod.Quest.numButtons = mod.Quest.numButtons - 1
Nenue@2 151 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
Nenue@1 152 end
Nenue@1 153 end
Nenue@1 154
Nenue@1 155 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
Nenue@1 156 -- Handle range indicator
Nenue@1 157 local rangeTimer = self.rangeTimer
Nenue@1 158 if (rangeTimer) then
Nenue@1 159 rangeTimer = rangeTimer - elapsed
Nenue@1 160 if (rangeTimer <= 0) then
Nenue@1 161 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
Nenue@1 162 if ((not charges) or (charges ~= self.charges)) then
Nenue@2 163 mod.UpdateWrapper()
Nenue@1 164 return
Nenue@1 165 end
Nenue@1 166
Nenue@1 167 local count = self.HotKey
Nenue@1 168 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
Nenue@1 169 if (valid == 0) then
Nenue@1 170 count:Show()
Nenue@1 171 count:SetVertexColor(1.0, 0.1, 0.1)
Nenue@1 172 elseif (valid == 1) then
Nenue@1 173 count:Show()
Nenue@1 174 count:SetVertexColor(0.6, 0.6, 0.6)
Nenue@1 175 else
Nenue@1 176 count:Hide()
Nenue@1 177 end
Nenue@1 178 rangeTimer = TOOLTIP_UPDATE_TIME
Nenue@1 179 end
Nenue@1 180
Nenue@1 181 self.rangeTimer = rangeTimer
Nenue@1 182 end
Nenue@1 183 end
Nenue@1 184
Nenue@1 185 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
Nenue@1 186 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
Nenue@1 187 if (start) then
Nenue@1 188 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
Nenue@1 189 if (duration > 0 and enable == 0) then
Nenue@1 190 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
Nenue@1 191 else
Nenue@1 192 SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
Nenue@1 193 end
Nenue@1 194 end
Nenue@1 195 end