comparison ClassPlan.lua @ 18:08b03bcdfeac

ClassPlan: - Significant load time improvements in the order hall. * Data events are spammed gratuitously at load-in, so any sort of operation that results should be done from a delayed enclosure. In this case: using a self-destructing C_Timer identified by the function handle, and setting a flag that frame scripts can respond to.
author Nenue
date Mon, 24 Oct 2016 18:23:06 -0400
parents a2b623043970
children 6016ec3c8adf
comparison
equal deleted inserted replaced
17:594692f36b5b 18:08b03bcdfeac
22 blocks = {}, 22 blocks = {},
23 sortedItems = {}, 23 sortedItems = {},
24 timers = {}, 24 timers = {},
25 shipments = {}, 25 shipments = {},
26 playerFirst = false, 26 playerFirst = false,
27 prototypes = {} 27 prototypes = {},
28 Queued = {}
28 } 29 }
29 30
30 ClassPlanMissionMixin = { 31 ClassPlanMissionMixin = {
31 templateName = 'ClassPlanMissionEntry', 32 templateName = 'ClassPlanMissionEntry',
32 events = {'GARRISON_MISSION_LIST_UPDATE', 'GARRISON_MISSION_STARTED', 'GARRISON_MISSION_FINISHED', 'GARRISON_LANDINGPAGE_SHIPMENTS'},} 33 events = {'GARRISON_MISSION_LIST_UPDATE', 'GARRISON_MISSION_STARTED', 'GARRISON_MISSION_FINISHED', 'GARRISON_LANDINGPAGE_SHIPMENTS'},}
311 end 312 end
312 self.initialized = true 313 self.initialized = true
313 end 314 end
314 end 315 end
315 316
317 local last_invoc = {}
316 function core:OnEvent (event, ...) 318 function core:OnEvent (event, ...)
317 print(event) 319 print(event)
318 if event == 'PLAYER_REGEN_DISABLED' then 320 if event == 'PLAYER_REGEN_DISABLED' then
319 if self:IsVisible() then 321 if self:IsVisible() then
320 self.combatHide = true 322 self.combatHide = true
329 elseif event == 'PLAYER_LOGIN' then 331 elseif event == 'PLAYER_LOGIN' then
330 if not self.initialized then 332 if not self.initialized then
331 self:Setup() 333 self:Setup()
332 end 334 end
333 elseif self.initialized and self.events[event] then 335 elseif self.initialized and self.events[event] then
334 local numCalls = 0 336 self.isStale = true
335 for ptype, eventFunc in pairs(self.events[event]) do
336 numCalls = numCalls + 1
337 print('|cFF88FF00' .. tostring(ptype) .. '|r:GetPlayerData() --', numCalls)
338 eventFunc(self, event)
339 end
340
341
342 if self:IsVisible() then 337 if self:IsVisible() then
343 self:Refresh() 338
339 else
340 for handler, func in pairs(self.events[event]) do
341 if not self.Queued[handler] then
342 print('scheduling update for handler', handler)
343 self.Queued[handler] = C_Timer.NewTimer(0.25, function()
344 func(handler)
345 self.Queued[handler] = nil
346 end)
347 end
348 end
344 end 349 end
345 end 350 end
346 end 351 end
347 352
348 function core:UpdateNotifications() 353 function core:UpdateNotifications()
356 --ownerText = ownerText .. ' (' .. realm .. ')' 361 --ownerText = ownerText .. ' (' .. realm .. ')'
357 --end 362 --end
358 self.Owner:SetText(ownerText) 363 self.Owner:SetText(ownerText)
359 self.Name:SetTextColor(data.classColor.r, data.classColor.g, data.classColor.b) 364 self.Name:SetTextColor(data.classColor.r, data.classColor.g, data.classColor.b)
360 365
361 if self.isComplete then
362 self.TimeLeft:SetText('Complete!')
363 self.Background:SetColorTexture(.25,.25,.25,1)
364 else
365 self.Background:SetColorTexture(0,0,0,0.5)
366 end
367 366
368 end 367 end
369 368
370 function core:RefreshItems(configKey, prototype) 369 function core:RefreshItems(configKey, prototype)
371 local sortedItems = self.sortedItems[configKey] 370 local sortedItems = self.sortedItems[configKey]
448 447
449 function core:OnUpdate() 448 function core:OnUpdate()
450 if self.fadeTimer and self.fadeTimer < GetTime() then 449 if self.fadeTimer and self.fadeTimer < GetTime() then
451 self:Hide() 450 self:Hide()
452 end 451 end
452
453 if self.isStale then
454 print('updating items on show')
455 self:Refresh()
456 end
457
453 end 458 end
454 459
455 function core:OnShow() 460 function core:OnShow()
456 if self.isStale then 461 if self.isStale then
457 print('updating items on show') 462 print('updating items on show')
539 self.TimeLeft:SetTextColor(1,1,0) 544 self.TimeLeft:SetTextColor(1,1,0)
540 end 545 end
541 end 546 end
542 547
543 if not self.isComplete then 548 if not self.isComplete then
544 local progress = (self.missionEndTime - time()) / self.durationSeconds 549 local progress = (time() - (self.missionEndTime - self.durationSeconds)) / self.durationSeconds
545 local w = self.ProgressBG:GetWidth() 550 local w = self.ProgressBG:GetWidth()
546 if progress >= 1 then 551 if progress >= 1 then
547 self.ProgressBar:SetWidth(w) 552 self.ProgressBar:SetWidth(w)
548 else 553 else
549 self.ProgressBar:SetWidth(w - (progress * w)) 554 self.ProgressBar:SetWidth(progress * w)
555
556 local r, g = 1, 0
557 if progress >= 0.5 then
558 g = 1
559 r = 1-((progress-0.5)*2)
560 else
561 g = min(progress * 2, 1)
562 r = 1
563 end
564 self.ProgressBar:SetColorTexture(r,g,0,1)
565 self.ProgressBG:SetColorTexture(r,g,0,0.125)
550 end 566 end
551 567
552 self.ProgressBG:Show() 568 self.ProgressBG:Show()
553 self.ProgressBar:Show() 569 self.ProgressBar:Show()
554 else 570 else
583 599
584 if self.isComplete then 600 if self.isComplete then
585 self.Done:Show() 601 self.Done:Show()
586 else 602 else
587 self.Done:Hide() 603 self.Done:Hide()
604 end
605
606
607 if self.isComplete then
608 self.TimeLeft:SetText('Complete!')
609 self.Background:SetColorTexture(.25,.25,.25,1)
610 else
611 self.Background:SetColorTexture(0,0,0,0.5)
588 end 612 end
589 613
590 end 614 end
591 615
592 616
644 self.isComplete = true 668 self.isComplete = true
645 else 669 else
646 self.Swipe:SetCooldownUNIX(self.creationTime or 0 , self.duration or 0); 670 self.Swipe:SetCooldownUNIX(self.creationTime or 0 , self.duration or 0);
647 end 671 end
648 672
649 local hasPickups = (self.isComplete or (self.shipmentsTotal and (self.shipmentsReady > 0))) 673 if self.isComplete then
650 self.Background:SetAlpha(hasPickups and 1 or 0.1) 674 self.TimeLeft:SetText('Complete!')
675 self.Background:SetColorTexture(0.5,0.5,0.5)
676 elseif (self.shipmentsReady and (self.shipmentsReady > 0)) then
677 self.Background:SetColorTexture(0.5,0.5,0.5,.5)
678 else
679 self.Background:SetColorTexture(0,0,0,0.5)
680 end
681
651 end 682 end
652 local time = time 683 local time = time
653 function ShipmentsHandler:OnUpdate() 684 function ShipmentsHandler:OnUpdate(sinceLast)
685 self.throttle = (self.throttle or 1) + sinceLast
686 if self.throttle >= 1 then
687 self.throttle = self.throttle - 1
688 else
689 return
690 end
654 691
655 if (self.shipmentsReady and self.shipmentsTotal) and (self.shipmentsReady < self.shipmentsTotal) then 692 if (self.shipmentsReady and self.shipmentsTotal) and (self.shipmentsReady < self.shipmentsTotal) then
656 local timeLeft = self.creationTime + self.duration - time() 693 local timeLeft = self.creationTime + self.duration - time()
657 if self.shipmentsReady >= 1 then 694 if self.shipmentsReady >= 1 then
658 self.TimeLeft:SetText(GetTimeLeftString(timeLeft)) 695 self.TimeLeft:SetText(GetTimeLeftString(timeLeft))
675 else 712 else
676 self.TimeLeft:SetText('Complete!') 713 self.TimeLeft:SetText('Complete!')
677 self.TimeLeft:SetTextColor(0,1,0) 714 self.TimeLeft:SetTextColor(0,1,0)
678 end 715 end
679 716
717
718 if not self.isComplete then
719 local progress = ((time() - self.creationTime) / self.duration)
720 local w = self.ProgressBG:GetWidth()
721 if progress >= 1 then
722 self.ProgressBar:SetWidth(w)
723 else
724 self.ProgressBar:SetWidth(progress * w)
725 end
726
727 local r, g = 1, 0
728 if progress >= 0.5 then
729 g = 1
730 r = 1-((progress-0.5)*2)
731 else
732 g = min(progress * 2, 1)
733 r = 1
734 end
735
736 self.ProgressBar:SetColorTexture(r, g, 0, 1)
737 self.ProgressBG:SetColorTexture(r, g, 0, .125)
738 self.ProgressBG:Show()
739 self.ProgressBar:Show()
740 else
741 self.ProgressBG:Hide()
742 self.ProgressBar:Hide()
743 end
744
680 end 745 end
681 746
682 function ShipmentsHandler:OnEnter() 747 function ShipmentsHandler:OnEnter()
683 748
684 if ( self.shipmentsReady and self.shipmentsTotal ) then 749 if ( self.shipmentsReady and self.shipmentsTotal ) then