Mercurial > wow > worldplan
comparison ClassPlan.lua @ 23:e49efad51698 v1.0-rc7
* Run data scooping operations from the main Refresh block
| author | Nenue |
|---|---|
| date | Mon, 24 Oct 2016 23:17:42 -0400 |
| parents | 6016ec3c8adf |
| children | 4a7e89bffbcb |
comparison
equal
deleted
inserted
replaced
| 22:b3835b6b61f7 | 23:e49efad51698 |
|---|---|
| 52 else | 52 else |
| 53 return ((hours > 0) and (hours .. 'h') or '') .. ((minutes > 0) and (' ' ..minutes .. ' min') or '') | 53 return ((hours > 0) and (hours .. 'h') or '') .. ((minutes > 0) and (' ' ..minutes .. ' min') or '') |
| 54 end | 54 end |
| 55 end | 55 end |
| 56 | 56 |
| 57 | |
| 58 | |
| 57 MissionsHandler.GetPlayerData = function(self) | 59 MissionsHandler.GetPlayerData = function(self) |
| 58 if not self.profile then | 60 if not self.profile then |
| 59 return | 61 return |
| 60 end | 62 end |
| 61 local items = C_Garrison.GetLandingPageItems(LE_GARRISON_TYPE_7_0) | 63 local items = C_Garrison.GetLandingPageItems(LE_GARRISON_TYPE_7_0) |
| 62 print(#items) | |
| 63 | |
| 64 wipe(self.profile.missions) | 64 wipe(self.profile.missions) |
| 65 for index, data in ipairs(items) do | 65 for index, data in ipairs(items) do |
| 66 print(' ',data.name, '|cFF00FF00'.. data.timeLeft .. '|r', date("%A %I:%m %p", data.missionEndTime)) | 66 print(' -',data.name, '|cFF00FF00'.. data.timeLeft .. '|r', date("%A %I:%m %p", data.missionEndTime)) |
| 67 tinsert(self.profile.missions, data) | 67 tinsert(self.profile.missions, data) |
| 68 end | 68 end |
| 69 print('items update pending') | 69 ClassOrderPlan.isStale = true |
| 70 self.isStale = true | |
| 71 end | 70 end |
| 72 | 71 |
| 73 MissionsHandler.OnGetItem = function(data) | 72 MissionsHandler.OnGetItem = function(data) |
| 74 if data.missionEndTime < GI_currentTime then | 73 if data.missionEndTime < GI_currentTime then |
| 75 data.isComplete = true | 74 data.isComplete = true |
| 196 wipe(self.profile.shipments) | 195 wipe(self.profile.shipments) |
| 197 for index, data in ipairs(ShipmentsInfo) do | 196 for index, data in ipairs(ShipmentsInfo) do |
| 198 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration)) | 197 --DEFAULT_CHAT_FRAME:AddMessage(data.shipmentType ..' '.. tostring(data.name) ..' '.. tostring(data.creationTime) ..' '.. tostring(data.duration)) |
| 199 tinsert(self.profile.shipments, data) | 198 tinsert(self.profile.shipments, data) |
| 200 end | 199 end |
| 201 self.isStale = true | 200 ClassOrderPlan.isStale = true |
| 202 end | 201 end |
| 203 | 202 |
| 204 function core:OnLoad () | 203 function core:OnLoad () |
| 205 self:RegisterEvent('PLAYER_LOGIN') | 204 self:RegisterEvent('PLAYER_LOGIN') |
| 206 self:RegisterEvent('ADDON_LOADED') | 205 self:RegisterEvent('ADDON_LOADED') |
| 208 self:RegisterEvent('PLAYER_REGEN_DISABLED') | 207 self:RegisterEvent('PLAYER_REGEN_DISABLED') |
| 209 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to | 208 -- Blizzard_GarrisonUI already fires a shipment data request for GARRISON_SHIPMENT_RECEIVED; this is unlikely to |
| 210 self:AddHandler('missions', MissionsHandler) | 209 self:AddHandler('missions', MissionsHandler) |
| 211 self:AddHandler('shipments', ShipmentsHandler) | 210 self:AddHandler('shipments', ShipmentsHandler) |
| 212 self:Reanchor() | 211 self:Reanchor() |
| 212 C_Garrison.RequestLandingPageShipmentInfo(); | |
| 213 end | 213 end |
| 214 | 214 |
| 215 local parentFrames = {'VeneerWorldState', 'OrderHallCommandBar'} | 215 local parentFrames = {'VeneerWorldState', 'OrderHallCommandBar'} |
| 216 function core:Reanchor() | 216 function core:Reanchor() |
| 217 self:ClearAllPoints() | 217 self:ClearAllPoints() |
| 300 | 300 |
| 301 if self.data.IsShown then | 301 if self.data.IsShown then |
| 302 self:Show() | 302 self:Show() |
| 303 end | 303 end |
| 304 self.initialized = true | 304 self.initialized = true |
| 305 self.isStale = true | |
| 305 end | 306 end |
| 306 end | 307 end |
| 307 | 308 |
| 308 local last_invoc = {} | 309 local last_invoc = {} |
| 309 function core:OnEvent (event, ...) | 310 function core:OnEvent (event, ...) |
| 403 end | 404 end |
| 404 end | 405 end |
| 405 | 406 |
| 406 return totalHeight | 407 return totalHeight |
| 407 end | 408 end |
| 408 local max = math.max | 409 |
| 409 function core:Refresh() | |
| 410 if self.isStale then | |
| 411 self:SortItems() | |
| 412 end | |
| 413 self.isStale = nil | |
| 414 | |
| 415 self.currentHeight = 0 | |
| 416 for name, info in pairs(self.prototypes) do | |
| 417 local itemsHeight = self:RefreshItems(name, info) | |
| 418 self.currentHeight = max(itemsHeight, self.currentHeight) | |
| 419 end | |
| 420 | |
| 421 self:Reanchor() | |
| 422 self:SetHeight(self.currentHeight) | |
| 423 end | |
| 424 | |
| 425 function core:Toggle() | |
| 426 if self:IsShown() then | |
| 427 self:Hide() | |
| 428 else | |
| 429 self:Show() | |
| 430 end | |
| 431 | |
| 432 if self.data then | |
| 433 self.data.IsShown = self:IsShown() | |
| 434 end | |
| 435 end | |
| 436 | |
| 437 function core:OnUpdate() | |
| 438 if self.fadeTimer and self.fadeTimer < GetTime() then | |
| 439 self:Hide() | |
| 440 end | |
| 441 | |
| 442 if self.isStale then | |
| 443 print('updating items on show') | |
| 444 self:Refresh() | |
| 445 end | |
| 446 end | |
| 447 | |
| 448 function core:OnShow() | |
| 449 if self.isStale then | |
| 450 print('updating items on show') | |
| 451 self:Refresh() | |
| 452 end | |
| 453 -- grab this at least once | |
| 454 C_Garrison.RequestLandingPageShipmentInfo(); | |
| 455 ClassPlanButton.Background:Show() | |
| 456 ClassPlanButton.Grip:SetShown(true) | |
| 457 end | |
| 458 function core:OnHide() | |
| 459 ClassPlanButton.Background:Hide() | |
| 460 ClassPlanButton.Grip:SetShown(false) | |
| 461 end | |
| 462 | 410 |
| 463 local GI_profileKey, GI_profile, GI_isMine | 411 local GI_profileKey, GI_profile, GI_isMine |
| 464 local defaultClassColor = {r = 0.7, g = 0.7, b =0.7, colorStr = "ffffffff"} | 412 local defaultClassColor = {r = 0.7, g = 0.7, b =0.7, colorStr = "ffffffff"} |
| 465 local DoItemList = function (source, dest, onGetItem) | 413 local DoItemList = function (source, dest, onGetItem) |
| 466 if not source then | |
| 467 return | |
| 468 end | |
| 469 local numItems = 0 | 414 local numItems = 0 |
| 470 for index, data in ipairs(source) do | 415 for index, data in ipairs(source) do |
| 471 data.classColor = GI_profile.classColor or defaultClassColor | 416 data.classColor = GI_profile.classColor or defaultClassColor |
| 472 data.profileKey = GI_profileKey | 417 data.profileKey = GI_profileKey |
| 473 data.isMine = GI_isMine | 418 data.isMine = GI_isMine |
| 478 tinsert(dest, data) | 423 tinsert(dest, data) |
| 479 end | 424 end |
| 480 return numItems | 425 return numItems |
| 481 end | 426 end |
| 482 | 427 |
| 483 function core:SortItems() | 428 local max = math.max |
| 484 print('|cFF0088FFSortItems()|r') | 429 function core:Refresh() |
| 430 print('|cFF00FFFFRefresh()|r') | |
| 431 self.currentHeight = 0 | |
| 432 for name, ptype in pairs(self.prototypes) do | |
| 433 print(' |cFF00FF00'..name..'|r') | |
| 434 if self.isStale then | |
| 435 ptype.GetPlayerData(self) | |
| 436 self.sortedItems[name] = self.sortedItems[name] or {} | |
| 437 | |
| 438 wipe(self.sortedItems[name]) | |
| 439 --print( 'object:', ptype) | |
| 440 for key, profile in pairs(self.data.characters) do | |
| 441 if profile[name] and #profile[name] >= 1 then | |
| 442 print(' ', #profile[name], key) | |
| 443 GI_profileKey = key | |
| 444 GI_profile = profile | |
| 445 GI_isMine = (profile == self.profile) | |
| 446 local results = DoItemList(profile[name], self.sortedItems[name], ptype.OnGetItem) | |
| 447 end | |
| 448 | |
| 449 end | |
| 450 | |
| 451 if ptype.SortHandler then | |
| 452 sort(self.sortedItems[name], ptype.SortHandler) | |
| 453 end | |
| 454 end | |
| 455 | |
| 456 local itemsHeight = self:RefreshItems(name, ptype) | |
| 457 self.currentHeight = max(itemsHeight, self.currentHeight) | |
| 458 end | |
| 459 | |
| 460 self:Reanchor() | |
| 461 self:SetHeight(self.currentHeight) | |
| 462 self.isStale = nil | |
| 463 end | |
| 464 | |
| 465 function core:Toggle() | |
| 466 if self:IsShown() then | |
| 467 self:Hide() | |
| 468 else | |
| 469 self:Show() | |
| 470 end | |
| 471 | |
| 472 if self.data then | |
| 473 self.data.IsShown = self:IsShown() | |
| 474 end | |
| 475 end | |
| 476 | |
| 477 function core:OnUpdate() | |
| 478 if self.isStale then | |
| 479 print('update requested internally') | |
| 480 self:Refresh() | |
| 481 end | |
| 482 end | |
| 483 | |
| 484 function core:OnShow() | |
| 485 print('|cFF00FFFFShow()') | |
| 486 if self.isStale then | |
| 487 print('on-show update') | |
| 488 self:Refresh() | |
| 489 end | |
| 490 ClassPlanButton.Background:Show() | |
| 491 ClassPlanButton.Grip:SetShown(true) | |
| 492 end | |
| 493 function core:OnHide() | |
| 494 print('|cFF00FFFFHide()') | |
| 495 ClassPlanButton.Background:Hide() | |
| 496 ClassPlanButton.Grip:SetShown(false) | |
| 497 end | |
| 498 | |
| 499 | |
| 500 function core:SortItems(ptype) | |
| 501 print('|cFF0088FFSortItems('..tostring(ptype)..')|r') | |
| 485 GI_currentTime = time() | 502 GI_currentTime = time() |
| 486 | 503 |
| 487 for key, sortedItems in pairs(self.sortedItems) do | |
| 488 wipe(sortedItems) | |
| 489 local ptype = self.prototypes[key] | |
| 490 --print( 'object:', ptype) | |
| 491 for name, profile in pairs(self.data.characters) do | |
| 492 GI_profileKey = name | |
| 493 GI_profile = profile | |
| 494 GI_isMine = (profile == self.profile) | |
| 495 local results = DoItemList(profile[key], sortedItems, ptype.OnGetItem) | |
| 496 --print(' - ', name, results, 'items') | |
| 497 end | |
| 498 | |
| 499 if ptype.SortHandler then | |
| 500 sort(sortedItems, ptype.SortHandler) | |
| 501 end | |
| 502 end | |
| 503 end | 504 end |
| 504 | 505 |
| 505 function MissionsHandler:OnComplete() | 506 function MissionsHandler:OnComplete() |
| 506 print('flagging complete', self.name) | 507 print('flagging complete', self.name) |
| 507 self:Refresh() | 508 self:Refresh() |
