diff ClassPlanMissions.lua @ 35:26dfa661daa7

WorldPlan: - Quest pins will appear in the flight map. They follow the filter settings applied from the world map. - Reward filter toggle changed to clear out other reward filters. The assumption being that one is most often looking only for that particular type of quest when they go to use it. - Fixed filter bar info falling out of sync after player-triggered world map updates. - Code stuff: -- Quest pin shown-state management makes better use of OnShow OnHide handlers, SetShown is toggled and it all goes from there -- WorldQuests module re-factored outside of the top level frame script. ClassPlan: - Available missions are now recorded; the mission list can be toggled between in-progress and available by clicking the heading.
author Nenue
date Thu, 03 Nov 2016 17:29:15 -0400
parents
children 589c444d4837
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ClassPlanMissions.lua	Thu Nov 03 17:29:15 2016 -0400
@@ -0,0 +1,152 @@
+local MissionList = ClassPlanMissionHandler
+local ListEntry = ClassPlanMissionEntryMixin
+local ORDERHALL_TYPE = LE_GARRISON_TYPE_7_0
+function ClassPlanMissionHandler:Reanchor()
+  self:SetPoint('TOPRIGHT', 0, -24)
+  self:SetPoint('BOTTOMLEFT', ClassOrderPlan:GetWidth()/2, 0)
+
+end
+local GetPrimaryGarrisonFollowerType = GetPrimaryGarrisonFollowerType
+local C_Garrison = C_Garrison
+
+local wipe, tinsert, date, ipairs = table.wipe, table.insert, date, ipairs
+local GetItemIcon = GetItemIcon
+local print = DEVIAN_WORKSPACE and function(...) print('ClassPlan', ...) end or nop
+
+function ClassPlanMissionHandler:GetPlayerData (profile)
+  local items = C_Garrison.GetAvailableMissions(GetPrimaryGarrisonFollowerType(ORDERHALL_TYPE));
+  if not items then
+    return
+  end
+  wipe(profile.missions)
+  wipe(profile.available)
+
+
+  for i = 1, #items do
+    if (not items[i].isBuilding and items[i].isZoneSupport) then
+    else
+
+      tinsert(profile.available, items[i])
+    end
+  end
+
+  local items = C_Garrison.GetLandingPageItems(ORDERHALL_TYPE)
+  for index, data in ipairs(items) do
+    print(' -',data.name, '|cFF00FF00'.. data.timeLeft .. '|r', date("%A %I:%m %p", data.missionEndTime))
+    tinsert(profile.missions, data)
+  end
+  return true
+end
+
+function ClassPlanMissionHandler:OnGetItem (data)
+  if data.missionEndTime and (data.missionEndTime < self.currentTime) then
+    data.isComplete = true
+  end
+  if data.offerEndTime and (data.offerEndTime < self.currentTime) then
+    data.isExpired = true
+    data.timeToKeep = self.currentTime + 300
+  end
+end
+
+MissionList.SortHandler = function (a,b)
+  local result = false
+  --if not a or not b then
+  --  return true
+  --else
+  --if (a.isMine ~= b.isMine) then
+  --  result = a.isMine
+  --else
+  --if (not b.missionEndTime) or (not a.missionEndTime) then
+  --  print('missing article', b.missionEndTime, a.missionEndTime)
+  --end
+  if b.isComplete ~= a.isComplete then
+    return a.isComplete
+  elseif b.isMine ~= a.isMine then
+    return a.isMine
+  elseif b.missionEndTime then
+    return ( b.missionEndTime > a.missionEndTime)
+  else
+    return  ((b.offerEndTime or 0) > (a.offerEndTime or 0))
+  end
+
+  --end
+  --end
+end
+
+
+function MissionList:OnShow()
+  print('|cFF00FF88'..self:GetName()..':OnShow()|r')
+end
+
+
+
+function ClassPlanMissionEntryMixin:OnComplete()
+  print('flagging complete', self.name)
+  self:Update()
+end
+
+function ClassPlanMissionEntryMixin:OnUpdate(sinceLast)
+  self.throttle = (self.throttle or .5) + sinceLast
+  if self.throttle < .5 then
+    return
+  else
+    self.throttle = self.throttle - .5
+  end
+  if self.offerEndTime then
+    self:SetTimeLeft(self.offerEndTime)
+  elseif self.missionEndTime then
+    self:SetTimeLeft(self.missionEndTime, self.durationSeconds)
+  end
+end
+
+function ClassPlanMissionEntryMixin:OnLoad()
+  print('|cFFFF4400',self:GetName() or tostring(self), 'onload')
+  self.Count = self.Overlay.Count
+  self.Name = self.Overlay.Name
+  self.TimeLeft = self.Overlay.TimeLeft
+  self.Owner = self.Overlay.Owner
+  self.maxDisplayed = 10
+
+  self.Icon:SetDesaturated(false)
+  self.Done:Hide()
+end
+
+function ClassPlanMissionEntryMixin:Update()
+  local r,g,b = 1, 1, 1
+  if self.isRare then
+    r,g,b = 0.1, 0.4, 1
+    self.IconBorder:SetVertexColor(r, g, b, 1)
+  end
+
+  --self.missionData = data
+  self.Name:SetText(self.name)
+  if #self.rewards >= 1 then
+    self.Icon:SetTexture(self.rewards[1].icon or GetItemIcon(self.rewards[1].itemID))
+    self.rewardInfo = self.rewards[1]
+  else
+    self.Icon:SetAtlas(self.typeAtlas, false)
+  end
+
+
+
+  if self.isComplete then
+    self.TimeLeft:SetText('Complete!')
+    self.Background:SetColorTexture(.25,.25,.25,1)
+  else
+    self.Background:SetColorTexture(0,0,0,0.5)
+  end
+end
+
+function ListEntry:OnEnter()
+  if self.rewardInfo and self.rewardInfo.itemID then
+    GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
+    GameTooltip:SetItemByID(self.rewardInfo.itemID)
+    GameTooltip:Show()
+  end
+end
+
+function ListEntry:OnLeave()
+  if GameTooltip:IsOwned(self) then
+    GameTooltip:Hide()
+  end
+end
\ No newline at end of file