comparison ClassPlan.lua @ 19:6016ec3c8adf v1.0-rc5

ClassPlan: - Colored progress bars accompany the mission and shipment journal entries. - 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:32:00 -0400
parents 08b03bcdfeac
children e49efad51698
comparison
equal deleted inserted replaced
18:08b03bcdfeac 19:6016ec3c8adf
92 --end 92 --end
93 return ( b.missionEndTime > a.missionEndTime) 93 return ( b.missionEndTime > a.missionEndTime)
94 --end 94 --end
95 --end 95 --end
96 end 96 end
97
98 97
99 ShipmentsHandler.OnGetItem = function(data) 98 ShipmentsHandler.OnGetItem = function(data)
100 if data.shipmentsTotal then 99 if data.shipmentsTotal then
101 local timeLeft = data.creationTime + data.duration - GI_currentTime 100 local timeLeft = data.creationTime + data.duration - GI_currentTime
102 if (timeLeft <= 0) and (data.shipmentsReady < data.shipmentsTotal) then 101 if (timeLeft <= 0) and (data.shipmentsReady < data.shipmentsTotal) then
153 if not self.profile then 152 if not self.profile then
154 return 153 return
155 end 154 end
156 wipe(ShipmentsInfo) 155 wipe(ShipmentsInfo)
157 156
158
159 local garrisonType = LE_GARRISON_TYPE_7_0 157 local garrisonType = LE_GARRISON_TYPE_7_0
160 local buildings = C_Garrison.GetBuildings(garrisonType); 158 local buildings = C_Garrison.GetBuildings(garrisonType);
161 local shipmentIndex = 0 159 local shipmentIndex = 0
162 --print('Buildings:') 160 --print('Buildings:')
163 for i = 1, #buildings do 161 for i = 1, #buildings do
199 for index, data in ipairs(ShipmentsInfo) do 197 for index, data in ipairs(ShipmentsInfo) do
200 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration)) 198 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration))
201 tinsert(self.profile.shipments, data) 199 tinsert(self.profile.shipments, data)
202 end 200 end
203 self.isStale = true 201 self.isStale = true
204
205 end 202 end
206 203
207 function core:OnLoad () 204 function core:OnLoad ()
208 self:RegisterEvent('PLAYER_LOGIN') 205 self:RegisterEvent('PLAYER_LOGIN')
209 self:RegisterEvent('ADDON_LOADED') 206 self:RegisterEvent('ADDON_LOADED')
210 self:RegisterEvent('PLAYER_REGEN_ENABLED') 207 self:RegisterEvent('PLAYER_REGEN_ENABLED')
211 self:RegisterEvent('PLAYER_REGEN_DISABLED') 208 self:RegisterEvent('PLAYER_REGEN_DISABLED')
212 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to 209 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to
213
214
215 self:AddHandler('missions', MissionsHandler) 210 self:AddHandler('missions', MissionsHandler)
216 self:AddHandler('shipments', ShipmentsHandler) 211 self:AddHandler('shipments', ShipmentsHandler)
217
218
219 self:Reanchor() 212 self:Reanchor()
220 end 213 end
214
221 local parentFrames = {'VeneerWorldState', 'OrderHallCommandBar'} 215 local parentFrames = {'VeneerWorldState', 'OrderHallCommandBar'}
222 function core:Reanchor() 216 function core:Reanchor()
223
224
225 self:ClearAllPoints() 217 self:ClearAllPoints()
226 218 self.anchorParent = UIParent
227 local anchorTo = 'TOP' 219 local anchorTo = 'TOP'
228 self.anchorParent = UIParent
229 for i, name in ipairs(parentFrames) do 220 for i, name in ipairs(parentFrames) do
230 local frame = _G[name] 221 local frame = _G[name]
231 if frame then 222 if frame then
232 if not BOUND_FRAMES[frame] then 223 if not BOUND_FRAMES[frame] then
233 BOUND_FRAMES[frame] = {visible = (frame:IsVisible() and frame:IsShown())} 224 BOUND_FRAMES[frame] = {visible = (frame:IsVisible() and frame:IsShown())}
360 --if realm ~= GI_currentRealm then 351 --if realm ~= GI_currentRealm then
361 --ownerText = ownerText .. ' (' .. realm .. ')' 352 --ownerText = ownerText .. ' (' .. realm .. ')'
362 --end 353 --end
363 self.Owner:SetText(ownerText) 354 self.Owner:SetText(ownerText)
364 self.Name:SetTextColor(data.classColor.r, data.classColor.g, data.classColor.b) 355 self.Name:SetTextColor(data.classColor.r, data.classColor.g, data.classColor.b)
365
366
367 end 356 end
368 357
369 function core:RefreshItems(configKey, prototype) 358 function core:RefreshItems(configKey, prototype)
370 local sortedItems = self.sortedItems[configKey] 359 local sortedItems = self.sortedItems[configKey]
371 360
452 441
453 if self.isStale then 442 if self.isStale then
454 print('updating items on show') 443 print('updating items on show')
455 self:Refresh() 444 self:Refresh()
456 end 445 end
457
458 end 446 end
459 447
460 function core:OnShow() 448 function core:OnShow()
461 if self.isStale then 449 if self.isStale then
462 print('updating items on show') 450 print('updating items on show')
528 self.throttle = self.throttle - .5 516 self.throttle = self.throttle - .5
529 else 517 else
530 return 518 return
531 end 519 end
532 520
533
534 if self.missionEndTime then 521 if self.missionEndTime then
535 local timeLeft = self.missionEndTime - time() 522 local timeLeft = self.missionEndTime - time()
536 if timeLeft < 0 then 523 if timeLeft < 0 then
537 self:OnComplete() 524 self:OnComplete()
538 else 525 else
539 self.TimeLeft:SetText(GetTimeLeftString(timeLeft)) 526 self.TimeLeft:SetText(GetTimeLeftString(timeLeft))
540
541 if timeLeft > 3600 then 527 if timeLeft > 3600 then
542 self.TimeLeft:SetTextColor(1,1,1) 528 self.TimeLeft:SetTextColor(1,1,1)
543 else 529 else
544 self.TimeLeft:SetTextColor(1,1,0) 530 self.TimeLeft:SetTextColor(1,1,0)
545 end 531 end
550 local w = self.ProgressBG:GetWidth() 536 local w = self.ProgressBG:GetWidth()
551 if progress >= 1 then 537 if progress >= 1 then
552 self.ProgressBar:SetWidth(w) 538 self.ProgressBar:SetWidth(w)
553 else 539 else
554 self.ProgressBar:SetWidth(progress * w) 540 self.ProgressBar:SetWidth(progress * w)
555
556 local r, g = 1, 0 541 local r, g = 1, 0
557 if progress >= 0.5 then 542 if progress >= 0.5 then
558 g = 1 543 g = 1
559 r = 1-((progress-0.5)*2) 544 r = 1-((progress-0.5)*2)
560 else 545 else
562 r = 1 547 r = 1
563 end 548 end
564 self.ProgressBar:SetColorTexture(r,g,0,1) 549 self.ProgressBar:SetColorTexture(r,g,0,1)
565 self.ProgressBG:SetColorTexture(r,g,0,0.125) 550 self.ProgressBG:SetColorTexture(r,g,0,0.125)
566 end 551 end
567
568 self.ProgressBG:Show() 552 self.ProgressBG:Show()
569 self.ProgressBar:Show() 553 self.ProgressBar:Show()
570 else 554 else
571 self.ProgressBG:Hide() 555 self.ProgressBG:Hide()
572 self.ProgressBar:Hide() 556 self.ProgressBar:Hide()
573 end 557 end
574
575 else 558 else
576 self.TimeLeft:SetText(self.missionEndTime) 559 self.TimeLeft:SetText(self.missionEndTime)
577 end 560 end
578 end 561 end
579 562
580 function MissionsHandler:Refresh() 563 function MissionsHandler:Refresh()
581
582
583 local r,g,b = 1, 1, 1 564 local r,g,b = 1, 1, 1
584 if self.isRare then 565 if self.isRare then
585 r,g,b = 0.1, 0.4, 1 566 r,g,b = 0.1, 0.4, 1
586 self.IconBorder:SetVertexColor(r, g, b, 1) 567 self.IconBorder:SetVertexColor(r, g, b, 1)
587 end 568 end
588 569
589
590 --self.missionData = data 570 --self.missionData = data
591 self.Name:SetText(self.name) 571 self.Name:SetText(self.name)
592
593 if #self.rewards >= 1 then 572 if #self.rewards >= 1 then
594 self.Icon:SetTexture(self.rewards[1].icon or GetItemIcon(self.rewards[1].itemID)) 573 self.Icon:SetTexture(self.rewards[1].icon or GetItemIcon(self.rewards[1].itemID))
595 self.rewardInfo = self.rewards[1] 574 self.rewardInfo = self.rewards[1]
596 else 575 else
597 self.Icon:SetAtlas(self.typeAtlas, false) 576 self.Icon:SetAtlas(self.typeAtlas, false)
601 self.Done:Show() 580 self.Done:Show()
602 else 581 else
603 self.Done:Hide() 582 self.Done:Hide()
604 end 583 end
605 584
606
607 if self.isComplete then 585 if self.isComplete then
608 self.TimeLeft:SetText('Complete!') 586 self.TimeLeft:SetText('Complete!')
609 self.Background:SetColorTexture(.25,.25,.25,1) 587 self.Background:SetColorTexture(.25,.25,.25,1)
610 else 588 else
611 self.Background:SetColorTexture(0,0,0,0.5) 589 self.Background:SetColorTexture(0,0,0,0.5)
612 end 590 end
613 591 end
614 end
615
616 592
617 function MissionsHandler:OnEnter() 593 function MissionsHandler:OnEnter()
618 if self.rewardInfo and self.rewardInfo.itemID then 594 if self.rewardInfo and self.rewardInfo.itemID then
619 GameTooltip:SetOwner(self, 'ANCHOR_LEFT') 595 GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
620 GameTooltip:SetItemByID(self.rewardInfo.itemID) 596 GameTooltip:SetItemByID(self.rewardInfo.itemID)
621 GameTooltip:Show() 597 GameTooltip:Show()
622 end 598 end
623 end 599 end
600
624 function MissionsHandler:OnLeave() 601 function MissionsHandler:OnLeave()
625 if GameTooltip:IsOwned(self) then 602 if GameTooltip:IsOwned(self) then
626 GameTooltip:Hide() 603 GameTooltip:Hide()
627 end 604 end
628 end 605 end
629 606
630
631
632 function ShipmentsHandler:Refresh() 607 function ShipmentsHandler:Refresh()
633
634 --[[ 608 --[[
635 self.icon = data.icon 609 self.icon = data.icon
636 self.shipmentCapacity = data.shipmentCapacity 610 self.shipmentCapacity = data.shipmentCapacity
637 self.shipmentsReady = data.shipmentsReady 611 self.shipmentsReady = data.shipmentsReady
638 self.shipmentsTotal = data.shipmentsTotal 612 self.shipmentsTotal = data.shipmentsTotal
651 itemIcon = itemIcon, 625 itemIcon = itemIcon,
652 itemQuality = itemQuality, 626 itemQuality = itemQuality,
653 itemID = itemID 627 itemID = itemID
654 628
655 --]] 629 --]]
656
657 self.Icon:SetTexture(self.icon) 630 self.Icon:SetTexture(self.icon)
658
659 self.Name:SetText(self.name) 631 self.Name:SetText(self.name)
660 self.Count:SetText(self.shipmentsReady) 632 self.Count:SetText(self.shipmentsReady)
661 self.Done:SetShown(self.shipmentsReady and (self.shipmentsReady >= 1)) 633 self.Done:SetShown(self.shipmentsReady and (self.shipmentsReady >= 1))
662
663 634
664 -- flag as complete 635 -- flag as complete
665 if ( self.shipmentsReady >= self.shipmentsTotal ) and (not self.isBeingResearched) then 636 if ( self.shipmentsReady >= self.shipmentsTotal ) and (not self.isBeingResearched) then
666 self.Swipe:SetCooldownUNIX(0, 0); 637 self.Swipe:SetCooldownUNIX(0, 0);
667 self.Done:Show(); 638 self.Done:Show();
676 elseif (self.shipmentsReady and (self.shipmentsReady > 0)) then 647 elseif (self.shipmentsReady and (self.shipmentsReady > 0)) then
677 self.Background:SetColorTexture(0.5,0.5,0.5,.5) 648 self.Background:SetColorTexture(0.5,0.5,0.5,.5)
678 else 649 else
679 self.Background:SetColorTexture(0,0,0,0.5) 650 self.Background:SetColorTexture(0,0,0,0.5)
680 end 651 end
681 652 end
682 end 653
683 local time = time 654 local time = time
684 function ShipmentsHandler:OnUpdate(sinceLast) 655 function ShipmentsHandler:OnUpdate(sinceLast)
685 self.throttle = (self.throttle or 1) + sinceLast 656 self.throttle = (self.throttle or 1) + sinceLast
686 if self.throttle >= 1 then 657 if self.throttle >= 1 then
687 self.throttle = self.throttle - 1 658 self.throttle = self.throttle - 1
703 self.shipmentsReady = self.shipmentsReady + 1 674 self.shipmentsReady = self.shipmentsReady + 1
704 self.creationTime = self.creationTime + self.duration 675 self.creationTime = self.creationTime + self.duration
705 -- text will be set on next update 676 -- text will be set on next update
706 end 677 end
707 end 678 end
708
709 elseif self.isBeingResearched then 679 elseif self.isBeingResearched then
710 self.TimeLeft:SetText(GetTimeLeftString(self.researchStartTime + self.researchDuration - time())) 680 self.TimeLeft:SetText(GetTimeLeftString(self.researchStartTime + self.researchDuration - time()))
711 self.TimeLeft:SetTextColor(1,1,0) 681 self.TimeLeft:SetTextColor(1,1,0)
712 else 682 else
713 self.TimeLeft:SetText('Complete!') 683 self.TimeLeft:SetText('Complete!')
714 self.TimeLeft:SetTextColor(0,1,0) 684 self.TimeLeft:SetTextColor(0,1,0)
715 end 685 end
716
717 686
718 if not self.isComplete then 687 if not self.isComplete then
719 local progress = ((time() - self.creationTime) / self.duration) 688 local progress = ((time() - self.creationTime) / self.duration)
720 local w = self.ProgressBG:GetWidth() 689 local w = self.ProgressBG:GetWidth()
721 if progress >= 1 then 690 if progress >= 1 then
730 r = 1-((progress-0.5)*2) 699 r = 1-((progress-0.5)*2)
731 else 700 else
732 g = min(progress * 2, 1) 701 g = min(progress * 2, 1)
733 r = 1 702 r = 1
734 end 703 end
735
736 self.ProgressBar:SetColorTexture(r, g, 0, 1) 704 self.ProgressBar:SetColorTexture(r, g, 0, 1)
737 self.ProgressBG:SetColorTexture(r, g, 0, .125) 705 self.ProgressBG:SetColorTexture(r, g, 0, .125)
738 self.ProgressBG:Show() 706 self.ProgressBG:Show()
739 self.ProgressBar:Show() 707 self.ProgressBar:Show()
740 else 708 else
741 self.ProgressBG:Hide() 709 self.ProgressBG:Hide()
742 self.ProgressBar:Hide() 710 self.ProgressBar:Hide()
743 end 711 end
744
745 end 712 end
746 713
747 function ShipmentsHandler:OnEnter() 714 function ShipmentsHandler:OnEnter()
748
749 if ( self.shipmentsReady and self.shipmentsTotal ) then 715 if ( self.shipmentsReady and self.shipmentsTotal ) then
750 GameTooltip:SetOwner(self, 'ANCHOR_LEFT') 716 GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
751
752 GameTooltip:AddLine(self.Owner:GetText(), self.Owner:GetTextColor()) 717 GameTooltip:AddLine(self.Owner:GetText(), self.Owner:GetTextColor())
753 GameTooltip:AddLine(self.shipmentType) 718 GameTooltip:AddLine(self.shipmentType)
754 GameTooltip:AddLine(self.shipmentsReady .. ' of '.. self.shipmentsTotal) 719 GameTooltip:AddLine(self.shipmentsReady .. ' of '.. self.shipmentsTotal)
755 GameTooltip:Show() 720 GameTooltip:Show()
756 end 721 end