comparison ObjectiveTracker/AchievementData.lua @ 43:9480bd904f4c

- file name organizing
author Nenue
date Mon, 25 Apr 2016 13:51:58 -0400
parents ObjectiveTracker/Achievements.lua@03ed70f846de
children
comparison
equal deleted inserted replaced
42:c73051785f19 43:9480bd904f4c
1 --- ${PACKAGE_NAME}
2 -- @file-author@
3 -- @project-revision@ @project-hash@
4 -- @file-revision@ @file-hash@
5 -- Created: 4/13/2016 7:48 PM
6 local B = select(2,...).frame
7 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
8 local band = bit.band
9 local RemoveTrackedAchievement, GetAchievementLink = RemoveTrackedAchievement, GetAchievementLink
10 local AchievementFrame_ToggleAchievementFrame, AchievementFrame_SelectAchievement = AchievementFrame_ToggleAchievementFrame, AchievementFrame_SelectAchievement
11 local GetTime, GetAchievementNumCriteria, GetAchievementCriteriaInfo = GetTime, GetAchievementNumCriteria, GetAchievementCriteriaInfo
12 local GetNumTrackedAchievements, GetTrackedAchievements, GetAchievementInfo = GetNumTrackedAchievements, GetTrackedAchievements, GetAchievementInfo
13 local Default, Cheevs = T.DefaultHandler, T.Cheevs
14 local wipe = table.wipe
15 local print, bprint, lprint, iprint = B.print('Tracker'), B.print('Block'), B.print('Line'), B.print('iprint')
16
17 --- Frame data
18 Cheevs.UpdateObjectives = function(handler, block, block_schema)
19 -- if completed on another character, only show the heading for CHATLINK
20 if block.info.completed then
21 return 0, block_schema
22 end
23
24 if block.info.description then
25 handler:AddLine(block, block.info.description, nil, 'defalut')
26 end
27 local attachments = Default.UpdateObjectives(handler, block, block_schema)
28
29 return attachments, block_schema
30 end
31
32 Cheevs.UpdateLine = function(handler, block, data)
33 local print = lprint
34 local attachment
35 local text
36 local lineSchema = 'default'
37 print(' ', data.objectiveIndex,'|cFF'..handler.internalColor..'-|r', data.objectiveType, data.text)
38 if data.type == CRITERIA_TYPE_ACHIEVEMENT then
39 if data.value == 1 then
40 return nil, nil
41 end
42
43 text = data.text
44 lineSchema = (data.quantity == 1) and 'achievement_complete' or 'achievement'
45 elseif band(data.flags, 0x00000001) > 0 then
46 attachment = T.GetWidget(data, 'StatusBar', data.criteriaID)
47 attachment.format = "%d/%d"
48 attachment.value = data.value
49 attachment.maxValue = data.maxValue
50 attachment:SetParent(block)
51
52 print(attachment:GetNumPoints())
53 for i = 1, attachment:GetNumPoints() do
54 print(' ',attachment:GetPoint(i))
55 end
56 attachment.status:SetFormattedText("%d/%d", data.value, data.maxValue)
57 attachment:SetPoint('TOP', line, 'TOP')
58 lineSchema = 'progressbar'
59 else
60
61 text = format("%d/%d %s", data.value, data.maxValue, data.text)
62 lineSchema = 'default'
63 end
64 print(' |cFF'..handler.internalColor..'UpdateLine:|r', data.type, data.quantityString, 'qty:', data.quantity, 'assetID:', data.assetID)
65 return text, attachment, lineSchema
66 end
67
68 Cheevs.Select = function(self, block)
69 Cheevs.Link(self, block)
70 T:Update(self.updateReasonModule, block.info.cheevID)
71 end
72
73 Cheevs.Remove = function(self, block)
74
75 RemoveTrackedAchievement(block.info.cheevID)
76 end
77 Cheevs.OnMouseUp = function(self, button)
78
79 Default.OnMouseUp(self, button)
80 end
81 Cheevs.Link = function(self, block)
82 local achievementLink = GetAchievementLink(block.info.cheevID);
83 if ( achievementLink ) then
84 _G.ChatEdit_InsertLink(achievementLink);
85 end
86 end
87
88 --- Data accessors
89 Cheevs.GetNumWatched = function(self, targetID, isNew)
90 local trackedList = {GetTrackedAchievements() }
91 local numWatched, numAll = #trackedList, #self.WatchList
92 print(' |cFF'..self.internalColor..'GetNumWatched:|r',self.name, numWatched, ' ('..numAll..' recorded)')
93 local start = 1
94 local limit = max(numAll, #trackedList)
95 if targetID then
96 if not isNew and self.Info[targetID] then
97 -- if it's only an update, we can limit the scope
98 start = self.Info[targetID].watchIndex
99 print(' |cFF'..self.internalColor..'GetNumWatched: limit selection to['..start..'-'..limit..']')
100 if self.InfoBlock[targetID] then
101 self.InfoBlock[targetID]:Hide()
102 end
103
104 end
105 end
106
107 for index = start, limit do
108 if index > numWatched then
109 self.WatchList[index] = nil
110 print(' % dropping watch entry #'..index)
111 else
112 local cheevID = trackedList[index]
113 if not self.Info[cheevID] then
114 self.Info[cheevID] = self:GetInfo(cheevID, index)
115 else
116 print(' |cFF'..self.internalColor..'GetInfo:', cheevID, 'already pulled')
117 end
118 self:GetObjectives(cheevID)
119
120 local info = self.Info[cheevID]
121 local watchBlock = self.WatchBlock[cheevID]
122
123 self.Info[cheevID].watchIndex = index
124 self.WatchList[index] = info
125 end
126 end
127
128 numAll = #self.WatchList
129 return numWatched, numAll, self.WatchList
130 end
131 Cheevs.GetInfo = function(self, cheevID, watchIndex)
132 --- step 1: confirm primary data and begin an entry if needed
133 local id, name, points, completed, month, day, year, description, flags, icon, rewardText, isGuildAch, wasEarnedByMe, earnedBy = GetAchievementInfo(cheevID)
134 if not id then return nil end
135
136 print(' |cFF'..self.internalColor..'GetInfo: pulling', id..',', name, earnedBy)
137
138
139 self.Info[cheevID] = self.Info[cheevID] or {}
140 local c = self.Info[cheevID]
141 local rewards = {}
142
143 c.schema = 'achievement'
144 c.rewardInfo = rewards
145 c.type = 'Cheevs'
146 c.title = name
147 c.points = points
148 c.completed = completed
149 c.month = month
150 c.day = day
151 c.year = year
152 c.description = description
153 c.flags = flags
154 c.icon = icon
155 c.rewardText = rewardText
156 c.isGuildAch = isGuildAch
157 c.wasEarnedByMe = wasEarnedByMe
158 c.earnedBy = earnedBy
159
160 local tagInfo = {}
161 c.tagInfo = tagInfo
162 c.watchIndex = watchIndex
163 c.id = cheevID
164 c.cheevID = cheevID
165
166 self.Info[cheevID] = c
167 self.WatchInfo[watchIndex] = c
168 return c
169 end
170
171 Cheevs.GetObjectives = function(self, cheevID)
172 local c = self.Info[cheevID]
173 c.numObjectives = GetAchievementNumCriteria(cheevID)
174 c.objectives = c.objectives or {}
175 for i = 1, c.numObjectives do
176 local description, type, completed, quantity, requiredQuantity, characterName, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(cheevID, i)
177 local line = c.objectives[i] or {}
178 line.objectiveIndex = i
179 line.cheevID = cheevID
180 line.text = description
181 line.type = type
182 line.finished = completed
183 line.value = quantity
184 line.maxValue = requiredQuantity
185 line.characterName = characterName
186 line.flags = flags
187 line.assetID = assetID
188 line.quantityString = quantityString
189 line.criteriaID = criteriaID
190 c.objectives[i] = line
191
192 print(' |cFF'..self.internalColor..'GetObjectives:|r', i, format('|cFF0088FF%02X|r(%d)', type, type), format('|cFF88FF00%01X|r', flags or 0), '|cFF00FF00'..tostring(quantity)..'|r/|cFF00FF00'.. tostring(requiredQuantity)..'|r', '"|cFF88FF00'..tostring(description)..'|r"')
193 end
194 end
195
196
197 Cheevs.Open = function(self, block)
198
199 if ( not _G.AchievementFrame ) then
200 _G.AchievementFrame_LoadUI();
201 end
202 if ( not _G.AchievementFrame:IsShown() ) then
203 _G.AchievementFrame_ToggleAchievementFrame();
204 end
205 _G.AchievementFrame_SelectAchievement(block.info.cheevID);
206 end