annotate ObjectiveUI.lua @ 6:589de8ea05b9

- validate tracked objects' existence by use of those handler.Info tables we made - apply collision checking to action buttons when their corresponding entry has scrolled out
author Nenue
date Fri, 01 Apr 2016 01:30:42 -0400
parents e9b61fd5f607
children 5301c68f28d8
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@6 10 local itemButtonSize, itemButtonSpacing = 36, 1
Nenue@0 11
Nenue@0 12 --------------------------------------------------------------------
Nenue@3 13 --- Tracker-specific widgets and their handlers
Nenue@0 14 --------------------------------------------------------------------
Nenue@0 15
Nenue@0 16 Tracker.Select = function(self) end
Nenue@0 17 Tracker.Open = function(self) end
Nenue@0 18 Tracker.Remove = function(self) end
Nenue@0 19 Tracker.Report = function(self)
Nenue@0 20 print('Stats:', self.numWatched,'items tracked,', self.numBlocks,'blocks assigned.')
Nenue@0 21 end
Nenue@0 22
Nenue@0 23 Tracker.OnMouseUp = function(self, button)
Nenue@1 24
Nenue@1 25 if self.initialButton == 'LeftButton' then
Nenue@0 26 self:Select()
Nenue@0 27 mod.UpdateWrapper()
Nenue@1 28 if self.modShift then
Nenue@1 29 self:Remove()
Nenue@1 30 end
Nenue@0 31 elseif button == 'RightButton' then
Nenue@0 32 self:Open()
Nenue@0 33 end
Nenue@1 34 self.initialButton = nil
Nenue@1 35 self.modShift = nil
Nenue@0 36 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r ->',self.info.trackingID)
Nenue@0 37 end
Nenue@0 38
Nenue@0 39 Tracker.OnMouseDown = function(self, button)
Nenue@1 40 self.initialButton = button
Nenue@1 41 self.modShift = IsShiftKeyDown()
Nenue@0 42 if button == 'LeftButton' then
Nenue@0 43 self:SetStyle('Active')
Nenue@0 44 end
Nenue@0 45 print(self.info.title)
Nenue@0 46 end
Nenue@0 47
Nenue@0 48 -----------------------------
Nenue@0 49 --- AUTO_QUEST
Nenue@0 50 AutoQuest.name = "Remote Quests"
Nenue@0 51 AutoQuest.GetNumWatched = GetNumAutoQuestPopUps
Nenue@0 52
Nenue@0 53 -----------------------------
Nenue@0 54 --- QUEST
Nenue@0 55 Quest.name = "Quests"
Nenue@0 56 Quest.Select = function(self)
Nenue@0 57 SetSuperTrackedQuestID(self.info.questID)
Nenue@0 58 end
Nenue@0 59 Quest.Open = function(self)
Nenue@1 60 QuestMapFrame_OpenToQuestDetails(self.info.questID)
Nenue@1 61 end
Nenue@1 62
Nenue@1 63 Quest.Remove = function(self)
Nenue@5 64 print('removing', self.info.questLogIndex, 'from watcher')
Nenue@5 65 RemoveQuestWatch(self.info.questLogIndex)
Nenue@5 66
Nenue@5 67 mod.Quest.LogBlock[self.info.questLogIndex] = nil
Nenue@5 68 mod.Quest.QuestBlock[self.info.questID] = nil
Nenue@1 69 QuestPOIUpdateIcons()
Nenue@5 70 mod.UpdateWrapper()
Nenue@0 71 end
Nenue@0 72
Nenue@0 73
Nenue@0 74 -----------------------------
Nenue@0 75 --- CHEEVS
Nenue@0 76 Cheevs.Select = function(self)
Nenue@0 77 end
Nenue@0 78
Nenue@0 79 Cheevs.Open = function(self)
Nenue@3 80 if ( not AchievementFrame ) then
Nenue@3 81 AchievementFrame_LoadUI();
Nenue@3 82 end
Nenue@3 83 if ( not AchievementFrame:IsShown() ) then
Nenue@3 84 AchievementFrame_ToggleAchievementFrame();
Nenue@3 85 end
Nenue@3 86 AchievementFrame_SelectAchievement(self.info.cheevID);
Nenue@0 87 end
Nenue@0 88
Nenue@1 89 ----------------------------------------------------------------------------------------
Nenue@1 90 --- frame template and scripts lifted from "QuestKing 2" by Barjack
Nenue@1 91 --- url: http://mods.curse.com/addons/wow/questking
Nenue@1 92 ----------------------------------------------------------------------------------------
Nenue@1 93 local usedButtons = mod.Quest.itemButtons
Nenue@1 94 local freeButtons = mod.Quest.freeButtons
Nenue@1 95 mod.SetItemButton = function(block, info)
Nenue@1 96 local itemInfo = info.specialItem
Nenue@1 97 if not itemInfo then
Nenue@1 98 return
Nenue@1 99 end
Nenue@1 100 --- .specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable}
Nenue@1 101
Nenue@1 102
Nenue@1 103 local itemButton
Nenue@1 104 if not info.itemButton then
Nenue@1 105 if #freeButtons >= 1 then
Nenue@2 106 print(' |cFF00FFFFfound a free button')
Nenue@1 107 itemButton = freeButtons[#freeButtons]
Nenue@1 108 freeButtons[#freeButtons] = nil
Nenue@2 109 if itemButton.block then
Nenue@2 110 itemButton.block.itemButton = nil
Nenue@2 111 itemButton.block = nil
Nenue@2 112 end
Nenue@1 113 else
Nenue@1 114 local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
Nenue@1 115 itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
Nenue@1 116 itemButton.buttonIndex = buttonIndex
Nenue@6 117 itemButton:SetSize(itemButtonSize, itemButtonSize)
Nenue@6 118 itemButton:GetNormalTexture():SetSize(itemButtonSize * (5/3), itemButtonSize * (5/3))
Nenue@5 119 print(' |cFFFF4400starting new button', itemButton:GetName())
Nenue@1 120 end
Nenue@1 121 mod.Quest.numButtons = mod.Quest.numButtons + 1
Nenue@1 122 else
Nenue@1 123 itemButton = info.itemButton
Nenue@5 124 print(' |cFF00FF00found assigned button', itemButton:GetName())
Nenue@2 125
Nenue@1 126 end
Nenue@1 127 -- set values
Nenue@2 128
Nenue@5 129 info.itemButton = itemButton
Nenue@5 130 usedButtons[info.questID] = itemButton
Nenue@5 131 print(' |cFF8800FFassigning|r', itemButton:GetName(), 'to quest|cFF00FF00', info.questID, '|rat|cFFFFFF00', block:GetName(),'|r')
Nenue@2 132
Nenue@5 133 for k,v in pairs(usedButtons) do
Nenue@5 134 print('|cFFFF44DD'..k..'|r', v:GetName())
Nenue@5 135 end
Nenue@1 136
Nenue@1 137 itemButton:SetAttribute("type", "item")
Nenue@1 138 itemButton:SetAttribute("item", itemInfo.link)
Nenue@1 139
Nenue@2 140 itemButton.questID = info.questID
Nenue@1 141 itemButton.questLogIndex = info.questLogIndex
Nenue@1 142 itemButton.charges = itemInfo.charges
Nenue@1 143 itemButton.rangeTimer = -1
Nenue@1 144 itemButton.block = block
Nenue@1 145
Nenue@1 146 SetItemButtonTexture(itemButton, itemInfo.icon)
Nenue@1 147 SetItemButtonCount(itemButton, itemInfo.charges)
Nenue@1 148 Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
Nenue@1 149
Nenue@1 150 return itemButton
Nenue@1 151 end
Nenue@1 152 --- Clear an itemButton from the given block
Nenue@2 153 mod.FreeItemButtons = function(block)
Nenue@2 154
Nenue@2 155 if block.itemButton then
Nenue@2 156 local itemButton = block.itemButton
Nenue@5 157 if itemButton.questID ~= block.info.questID then
Nenue@5 158 block.itemButton = nil
Nenue@5 159 itemButton.block = mod.Quest.InfoBlock[itemButton.questID]
Nenue@5 160 else
Nenue@5 161 itemButton.block = nil
Nenue@5 162 itemButton:Hide()
Nenue@2 163
Nenue@5 164 usedButtons[itemButton.questID] = nil
Nenue@5 165 freeButtons[#freeButtons + 1] = itemButton
Nenue@5 166 mod.Quest.numButtons = mod.Quest.numButtons - 1
Nenue@5 167 print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
Nenue@5 168 end
Nenue@1 169 end
Nenue@1 170 end
Nenue@1 171
Nenue@1 172 function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
Nenue@1 173 -- Handle range indicator
Nenue@1 174 local rangeTimer = self.rangeTimer
Nenue@1 175 if (rangeTimer) then
Nenue@1 176 rangeTimer = rangeTimer - elapsed
Nenue@1 177 if (rangeTimer <= 0) then
Nenue@1 178 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
Nenue@1 179 if ((not charges) or (charges ~= self.charges)) then
Nenue@2 180 mod.UpdateWrapper()
Nenue@1 181 return
Nenue@1 182 end
Nenue@1 183
Nenue@1 184 local count = self.HotKey
Nenue@1 185 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
Nenue@1 186 if (valid == 0) then
Nenue@1 187 count:Show()
Nenue@1 188 count:SetVertexColor(1.0, 0.1, 0.1)
Nenue@1 189 elseif (valid == 1) then
Nenue@1 190 count:Show()
Nenue@1 191 count:SetVertexColor(0.6, 0.6, 0.6)
Nenue@1 192 else
Nenue@1 193 count:Hide()
Nenue@1 194 end
Nenue@1 195 rangeTimer = TOOLTIP_UPDATE_TIME
Nenue@1 196 end
Nenue@1 197
Nenue@1 198 self.rangeTimer = rangeTimer
Nenue@1 199 end
Nenue@1 200 end
Nenue@1 201
Nenue@1 202 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
Nenue@1 203 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
Nenue@1 204 if (start) then
Nenue@1 205 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
Nenue@1 206 if (duration > 0 and enable == 0) then
Nenue@1 207 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
Nenue@1 208 else
Nenue@1 209 SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
Nenue@1 210 end
Nenue@1 211 end
Nenue@3 212 end
Nenue@3 213
Nenue@3 214 -----------------------------------------
Nenue@3 215 -- Progress slider for achievements, and area objecitves
Nenue@3 216 -- Stored by criteria ID to account for multiple bars in one cheev
Nenue@3 217 Tracker.SetProgress = function(criteria, info)
Nenue@3 218 end
Nenue@3 219
Nenue@3 220 mod.WidgetRegistry = {}
Nenue@3 221 local wr = mod.WidgetRegistry
Nenue@3 222 mod.SetWidget = function(criteria, info)
Nenue@3 223 local widget
Nenue@3 224 if not wr[criteria.type] then
Nenue@3 225 print('|cFFFF4400[[WidgetTemplate]]|r', criteria.type)
Nenue@3 226 wr[criteria.type] = { free = {}, used = {}, }
Nenue@3 227 end
Nenue@3 228 if #wr[criteria.type].free == 0 then
Nenue@3 229
Nenue@3 230 local frameID = #wr[criteria.type].free + #wr[criteria.type].used
Nenue@3 231 widget = CreateFrame('Frame', 'VeneerCriteria' .. criteria.type .. frameID, VeneerObjectiveWrapper, 'VeneerObjectiveCriteria' .. criteria.type)
Nenue@3 232 end
Nenue@3 233 end
Nenue@3 234 mod.RegisterWidget = function(frame)
Nenue@3 235 tinsert(wr[frame.widgetType].free, frame)
Nenue@3 236 end
Nenue@3 237 mod.InitializeWidget = function(frame)
Nenue@3 238
Nenue@3 239 end
Nenue@3 240 mod.ReleaseWidget = function(frame)
Nenue@3 241
Nenue@3 242 if tContains(wr[frame.widgetType], frame) then
Nenue@3 243 end
Nenue@1 244 end