Mercurial > wow > worldplan
comparison ClassPlan.lua @ 95:b29b35cb8539
- Fixed quest completion checking and handling
- Changed animation method to hopefully stop weird flickering.
- Pins are now visible before full reward data is loaded
- Filter bar redesigned:
- aligned horizontally along the top of the map display
- filter buttons display a '+' when there are matches in both current and other zones, and '*' when there only matches in other zones
- button tooltips separate local and global quests
- button categories are highlighted and labeled when the cursor is over them
- Fixed invalid POI targets appearing when the spell targeting cursor is active
- ClassOrderPlan can be closed with the game menu button
author | Nenue |
---|---|
date | Mon, 08 May 2017 22:38:52 -0400 |
parents | 79e5e96e5f18 |
children | 4d1520186ea4 a3800989f515 |
comparison
equal
deleted
inserted
replaced
94:dfd53f7c0fe5 | 95:b29b35cb8539 |
---|---|
33 local hours = floor(mod(timeLeft, (24*3600)) / 3600) | 33 local hours = floor(mod(timeLeft, (24*3600)) / 3600) |
34 local minutes = floor(mod(timeLeft, 3600) / 60) | 34 local minutes = floor(mod(timeLeft, 3600) / 60) |
35 local seconds = mod(timeLeft, 60) | 35 local seconds = mod(timeLeft, 60) |
36 if days >= 1 then | 36 if days >= 1 then |
37 return (days .. 'd' .. ' ') .. ((hours > 0) and (hours .. 'h') or '') | 37 return (days .. 'd' .. ' ') .. ((hours > 0) and (hours .. 'h') or '') |
38 elseif timeLeft < 60 then | |
39 return (seconds .. ' sec') | |
38 else | 40 else |
39 return ((hours > 0) and (hours .. 'h') or '') .. ((minutes > 0) and (' ' ..minutes .. ' min') or '') | 41 return ((hours > 0) and (hours .. 'h') or '') .. ((minutes > 0) and (' ' ..minutes .. ' min') or '') |
40 end | 42 end |
41 end | 43 end |
42 | 44 |
79 self:RegisterEvent('ADDON_LOADED') | 81 self:RegisterEvent('ADDON_LOADED') |
80 self:RegisterEvent('PLAYER_REGEN_ENABLED') | 82 self:RegisterEvent('PLAYER_REGEN_ENABLED') |
81 self:RegisterEvent('PLAYER_REGEN_DISABLED') | 83 self:RegisterEvent('PLAYER_REGEN_DISABLED') |
82 self:RegisterEvent('GARRISON_SHOW_LANDING_PAGE') | 84 self:RegisterEvent('GARRISON_SHOW_LANDING_PAGE') |
83 self:RegisterForDrag('LeftButton') | 85 self:RegisterForDrag('LeftButton') |
86 self:EnableMouse(true) | |
84 self:SetMovable(true) | 87 self:SetMovable(true) |
85 self:SetToplevel(true) | 88 self:SetToplevel(true) |
86 | 89 |
87 SLASH_CLASSPLAN1 = "/classplan" | 90 SLASH_CLASSPLAN1 = "/classplan" |
88 SLASH_CLASSPLAN2 = "/cp" | 91 SLASH_CLASSPLAN2 = "/cp" |
111 --hooksecurefunc(C_Garrison, 'RequestLandingPageShipmentInfo', function() | 114 --hooksecurefunc(C_Garrison, 'RequestLandingPageShipmentInfo', function() |
112 -- WorldPlan:print("Requesting shipments data.") | 115 -- WorldPlan:print("Requesting shipments data.") |
113 --end) | 116 --end) |
114 C_Garrison.RequestLandingPageShipmentInfo(); | 117 C_Garrison.RequestLandingPageShipmentInfo(); |
115 self.isStale = true | 118 self.isStale = true |
119 UIPanelWindows[self:GetName()] = { area = "right", pushable = 3, whileDead = 1 }; | |
120 tinsert(UISpecialFrames, self:GetName()) | |
116 end | 121 end |
117 | 122 |
118 | 123 |
119 function ClassPlan:GetCurrentProfile() | 124 function ClassPlan:GetCurrentProfile() |
120 WorldPlanData.OrderHall = WorldPlanData.OrderHall or {} | 125 WorldPlanData.OrderHall = WorldPlanData.OrderHall or {} |
146 | 151 |
147 self.HeaderInset:SetHeight(CP_HEADER_SIZE) | 152 self.HeaderInset:SetHeight(CP_HEADER_SIZE) |
148 self.ClassStripe:SetColorTexture(classColor.r, classColor.g, classColor.b, 1) | 153 self.ClassStripe:SetColorTexture(classColor.r, classColor.g, classColor.b, 1) |
149 self.ClassStripe:SetPoint('TOPLEFT', self.HeaderInset, 'BOTTOMLEFT') | 154 self.ClassStripe:SetPoint('TOPLEFT', self.HeaderInset, 'BOTTOMLEFT') |
150 | 155 |
156 self.maxItems = db.maxItems or self.maxItems | |
157 | |
151 return self.profile | 158 return self.profile |
152 end | 159 end |
153 | 160 |
154 function ClassPlan:AddHandler(frame) | 161 function ClassPlan:AddHandler(frame) |
155 print('|cFF00FF00'..frame:GetName()..' loaded') | 162 print('|cFF00FF00'..frame:GetName()..' loaded') |
163 frame.data = self.data | 170 frame.data = self.data |
164 self.profile[listKey] = self.profile[listKey] or {} | 171 self.profile[listKey] = self.profile[listKey] or {} |
165 local listTitle = frame.listTitle[index] | 172 local listTitle = frame.listTitle[index] |
166 setmetatable(self.profile[listKey], { __tostring = function() return listTitle end }) | 173 setmetatable(self.profile[listKey], { __tostring = function() return listTitle end }) |
167 frame.sortedItems[listKey] = {} | 174 frame.sortedItems[listKey] = {} |
168 | 175 frame.maxItems = self.maxItems |
169 end | 176 end |
170 frame.owningFrame = self | 177 frame.owningFrame = self |
171 frame:SetList(1) | 178 frame:SetList(1) |
172 end | 179 end |
173 | 180 |
302 self.data.IsShown = true | 309 self.data.IsShown = true |
303 self.FadeIn:Play() | 310 self.FadeIn:Play() |
304 end | 311 end |
305 end | 312 end |
306 | 313 |
314 | |
315 function ClassPlan:OnMouseDown(button) | |
316 print(button) | |
317 if button == 'RightButton' then | |
318 self:Toggle() | |
319 end | |
320 | |
321 end | |
307 | 322 |
308 function ClassPlan:OnUpdate() | 323 function ClassPlan:OnUpdate() |
309 if self.requestingData then | 324 if self.requestingData then |
310 self:RefreshData() | 325 self:RefreshData() |
311 elseif self.isStale then | 326 elseif self.isStale then |
404 if self.OnSetList then | 419 if self.OnSetList then |
405 self:OnSetList(self.currentListIndex, prevIndex) | 420 self:OnSetList(self.currentListIndex, prevIndex) |
406 end | 421 end |
407 end | 422 end |
408 | 423 |
424 function ClassPlanHandlerBase:OnLoad(...) | |
425 print(self:GetName()..':OnLoad()', ...) | |
426 self:EnableMouse(true) | |
427 end | |
428 | |
429 function ClassPlanHandlerBase:OnMouseDown(button, down) | |
430 print(self:GetName().. ':OnMouseDown()', button) | |
431 ClassOrderPlan:OnMouseDown(button) | |
432 end | |
433 | |
409 function ClassPlanHandlerBase:OnMouseWheel(delta) | 434 function ClassPlanHandlerBase:OnMouseWheel(delta) |
410 self.scrollOffset = (self.scrollOffset or 0) - ((delta > 0) and 1 or -1) | 435 if IsControlKeyDown() then |
436 if delta > 0 then | |
437 if self.maxItems < 30 then | |
438 self.maxItems = self.maxItems + 1 | |
439 end | |
440 | |
441 else | |
442 if self.maxItems >= 2 then | |
443 self.maxItems = self.maxItems - 1 | |
444 end | |
445 end | |
446 if WorldPlanData.OrderHall then | |
447 WorldPlanData.OrderHall.maxItems = self.maxItems | |
448 end | |
449 else | |
450 self.scrollOffset = (self.scrollOffset or 0) - ((delta > 0) and 1 or -1) | |
451 end | |
411 self:UpdateItems() | 452 self:UpdateItems() |
412 end | 453 end |
413 | 454 |
414 function ClassPlanHandlerBase:RefreshData() | 455 function ClassPlanHandlerBase:RefreshData() |
415 print('|cFF0088FF'..self:GetName()..':RefreshData()') | 456 print('|cFF0088FF'..self:GetName()..':RefreshData()') |
545 | 586 |
546 totalHeight = totalHeight + block:GetHeight() | 587 totalHeight = totalHeight + block:GetHeight() |
547 block.lastProfile = lastProfile | 588 block.lastProfile = lastProfile |
548 -- blot out arbitrary flags | 589 -- blot out arbitrary flags |
549 block.offerEndTime = nil | 590 block.offerEndTime = nil |
591 block.isComplete = data.isComplete | |
550 block.missionEndTime = nil | 592 block.missionEndTime = nil |
551 block.creationTime = nil | 593 block.creationTime = nil |
552 block.duration = nil | 594 block.duration = nil |
553 block.throttle = 5 | 595 block.throttle = 5 |
554 | 596 |
605 end | 647 end |
606 end | 648 end |
607 end | 649 end |
608 | 650 |
609 function ClassPlanEntryBase:SetTimeLeft(expires, duration) | 651 function ClassPlanEntryBase:SetTimeLeft(expires, duration) |
610 self.ProgressBG:Hide() | |
611 self.ProgressBar:Hide() | |
612 if not expires then | 652 if not expires then |
613 return | 653 return |
614 end | 654 end |
615 | 655 |
616 -- calculate here since time isn't available | 656 -- calculate here since time isn't available |
617 local timeLeft = expires - time() | 657 local timeLeft = expires - time() |
658 --print(self:GetName(), timeLeft) | |
618 if timeLeft < 0 then | 659 if timeLeft < 0 then |
619 -- handle being complete | 660 -- handle being complete |
620 if self.shipmentsReady and (self.shipmentsReady < self.shipmentsTotal) then | 661 if self.shipmentsReady and (self.shipmentsReady < self.shipmentsTotal) then |
621 self.TimeLeft:SetText('Ready') | 662 self.TimeLeft:SetText('Ready') |
622 else | 663 else |
623 self.TimeLeft:SetText('Complete!') | 664 self.TimeLeft:SetText('Complete!') |
624 end | 665 end |
625 else | 666 else |
626 self.TimeLeft:SetText(GetTimeLeftString(timeLeft)) | 667 self.TimeLeft:SetText(GetTimeLeftString(timeLeft)) |
627 end | 668 if duration then |
628 | 669 local progress = (duration - timeLeft) / duration |
629 if (timeLeft > 0) and duration then | 670 local r = ((progress >= .5) and (progress/2)) or 1 |
630 local progress = (duration - timeLeft) / duration | 671 local g = ((progress <= .5) and (progress*2)) or 1 |
631 local r = ((progress >= .5) and (progress/2)) or 1 | 672 self.ProgressBG:Show() |
632 local g = ((progress <= .5) and (progress*2)) or 1 | 673 self.ProgressBar:Show() |
633 self.ProgressBG:Show() | 674 self.ProgressBG:SetColorTexture(r,g,0,0.25) |
634 self.ProgressBar:Show() | 675 self.ProgressBar:SetColorTexture(r,g,0,0.5) |
635 self.ProgressBG:SetColorTexture(r,g,0,0.25) | 676 self.ProgressBar:SetWidth(self.ProgressBG:GetWidth() * progress) |
636 self.ProgressBar:SetColorTexture(r,g,0,0.5) | 677 else |
637 self.ProgressBar:SetWidth(self.ProgressBG:GetWidth() * progress) | 678 |
679 self.ProgressBG:Hide() | |
680 self.ProgressBar:Hide() | |
681 end | |
638 end | 682 end |
639 end | 683 end |
640 | 684 |
641 | 685 |
642 | 686 |