Nenue@80
|
1 -- Veneer
|
Nenue@84
|
2 -- WorldState.lua
|
Nenue@80
|
3 -- Created: 10/7/2016 10:55 PM
|
Nenue@80
|
4 -- %file-revision%
|
Nenue@80
|
5 --
|
Nenue@80
|
6
|
Nenue@87
|
7 local WorldStateBlockMixin = {}
|
Nenue@87
|
8 VeneerOrderHallMixin = {
|
Nenue@87
|
9 anchorPoint = 'TOP',
|
Nenue@90
|
10 anchorFrom = 'TOP',
|
Nenue@90
|
11 anchorX = 0,
|
Nenue@90
|
12 anchorY = 0,
|
Nenue@90
|
13 addonTrigger = 'Blizzard_OrderHallUI',
|
Nenue@90
|
14 addonFrame = 'OrderHallCommandBar',
|
Nenue@87
|
15 }
|
Nenue@87
|
16 VeneerWorldStateCurrencyMixin = {
|
Nenue@87
|
17 }
|
Nenue@84
|
18 VeneerWorldStateProgressMixin = {
|
Nenue@89
|
19 keepOpen = true,
|
Nenue@84
|
20 }
|
Nenue@81
|
21 VeneerWorldStateMixin = {
|
Nenue@82
|
22 maxHeight = 0,
|
Nenue@87
|
23 detectedFrames = {},
|
Nenue@87
|
24 anchorPoint = 'TOP',
|
Nenue@81
|
25 }
|
Nenue@80
|
26 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
|
Nenue@80
|
27
|
Nenue@87
|
28 function VeneerWorldStateMixin:Reset()
|
Nenue@87
|
29 for i, frame in ipairs(self.modules) do
|
Nenue@87
|
30 if frame.Reset then
|
Nenue@87
|
31 frame:Reset()
|
Nenue@87
|
32 end
|
Nenue@87
|
33 end
|
Nenue@87
|
34 self:Update()
|
Nenue@87
|
35 end
|
Nenue@87
|
36
|
Nenue@80
|
37 function VeneerWorldStateMixin:Setup()
|
Nenue@80
|
38 --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
|
Nenue@84
|
39 print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
|
Nenue@81
|
40
|
Nenue@81
|
41 self.modules = self.modules or {self:GetChildren()}
|
Nenue@81
|
42 for i, frame in ipairs(self.modules) do
|
Nenue@84
|
43 print('--'.. frame:GetName()..' exists')
|
Nenue@81
|
44 if frame.Setup then
|
Nenue@84
|
45 print('--'.. frame:GetName()..':Setup()')
|
Nenue@81
|
46 frame:Setup()
|
Nenue@81
|
47 end
|
Nenue@82
|
48
|
Nenue@87
|
49
|
Nenue@87
|
50 for k,v in pairs(WorldStateBlockMixin) do
|
Nenue@87
|
51 if not frame[k] then
|
Nenue@87
|
52 frame[k] = v
|
Nenue@87
|
53 if k:match('^On') then
|
Nenue@87
|
54 frame:SetScript(k, v)
|
Nenue@87
|
55 end
|
Nenue@82
|
56 end
|
Nenue@87
|
57 end
|
Nenue@82
|
58
|
Nenue@81
|
59 end
|
Nenue@84
|
60 self:UnregisterEvent('PLAYER_LOGIN')
|
Nenue@80
|
61 end
|
Nenue@80
|
62
|
Nenue@82
|
63 function VeneerWorldStateMixin:SetOrderHallUIMods()
|
Nenue@87
|
64 print('|cFFFF4400remove me', debugstack())
|
Nenue@80
|
65 end
|
Nenue@84
|
66
|
Nenue@84
|
67
|
Nenue@84
|
68 function VeneerWorldStateMixin:OnLoad ()
|
Nenue@87
|
69 self.modules = {self:GetChildren()}
|
Nenue@84
|
70 print('|cFFFFFF00'..self:GetName()..'|r!')
|
Nenue@84
|
71 self:RegisterEvent('PLAYER_ENTERING_WORLD')
|
Nenue@84
|
72 self:RegisterEvent('PLAYER_REGEN_ENABLED')
|
Nenue@84
|
73 self:RegisterEvent('PLAYER_REGEN_DISABLED')
|
Nenue@87
|
74 Veneer:AddHandler(self, self.anchorPoint, true)
|
Nenue@87
|
75 SLASH_VENEERWORLDSTATE1 = "/vws"
|
Nenue@87
|
76 SLASH_VENEERWORLDSTATE2 = "/worldstate"
|
Nenue@87
|
77 SlashCmdList.VENEERWORLDSTATE = function()
|
Nenue@87
|
78 self:Reset()
|
Nenue@87
|
79 end
|
Nenue@84
|
80 end
|
Nenue@84
|
81
|
Nenue@80
|
82 function VeneerWorldStateMixin:OnEvent(event, arg)
|
Nenue@80
|
83 print(event, arg)
|
Nenue@90
|
84 if event == 'PLAYER_ENTERING_WORLD' then
|
Nenue@80
|
85 self:Update()
|
Nenue@81
|
86 elseif event == 'PLAYER_REGEN_ENABLED' then
|
Nenue@83
|
87 self:SetShown(true)
|
Nenue@81
|
88 elseif event == 'PLAYER_REGEN_DISABLED' then
|
Nenue@83
|
89 self:SetShown(false)
|
Nenue@80
|
90 end
|
Nenue@80
|
91 end
|
Nenue@80
|
92
|
Nenue@88
|
93 function VeneerWorldStateMixin:Update(isBatchUpdate)
|
Nenue@80
|
94 print('|cFFFFFF00All:Update()|r')
|
Nenue@88
|
95 for index, frame in ipairs(self.modules) do
|
Nenue@82
|
96 if frame.Update then
|
Nenue@88
|
97 print(' '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName())
|
Nenue@88
|
98 frame:Update(isBatchUpdate)
|
Nenue@88
|
99 print(' ', frame:IsVisible(), frame:IsShown())
|
Nenue@82
|
100 end
|
Nenue@82
|
101 end
|
Nenue@82
|
102 end
|
Nenue@82
|
103
|
Nenue@87
|
104 function VeneerWorldStateMixin:Reanchor(isUpdate)
|
Nenue@88
|
105 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
|
Nenue@81
|
106 self.maxHeight = 0
|
Nenue@89
|
107 local lastFrame
|
Nenue@81
|
108 for i, frame in ipairs(self.modules) do
|
Nenue@82
|
109 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight())
|
Nenue@82
|
110 if frame:IsShown() then
|
Nenue@89
|
111 if lastFrame then
|
Nenue@89
|
112 frame:SetPoint('TOP', lastFrame, 'BOTTOM')
|
Nenue@89
|
113 else
|
Nenue@89
|
114 frame:SetPoint('TOP', self, 'TOP')
|
Nenue@89
|
115 end
|
Nenue@89
|
116
|
Nenue@89
|
117 self.maxHeight = self.maxHeight + frame:GetHeight()
|
Nenue@89
|
118 lastFrame = frame
|
Nenue@80
|
119 end
|
Nenue@80
|
120 end
|
Nenue@82
|
121 if self.maxHeight == 0 then
|
Nenue@87
|
122 print (' hiding because there are no blocks')
|
Nenue@82
|
123 self:Hide()
|
Nenue@82
|
124 else
|
Nenue@82
|
125 self:Show()
|
Nenue@87
|
126 print (' height update:', self.maxHeight)
|
Nenue@82
|
127 self:SetHeight(self.maxHeight)
|
Nenue@82
|
128 end
|
Nenue@82
|
129
|
Nenue@87
|
130 if not isUpdate then
|
Nenue@87
|
131 Veneer:InternalReanchor(self, print)
|
Nenue@87
|
132 end
|
Nenue@80
|
133 end
|
Nenue@80
|
134
|
Nenue@80
|
135
|
Nenue@80
|
136
|
Nenue@84
|
137 function VeneerWorldStateMixin:OnMouseDown()
|
Nenue@80
|
138 end
|
Nenue@80
|
139
|
Nenue@87
|
140 function VeneerOrderHallMixin:Setup()
|
Nenue@87
|
141 print('|cFFFFFF00'..self:GetName()..':Setup()')
|
Nenue@88
|
142 self:SetParent(OrderHallCommandBar)
|
Nenue@88
|
143 self:RegisterEvent("ZONE_CHANGED");
|
Nenue@88
|
144 self:RegisterEvent("ZONE_CHANGED_INDOORS");
|
Nenue@88
|
145 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
Nenue@88
|
146 self:SetShown(true)
|
Nenue@88
|
147 end
|
Nenue@88
|
148
|
Nenue@90
|
149 function VeneerOrderHallMixin:OnLoad()
|
Nenue@90
|
150
|
Nenue@90
|
151 Veneer:AddHandler(VeneerOrderHallHandler, 'TOP', true)
|
Nenue@90
|
152 end
|
Nenue@90
|
153
|
Nenue@88
|
154 function VeneerOrderHallMixin:OnEvent(event, ...)
|
Nenue@88
|
155
|
Nenue@88
|
156 print('|cFF00AAFF'..self:GetName()..'|r:'.. event, ...)
|
Nenue@88
|
157 self:Update()
|
Nenue@88
|
158 end
|
Nenue@88
|
159
|
Nenue@88
|
160 function VeneerOrderHallMixin:OnShow()
|
Nenue@90
|
161 if OrderHallCommandBar then
|
Nenue@90
|
162 print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
163 self:Update()
|
Nenue@90
|
164 end
|
Nenue@88
|
165 Veneer:InternalReanchor(self)
|
Nenue@88
|
166 end
|
Nenue@88
|
167
|
Nenue@88
|
168 function VeneerOrderHallMixin:OnHide()
|
Nenue@90
|
169 if OrderHallCommandBar then
|
Nenue@90
|
170 print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', OrderHallCommandBar:IsShown(), self:IsShown())
|
Nenue@90
|
171 end
|
Nenue@88
|
172 Veneer:Reanchor()
|
Nenue@87
|
173 end
|
Nenue@87
|
174
|
Nenue@87
|
175 function VeneerOrderHallMixin:Update()
|
Nenue@87
|
176
|
Nenue@87
|
177 if not OrderHallCommandBar then
|
Nenue@87
|
178 print('|cFFFF4400'..self:GetName()..' updater called without target')
|
Nenue@87
|
179 return
|
Nenue@87
|
180 end
|
Nenue@87
|
181
|
Nenue@87
|
182 OrderHallCommandBar:ClearAllPoints()
|
Nenue@88
|
183 OrderHallCommandBar:SetPoint('TOP', UIParent, 'TOP')
|
Nenue@87
|
184 OrderHallCommandBar:SetWidth(600)
|
Nenue@87
|
185 OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
|
Nenue@87
|
186 OrderHallCommandBar.WorldMapButton:Hide()
|
Nenue@87
|
187 OrderHallCommandBar:EnableMouse(false)
|
Nenue@88
|
188 self:SetSize(OrderHallCommandBar:GetSize())
|
Nenue@87
|
189
|
Nenue@88
|
190 print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
|
Nenue@88
|
191 print(debugstack(6))
|
Nenue@88
|
192
|
Nenue@87
|
193 end
|
Nenue@87
|
194
|
Nenue@80
|
195 function VeneerWorldStateCurrencyMixin:OnLoad ()
|
Nenue@84
|
196 self:RegisterEvent("PLAYER_ENTERING_WORLD");
|
Nenue@84
|
197 self:RegisterEvent("ZONE_CHANGED");
|
Nenue@84
|
198 self:RegisterEvent("ZONE_CHANGED_INDOORS");
|
Nenue@84
|
199 self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
Nenue@80
|
200 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
|
Nenue@80
|
201 self:RegisterEvent('CHAT_MSG_CURRENCY')
|
Nenue@80
|
202 end
|
Nenue@80
|
203
|
Nenue@80
|
204 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
|
Nenue@80
|
205 self:Update()
|
Nenue@80
|
206 end
|
Nenue@80
|
207
|
Nenue@80
|
208
|
Nenue@88
|
209 function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
|
Nenue@81
|
210
|
Nenue@82
|
211 print(' Zone:', GetZoneText())
|
Nenue@81
|
212 if GetZoneText() == 'Suramar' then
|
Nenue@80
|
213 local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
|
Nenue@80
|
214
|
Nenue@80
|
215 self.Icon:SetTexture(texture)
|
Nenue@80
|
216 self.Label:SetFormattedText("%d / %d", earned, totalMax)
|
Nenue@80
|
217 self:Show()
|
Nenue@80
|
218 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
|
Nenue@80
|
219 else
|
Nenue@80
|
220 self:Hide()
|
Nenue@80
|
221 end
|
Nenue@81
|
222
|
Nenue@82
|
223
|
Nenue@81
|
224 end
|
Nenue@81
|
225
|
Nenue@82
|
226 function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
|
Nenue@87
|
227 self.timeLived = (self.timeLived or 0) + sinceLast
|
Nenue@84
|
228 if self.keepOpen then
|
Nenue@84
|
229 return
|
Nenue@84
|
230 end
|
Nenue@82
|
231 if self.timeLived >= 3 and not self.TransitionFadeOut:IsPlaying() then
|
Nenue@82
|
232 if not self.timeOut then
|
Nenue@82
|
233 self.timeOut = true
|
Nenue@84
|
234 self.TimedFadeOut:Play()
|
Nenue@82
|
235 end
|
Nenue@82
|
236 end
|
Nenue@82
|
237 end
|
Nenue@82
|
238
|
Nenue@82
|
239
|
Nenue@81
|
240 function VeneerWorldStateProgressMixin:OnLoad()
|
Nenue@82
|
241 self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
|
Nenue@81
|
242
|
Nenue@82
|
243 self:RegisterEvent("PLAYER_XP_UPDATE");
|
Nenue@82
|
244 self:RegisterEvent("UPDATE_EXHAUSTION");
|
Nenue@82
|
245 self:RegisterEvent("PLAYER_LEVEL_UP");
|
Nenue@82
|
246 self:RegisterEvent("PLAYER_UPDATE_RESTING");
|
Nenue@82
|
247
|
Nenue@82
|
248 self:RegisterEvent("ARTIFACT_UPDATE");
|
Nenue@82
|
249 self:RegisterEvent("ARTIFACT_XP_UPDATE");
|
Nenue@82
|
250 self:RegisterEvent("ARTIFACT_CLOSE");
|
Nenue@82
|
251 self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE");
|
Nenue@82
|
252
|
Nenue@82
|
253 self.progressPercent = 0
|
Nenue@82
|
254 self.progressAmount = 0
|
Nenue@82
|
255 self.progressMax = 1
|
Nenue@82
|
256 self.progressOverflow = 0
|
Nenue@84
|
257
|
Nenue@81
|
258 end
|
Nenue@81
|
259
|
Nenue@81
|
260 function VeneerWorldStateProgressMixin:Setup()
|
Nenue@81
|
261 self:UpdateXPGain()
|
Nenue@82
|
262 if self.canGainXP then
|
Nenue@81
|
263 self.mode = 'xp'
|
Nenue@81
|
264 else
|
Nenue@81
|
265 self.mode = 'artifact'
|
Nenue@81
|
266 end
|
Nenue@81
|
267 print('setup mode:', self.mode)
|
Nenue@81
|
268 end
|
Nenue@81
|
269
|
Nenue@82
|
270 function VeneerWorldStateProgressMixin:OnEvent(event, ...)
|
Nenue@82
|
271 local lastMode = self.mode
|
Nenue@82
|
272 if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
|
Nenue@81
|
273 self:UpdateXPGain()
|
Nenue@81
|
274 elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
|
Nenue@81
|
275 self.mode = 'artifact'
|
Nenue@82
|
276
|
Nenue@82
|
277 elseif event == 'PLAYER_EQUIPMENT_CHANGED' then
|
Nenue@82
|
278 local slot, hasEquip = ...
|
Nenue@82
|
279 if slot == 16 then
|
Nenue@82
|
280 self.mode = 'artifact'
|
Nenue@82
|
281 lastMode = nil
|
Nenue@82
|
282 end
|
Nenue@82
|
283 elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then
|
Nenue@82
|
284 print('forcing to XP mode')
|
Nenue@81
|
285 self.mode = 'xp'
|
Nenue@81
|
286 end
|
Nenue@82
|
287 self.modeChanged = (lastMode ~= self.mode)
|
Nenue@82
|
288 if self.modeChanged and self:IsVisible() then
|
Nenue@82
|
289 print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...)
|
Nenue@84
|
290 self:AnimateMode()
|
Nenue@82
|
291 else
|
Nenue@82
|
292 print('|cFFFFFF00'..self:GetName()..':Update()', event, ...)
|
Nenue@82
|
293 self:Update()
|
Nenue@82
|
294 end
|
Nenue@81
|
295 end
|
Nenue@81
|
296 function VeneerWorldStateProgressMixin:UpdateXPGain()
|
Nenue@82
|
297 self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled())
|
Nenue@82
|
298 if not self.canGainXP then
|
Nenue@81
|
299 self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
|
Nenue@81
|
300 end
|
Nenue@81
|
301 end
|
Nenue@81
|
302
|
Nenue@81
|
303 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
|
Nenue@81
|
304 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
|
Nenue@87
|
305
|
Nenue@87
|
306
|
Nenue@89
|
307 local progressHandlers = {
|
Nenue@89
|
308 xp = function(self)
|
Nenue@89
|
309 local hasNewInfo, showChange = false, false
|
Nenue@81
|
310 local xp = UnitXP('player')
|
Nenue@81
|
311 local xpMax = UnitXPMax('player')
|
Nenue@81
|
312 local bonusXP = GetXPExhaustion()
|
Nenue@81
|
313 if xp then
|
Nenue@81
|
314 self.progressPercent = xp / xpMax
|
Nenue@81
|
315 end
|
Nenue@84
|
316 self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax
|
Nenue@82
|
317 if bonusXP then
|
Nenue@89
|
318 self.progressOverflow = min(1,(bonusXP / xpMax))
|
Nenue@89
|
319 self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25)
|
Nenue@89
|
320 self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT')
|
Nenue@82
|
321 else
|
Nenue@89
|
322 self.progressOverflow = nil
|
Nenue@82
|
323 end
|
Nenue@89
|
324 self.ProgressBar:SetColorTexture(0, 0.5,1,1)
|
Nenue@89
|
325 self.OverflowAnchor = self.ProgressBar
|
Nenue@89
|
326 self.hasNewInfo = (self.progressAmount ~= xp)
|
Nenue@89
|
327 showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
|
Nenue@89
|
328
|
Nenue@82
|
329 self.progressAmount = xp
|
Nenue@82
|
330 self.progressMax = xpMax
|
Nenue@89
|
331 return hasNewInfo, showChange
|
Nenue@89
|
332 end,
|
Nenue@89
|
333 artifact = function(self)
|
Nenue@89
|
334 local hasNewInfo, showChange = false, false
|
Nenue@81
|
335 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
|
Nenue@82
|
336 if itemID then
|
Nenue@82
|
337 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
|
Nenue@88
|
338 print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
|
Nenue@82
|
339 hasNewInfo = (self.progressAmount ~= totalXP)
|
Nenue@89
|
340 showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
|
Nenue@82
|
341
|
Nenue@82
|
342 if totalXP > nextRankCost then
|
Nenue@82
|
343 self.progressPercent = 1
|
Nenue@85
|
344 else
|
Nenue@82
|
345 self.progressPercent = totalXP / nextRankCost
|
Nenue@82
|
346 end
|
Nenue@82
|
347
|
Nenue@82
|
348 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
|
Nenue@82
|
349
|
Nenue@82
|
350 self.ProgressBar:SetColorTexture(1,0.5,0,1)
|
Nenue@82
|
351 self.OverflowBar:Hide()
|
Nenue@82
|
352
|
Nenue@89
|
353 if totalXP > nextRankCost then
|
Nenue@89
|
354 self.progressText = self.progressText .. ' Level Up!'
|
Nenue@89
|
355 self.progressOverflow = (totalXP - nextRankCost) / nextRankCost
|
Nenue@89
|
356 self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT')
|
Nenue@89
|
357 self.OverflowAnchor = self.OverflawBar
|
Nenue@89
|
358 else
|
Nenue@89
|
359 self.progressOverflow = nil
|
Nenue@89
|
360 self.OverflowAnchor = self.ProgressBar
|
Nenue@89
|
361 end
|
Nenue@89
|
362
|
Nenue@82
|
363 self.progressAmount = totalXP
|
Nenue@82
|
364 self.progressMax = nextRankCost
|
Nenue@82
|
365 else
|
Nenue@89
|
366 self.progressOverflow = nil
|
Nenue@82
|
367 self.progressAmount = 0
|
Nenue@82
|
368 self.progressMax = 1
|
Nenue@82
|
369 self.progressText = ''
|
Nenue@82
|
370 end
|
Nenue@89
|
371 return hasNewInfo, showChange
|
Nenue@89
|
372 end
|
Nenue@89
|
373 }
|
Nenue@89
|
374
|
Nenue@89
|
375 function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
|
Nenue@89
|
376
|
Nenue@89
|
377 local progressChange = false
|
Nenue@89
|
378 print(' current mode:', self.mode)
|
Nenue@89
|
379 if (not self.mode) or (not progressHandlers[self.mode]) then
|
Nenue@89
|
380 self:HidePanel()
|
Nenue@89
|
381 return
|
Nenue@82
|
382 end
|
Nenue@82
|
383
|
Nenue@89
|
384 local hasNewInfo, showProgress = progressHandlers[self.mode](self)
|
Nenue@89
|
385 self:SetSize(600,16)
|
Nenue@89
|
386 if hasNewInfo then
|
Nenue@89
|
387 self.timeOut = nil
|
Nenue@89
|
388 self.timeLived = 0
|
Nenue@89
|
389 end
|
Nenue@82
|
390
|
Nenue@89
|
391 if not self:IsVisible() then
|
Nenue@89
|
392 self.TransitionFadeIn:Play()
|
Nenue@89
|
393 else
|
Nenue@89
|
394 self:ShowPanel()
|
Nenue@89
|
395 end
|
Nenue@89
|
396
|
Nenue@89
|
397 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown())
|
Nenue@89
|
398 print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth())
|
Nenue@89
|
399 if self.progressPercent > 0 then
|
Nenue@89
|
400 self.ProgressBar:Show()
|
Nenue@89
|
401 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0)
|
Nenue@89
|
402 self.Label:SetText(self.progressText)
|
Nenue@89
|
403
|
Nenue@89
|
404 self.ProgressSpark:ClearAllPoints()
|
Nenue@89
|
405 if self.progressOverflow then
|
Nenue@89
|
406 print(' Overflow:', self.progressOverflow)
|
Nenue@89
|
407 self.OverflowBar:Show()
|
Nenue@89
|
408 self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0)
|
Nenue@89
|
409 else
|
Nenue@89
|
410 self.OverflowBar:Hide()
|
Nenue@81
|
411 end
|
Nenue@89
|
412 self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0)
|
Nenue@81
|
413
|
Nenue@89
|
414 else
|
Nenue@89
|
415 self.ProgressBar:Hide()
|
Nenue@89
|
416 end
|
Nenue@81
|
417
|
Nenue@89
|
418 if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then
|
Nenue@89
|
419 self.OverflowBar:SetDrawLayer('ARTWORK', 1)
|
Nenue@89
|
420 self.ProgressBar:SetDrawLayer('ARTWORK', 2)
|
Nenue@89
|
421 else
|
Nenue@89
|
422 self.OverflowBar:SetDrawLayer('ARTWORK', 2)
|
Nenue@89
|
423 self.ProgressBar:SetDrawLayer('ARTWORK', 1)
|
Nenue@89
|
424 end
|
Nenue@81
|
425
|
Nenue@82
|
426 if progressChange then
|
Nenue@89
|
427 self:AnimateProgress(progressChange)
|
Nenue@81
|
428 end
|
Nenue@81
|
429
|
Nenue@82
|
430 self.modeChanged = nil
|
Nenue@84
|
431 end
|
Nenue@84
|
432
|
Nenue@89
|
433
|
Nenue@89
|
434 function VeneerWorldStateProgressMixin:AnimateProgress(progressChange)
|
Nenue@89
|
435
|
Nenue@89
|
436
|
Nenue@89
|
437 local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar
|
Nenue@89
|
438 local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth())
|
Nenue@89
|
439
|
Nenue@89
|
440 self.ProgressAdded:Show()
|
Nenue@89
|
441 self.ProgressAdded:ClearAllPoints()
|
Nenue@89
|
442 self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0)
|
Nenue@89
|
443 self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0)
|
Nenue@89
|
444
|
Nenue@89
|
445 print(' Render change:', progressWidth, changeAnchor)
|
Nenue@89
|
446 self.ProgressFlash.translation:SetOffset(progressWidth, 0)
|
Nenue@89
|
447 self.ProgressFlash:Play()
|
Nenue@89
|
448 end
|
Nenue@89
|
449
|
Nenue@84
|
450 function VeneerWorldStateProgressMixin:OnMouseDown(button)
|
Nenue@84
|
451 if button == 'RightButton' then
|
Nenue@84
|
452 if self.keepOpen then
|
Nenue@84
|
453 self.keepOpen = nil
|
Nenue@87
|
454 self.timeLived = 1000
|
Nenue@84
|
455 else
|
Nenue@84
|
456 self.keepOpen = true
|
Nenue@84
|
457 end
|
Nenue@84
|
458 print('keepOpen =', self.keepOpen)
|
Nenue@84
|
459 else
|
Nenue@89
|
460
|
Nenue@84
|
461 if self.mode == 'xp' then
|
Nenue@84
|
462 self.mode = 'artifact'
|
Nenue@84
|
463 else
|
Nenue@85
|
464 if not self.canGainXP then
|
Nenue@85
|
465 return
|
Nenue@85
|
466 end
|
Nenue@84
|
467 self.mode = 'xp'
|
Nenue@84
|
468 end
|
Nenue@89
|
469 print('|cFFFF4400Change mode:', self.mode)
|
Nenue@89
|
470
|
Nenue@89
|
471
|
Nenue@84
|
472 self:AnimateMode()
|
Nenue@84
|
473 end
|
Nenue@84
|
474
|
Nenue@84
|
475 end
|
Nenue@84
|
476
|
Nenue@84
|
477 function VeneerWorldStateProgressMixin:AnimateMode()
|
Nenue@84
|
478
|
Nenue@84
|
479 self.TransitionFadeIn:Stop()
|
Nenue@84
|
480 print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()')
|
Nenue@84
|
481 self.modeChanged = true
|
Nenue@84
|
482 self.TransitionFadeOut:Play()
|
Nenue@87
|
483 end
|
Nenue@87
|
484
|
Nenue@87
|
485 do
|
Nenue@87
|
486 function WorldStateBlockMixin:ShowPanel()
|
Nenue@87
|
487 print('|cFF0088FF'..self:GetName()..':ShowPanel()')
|
Nenue@87
|
488 self:SetShown(true)
|
Nenue@87
|
489 VeneerWorldState:Show()
|
Nenue@87
|
490 end
|
Nenue@87
|
491 function WorldStateBlockMixin:HidePanel()
|
Nenue@87
|
492 print('|cFF0088FF'..self:GetName()..':HidePanel()')
|
Nenue@87
|
493 self:SetShown(false)
|
Nenue@87
|
494 VeneerWorldState:Reanchor()
|
Nenue@87
|
495 end
|
Nenue@87
|
496
|
Nenue@87
|
497 function WorldStateBlockMixin:OnSizeChanged ()
|
Nenue@87
|
498 local h = self:GetHeight()
|
Nenue@87
|
499 if h > VeneerWorldState.maxHeight then
|
Nenue@87
|
500 VeneerWorldState.maxHeight = h
|
Nenue@87
|
501 VeneerWorldState:SetHeight(h)
|
Nenue@87
|
502 print('updating max height:', h)
|
Nenue@87
|
503 elseif h < VeneerWorldState.maxHeight then
|
Nenue@87
|
504 VeneerWorldState:Reanchor()
|
Nenue@87
|
505 end
|
Nenue@87
|
506 end
|
Nenue@87
|
507 function WorldStateBlockMixin:OnHide ()
|
Nenue@87
|
508 print('|cFF0088FF'..self:GetName()..':OnHide()')
|
Nenue@87
|
509 VeneerWorldState:Reanchor()
|
Nenue@87
|
510 end
|
Nenue@87
|
511 function WorldStateBlockMixin:OnShow ()
|
Nenue@87
|
512 self.timeLived = 0
|
Nenue@87
|
513 print('|cFF0088FF'..self:GetName()..':OnShow()')
|
Nenue@87
|
514 VeneerWorldState:Reanchor()
|
Nenue@87
|
515 end
|
Nenue@87
|
516 function WorldStateBlockMixin:Setup()
|
Nenue@87
|
517 print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
|
Nenue@88
|
518 self:Update()
|
Nenue@87
|
519 end
|
Nenue@87
|
520 function WorldStateBlockMixin:Reset()
|
Nenue@87
|
521 print('|cFF0088FF'..self:GetName()..':Reset()')
|
Nenue@87
|
522 self.keepOpen = true
|
Nenue@87
|
523 self:Setup()
|
Nenue@87
|
524 end
|
Nenue@80
|
525 end |