Mercurial > wow > buffalo2
comparison Modules/WorldState.lua @ 89:74e714637d6a
WorldStateProgress fade-in is called for all visibility check falses
author | Nenue |
---|---|
date | Fri, 21 Oct 2016 18:03:35 -0400 |
parents | b107b4df7eb6 |
children | 6e2cb847c3c6 |
comparison
equal
deleted
inserted
replaced
88:b107b4df7eb6 | 89:74e714637d6a |
---|---|
9 anchorPoint = 'TOP', | 9 anchorPoint = 'TOP', |
10 } | 10 } |
11 VeneerWorldStateCurrencyMixin = { | 11 VeneerWorldStateCurrencyMixin = { |
12 } | 12 } |
13 VeneerWorldStateProgressMixin = { | 13 VeneerWorldStateProgressMixin = { |
14 keepOpen = true | 14 keepOpen = true, |
15 } | 15 } |
16 VeneerWorldStateMixin = { | 16 VeneerWorldStateMixin = { |
17 maxHeight = 0, | 17 maxHeight = 0, |
18 detectedFrames = {}, | 18 detectedFrames = {}, |
19 anchorPoint = 'TOP', | 19 anchorPoint = 'TOP', |
105 end | 105 end |
106 | 106 |
107 function VeneerWorldStateMixin:Reanchor(isUpdate) | 107 function VeneerWorldStateMixin:Reanchor(isUpdate) |
108 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks') | 108 print(' |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks') |
109 self.maxHeight = 0 | 109 self.maxHeight = 0 |
110 local lastFrame | |
110 for i, frame in ipairs(self.modules) do | 111 for i, frame in ipairs(self.modules) do |
111 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight()) | 112 print(' '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight()) |
112 if frame:IsShown() then | 113 if frame:IsShown() then |
113 self.maxHeight = max(self.maxHeight, frame:GetHeight()) | 114 if lastFrame then |
115 frame:SetPoint('TOP', lastFrame, 'BOTTOM') | |
116 else | |
117 frame:SetPoint('TOP', self, 'TOP') | |
118 end | |
119 | |
120 self.maxHeight = self.maxHeight + frame:GetHeight() | |
121 lastFrame = frame | |
114 end | 122 end |
115 end | 123 end |
116 if self.maxHeight == 0 then | 124 if self.maxHeight == 0 then |
117 print (' hiding because there are no blocks') | 125 print (' hiding because there are no blocks') |
118 self:Hide() | 126 self:Hide() |
177 print(debugstack(6)) | 185 print(debugstack(6)) |
178 | 186 |
179 end | 187 end |
180 | 188 |
181 function VeneerWorldStateCurrencyMixin:OnLoad () | 189 function VeneerWorldStateCurrencyMixin:OnLoad () |
182 | |
183 self:RegisterEvent("PLAYER_ENTERING_WORLD"); | 190 self:RegisterEvent("PLAYER_ENTERING_WORLD"); |
184 self:RegisterEvent("ZONE_CHANGED"); | 191 self:RegisterEvent("ZONE_CHANGED"); |
185 self:RegisterEvent("ZONE_CHANGED_INDOORS"); | 192 self:RegisterEvent("ZONE_CHANGED_INDOORS"); |
186 self:RegisterEvent("ZONE_CHANGED_NEW_AREA"); | 193 self:RegisterEvent("ZONE_CHANGED_NEW_AREA"); |
187 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE') | 194 self:RegisterEvent('CURRENCY_DISPLAY_UPDATE') |
188 self:RegisterEvent('CHAT_MSG_CURRENCY') | 195 self:RegisterEvent('CHAT_MSG_CURRENCY') |
189 | |
190 end | 196 end |
191 | 197 |
192 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg) | 198 function VeneerWorldStateCurrencyMixin:OnEvent (event, arg) |
193 self:Update() | 199 self:Update() |
194 end | 200 end |
202 | 208 |
203 self.Icon:SetTexture(texture) | 209 self.Icon:SetTexture(texture) |
204 self.Label:SetFormattedText("%d / %d", earned, totalMax) | 210 self.Label:SetFormattedText("%d / %d", earned, totalMax) |
205 self:Show() | 211 self:Show() |
206 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6) | 212 self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6) |
207 self:SetSize(200,16) | |
208 else | 213 else |
209 self:Hide() | 214 self:Hide() |
210 end | 215 end |
211 | 216 |
212 | 217 |
290 end | 295 end |
291 | 296 |
292 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo | 297 local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo |
293 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank | 298 local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank |
294 | 299 |
295 function VeneerWorldStateProgressMixin:AnimateProgress(progressChange) | 300 |
296 | 301 local progressHandlers = { |
297 local progressWidth = self:GetWidth() * progressChange | 302 xp = function(self) |
298 | 303 local hasNewInfo, showChange = false, false |
299 print(' Render change:', progressChange, progressWidth) | |
300 self.ProgressAdded:Show() | |
301 self.ProgressAdded:ClearAllPoints() | |
302 self.ProgressAdded:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', 0, 0) | |
303 self.ProgressAdded:SetPoint('BOTTOMLEFT', self.ProgressBar, 'BOTTOMRIGHT', - (progressWidth), 0) | |
304 | |
305 | |
306 self.ProgressFlash.translation:SetOffset(progressWidth, 0) | |
307 self.ProgressFlash:Play() | |
308 end | |
309 | |
310 function VeneerWorldStateProgressMixin:Update(isBatchUpdate) | |
311 local hasNewInfo = false | |
312 local progressChange = false | |
313 print(' current mode:', self.mode) | |
314 | |
315 | |
316 if self.mode == 'xp' then | |
317 local xp = UnitXP('player') | 304 local xp = UnitXP('player') |
318 local xpMax = UnitXPMax('player') | 305 local xpMax = UnitXPMax('player') |
319 local bonusXP = GetXPExhaustion() | 306 local bonusXP = GetXPExhaustion() |
320 if xp then | 307 if xp then |
321 self.progressPercent = xp / xpMax | 308 self.progressPercent = xp / xpMax |
322 end | 309 end |
323 self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax | 310 self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax |
324 if bonusXP then | 311 if bonusXP then |
325 self.ProgressBar:SetColorTexture(0, 0.5,1) | 312 self.progressOverflow = min(1,(bonusXP / xpMax)) |
326 self.OverflowBar:Show() | 313 self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25) |
327 self.OverflowBar:ClearAllPoints() | 314 self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT') |
328 self.OverflowBar:SetPoint('BOTTOMLEFT', self.ProgressBar, 'BOTTOMRIGHT', 0, 0) | |
329 else | 315 else |
330 self.ProgressBar:SetColorTexture(0.5,0,1) | 316 self.progressOverflow = nil |
331 end | 317 end |
332 hasNewInfo = (self.progressAmount ~= xp) | 318 self.ProgressBar:SetColorTexture(0, 0.5,1,1) |
333 progressChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax) | 319 self.OverflowAnchor = self.ProgressBar |
334 self.progressOverflow = bonusXP or 0 | 320 self.hasNewInfo = (self.progressAmount ~= xp) |
321 showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax) | |
322 | |
335 self.progressAmount = xp | 323 self.progressAmount = xp |
336 self.progressMax = xpMax | 324 self.progressMax = xpMax |
337 | 325 return hasNewInfo, showChange |
338 elseif self.mode == 'artifact' then | 326 end, |
327 artifact = function(self) | |
328 local hasNewInfo, showChange = false, false | |
339 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo() | 329 local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo() |
340 | |
341 if itemID then | 330 if itemID then |
342 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0 | 331 local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0 |
343 print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost) | 332 print(' API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost) |
344 hasNewInfo = (self.progressAmount ~= totalXP) | 333 hasNewInfo = (self.progressAmount ~= totalXP) |
345 progressChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost)) | 334 showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost)) |
346 | 335 |
347 if totalXP > nextRankCost then | 336 if totalXP > nextRankCost then |
348 self.progressPercent = 1 | 337 self.progressPercent = 1 |
349 else | 338 else |
350 self.progressPercent = totalXP / nextRankCost | 339 self.progressPercent = totalXP / nextRankCost |
353 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost | 342 self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost |
354 | 343 |
355 self.ProgressBar:SetColorTexture(1,0.5,0,1) | 344 self.ProgressBar:SetColorTexture(1,0.5,0,1) |
356 self.OverflowBar:Hide() | 345 self.OverflowBar:Hide() |
357 | 346 |
358 self.progressOverflow = 0 | 347 if totalXP > nextRankCost then |
348 self.progressText = self.progressText .. ' Level Up!' | |
349 self.progressOverflow = (totalXP - nextRankCost) / nextRankCost | |
350 self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT') | |
351 self.OverflowAnchor = self.OverflawBar | |
352 else | |
353 self.progressOverflow = nil | |
354 self.OverflowAnchor = self.ProgressBar | |
355 end | |
356 | |
359 self.progressAmount = totalXP | 357 self.progressAmount = totalXP |
360 self.progressMax = nextRankCost | 358 self.progressMax = nextRankCost |
361 else | 359 else |
362 self.progressOverflow = 0 | 360 self.progressOverflow = nil |
363 self.progressAmount = 0 | 361 self.progressAmount = 0 |
364 self.progressMax = 1 | 362 self.progressMax = 1 |
365 self.progressText = '' | 363 self.progressText = '' |
366 end | 364 end |
367 end | 365 return hasNewInfo, showChange |
368 | 366 end |
369 if self.mode then | 367 } |
370 self:SetSize(600,16) | 368 |
371 if hasNewInfo then | 369 function VeneerWorldStateProgressMixin:Update(isBatchUpdate) |
372 self.timeOut = nil | 370 |
373 self.timeLived = 0 | 371 local progressChange = false |
374 if self.TransitionFadeOut:IsPlaying() then | 372 print(' current mode:', self.mode) |
375 self.TransitionFadeOut:Stop() | 373 if (not self.mode) or (not progressHandlers[self.mode]) then |
376 self:SetAlpha(1) | 374 self:HidePanel() |
377 end | 375 return |
378 if not self:IsVisible() then | 376 end |
379 self.TransitionFadeIn:Play() | 377 |
380 else | 378 local hasNewInfo, showProgress = progressHandlers[self.mode](self) |
381 self:ShowPanel() | 379 self:SetSize(600,16) |
382 end | 380 if hasNewInfo then |
383 | 381 self.timeOut = nil |
384 end | 382 self.timeLived = 0 |
385 | 383 end |
386 | 384 |
387 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown()) | 385 if not self:IsVisible() then |
388 print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth()) | 386 self.TransitionFadeIn:Play() |
387 else | |
388 self:ShowPanel() | |
389 end | |
390 | |
391 print(' Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown()) | |
392 print(' Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth()) | |
393 if self.progressPercent > 0 then | |
394 self.ProgressBar:Show() | |
395 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0) | |
396 self.Label:SetText(self.progressText) | |
397 | |
398 self.ProgressSpark:ClearAllPoints() | |
399 if self.progressOverflow then | |
400 print(' Overflow:', self.progressOverflow) | |
401 self.OverflowBar:Show() | |
402 self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0) | |
403 else | |
404 self.OverflowBar:Hide() | |
405 end | |
406 self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0) | |
407 | |
408 else | |
409 self.ProgressBar:Hide() | |
410 end | |
411 | |
412 if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then | |
413 self.OverflowBar:SetDrawLayer('ARTWORK', 1) | |
414 self.ProgressBar:SetDrawLayer('ARTWORK', 2) | |
415 else | |
416 self.OverflowBar:SetDrawLayer('ARTWORK', 2) | |
417 self.ProgressBar:SetDrawLayer('ARTWORK', 1) | |
418 end | |
389 | 419 |
390 if progressChange then | 420 if progressChange then |
391 self:AnimateProgress(progressChange) | 421 self:AnimateProgress(progressChange) |
392 end | |
393 | |
394 | |
395 if self.progressPercent > 0 then | |
396 self.ProgressBar:Show() | |
397 self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0) | |
398 self.Label:SetText(self.progressText) | |
399 | |
400 self.progressLeft = self.progressMax - self.progressAmount | |
401 if self.progressOverflow >= self.progressLeft then | |
402 | |
403 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0) | |
404 else | |
405 self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', (self.progressOverflow / self.progressMax) * self:GetWidth(), 0) | |
406 end | |
407 | |
408 else | |
409 self.ProgressBar:Hide() | |
410 end | |
411 else | |
412 self:HidePanel() | |
413 end | 422 end |
414 | 423 |
415 self.modeChanged = nil | 424 self.modeChanged = nil |
425 end | |
426 | |
427 | |
428 function VeneerWorldStateProgressMixin:AnimateProgress(progressChange) | |
429 | |
430 | |
431 local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar | |
432 local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth()) | |
433 | |
434 self.ProgressAdded:Show() | |
435 self.ProgressAdded:ClearAllPoints() | |
436 self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0) | |
437 self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0) | |
438 | |
439 print(' Render change:', progressWidth, changeAnchor) | |
440 self.ProgressFlash.translation:SetOffset(progressWidth, 0) | |
441 self.ProgressFlash:Play() | |
416 end | 442 end |
417 | 443 |
418 function VeneerWorldStateProgressMixin:OnMouseDown(button) | 444 function VeneerWorldStateProgressMixin:OnMouseDown(button) |
419 if button == 'RightButton' then | 445 if button == 'RightButton' then |
420 if self.keepOpen then | 446 if self.keepOpen then |
423 else | 449 else |
424 self.keepOpen = true | 450 self.keepOpen = true |
425 end | 451 end |
426 print('keepOpen =', self.keepOpen) | 452 print('keepOpen =', self.keepOpen) |
427 else | 453 else |
454 | |
428 if self.mode == 'xp' then | 455 if self.mode == 'xp' then |
429 self.mode = 'artifact' | 456 self.mode = 'artifact' |
430 else | 457 else |
431 if not self.canGainXP then | 458 if not self.canGainXP then |
432 return | 459 return |
433 end | 460 end |
434 self.mode = 'xp' | 461 self.mode = 'xp' |
435 end | 462 end |
463 print('|cFFFF4400Change mode:', self.mode) | |
464 | |
465 | |
436 self:AnimateMode() | 466 self:AnimateMode() |
437 end | 467 end |
438 | 468 |
439 end | 469 end |
440 | 470 |