Mercurial > wow > worldplan
view 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 source
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