Mercurial > wow > worldplan
comparison WorldQuests.lua @ 36:21bcff08b0f4
WorldPlan:
- Quest pins are now placed on the flight map. Their visibility rules will mirror the filter options from the world map.
- Filter controls polish:
- First click negates other reward type filters. Subsequent clicks will then toggle individual reward types until the filters are reset via Right-click.
- Adheres to the Blizzard CVars added in patch 7.1
- Numerous optimizations to how data and visual updates are handled; should see an even better load time, and snappier world map interaction.
ClassPlan:
- The 'Available Missions' list is now recorded. It can be reviewed by clicking on the mission list heading.
- Information filtering by character and realm.
| author | Nenue |
|---|---|
| date | Fri, 04 Nov 2016 01:40:39 -0400 |
| parents | 26dfa661daa7 |
| children | 78cf1f19856a |
comparison
equal
deleted
inserted
replaced
| 35:26dfa661daa7 | 36:21bcff08b0f4 |
|---|---|
| 1 -- WorldPlan | 1 -- WorldPlan |
| 2 -- WorldQuests.lua | 2 -- WorldQuests.lua |
| 3 -- Created: 11/2/2016 3:40 PM | 3 -- Created: 11/2/2016 3:40 PM |
| 4 -- %file-revision% | 4 -- %file-revision% |
| 5 | 5 |
| 6 WorldPlanDataProvider = {} | |
| 7 WorldPlanDataPinMixin = {} | |
| 8 WorldPlanQuestsMixin = { | |
| 9 QuestsByZone = {}, | |
| 10 QuestsByID = {}, | |
| 11 freePins = {}, | |
| 12 } | |
| 13 local WorldQuests = WorldPlanQuestsMixin | 6 local WorldQuests = WorldPlanQuestsMixin |
| 14 | 7 |
| 15 local MC_GetNumZones, MC_GetZoneInfo = C_MapCanvas.GetNumZones, C_MapCanvas.GetZoneInfo | 8 local MC_GetNumZones, MC_GetZoneInfo = C_MapCanvas.GetNumZones, C_MapCanvas.GetZoneInfo |
| 16 local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented | 9 local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented |
| 17 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID | 10 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID |
| 82 local rgbWhite = {1, 1, 1} | 75 local rgbWhite = {1, 1, 1} |
| 83 WorldPlan:AddTypeInfo(self, REWARD_REAGENT, { r = 0, g = 1, b = 1 }) | 76 WorldPlan:AddTypeInfo(self, REWARD_REAGENT, { r = 0, g = 1, b = 1 }) |
| 84 WorldPlan:AddTypeInfo(self, REWARD_ARTIFACT_POWER, { r = 1, g = .25, b = .5, hasNumeric = true, numberRGB = rgbWhite }) | 77 WorldPlan:AddTypeInfo(self, REWARD_ARTIFACT_POWER, { r = 1, g = .25, b = .5, hasNumeric = true, numberRGB = rgbWhite }) |
| 85 WorldPlan:AddTypeInfo(self, REWARD_GEAR, { r = .1, g = .2, b = 1 }) | 78 WorldPlan:AddTypeInfo(self, REWARD_GEAR, { r = .1, g = .2, b = 1 }) |
| 86 WorldPlan:AddTypeInfo(self, REWARD_CURRENCY, { r = 1, g = 1, b = 0, hasNumeric = true, numberRGB = {1,1,0}, }) | 79 WorldPlan:AddTypeInfo(self, REWARD_CURRENCY, { r = 1, g = 1, b = 0, hasNumeric = true, numberRGB = {1,1,0}, }) |
| 87 WorldPlan:AddTypeInfo(self, REWARD_CASH, { r = 0, g = 0, b = 0, }) | 80 WorldPlan:AddTypeInfo(self, REWARD_CASH, { r = .7, g = .6, b = .32, pinMask = false, rewardMask = false }) |
| 88 | 81 |
| 89 for areaID, fileName in pairs(WORLD_QUEST_MAPS) do | 82 for areaID, fileName in pairs(WORLD_QUEST_MAPS) do |
| 90 self.QuestsByZone[areaID] = {} | 83 self.QuestsByZone[areaID] = {} |
| 91 end | 84 end |
| 92 | 85 |
| 316 local pin = WorldQuests:GetPinByQuestID(questID) | 309 local pin = WorldQuests:GetPinByQuestID(questID) |
| 317 return pin:IsShowable() | 310 return pin:IsShowable() |
| 318 end | 311 end |
| 319 | 312 |
| 320 | 313 |
| 321 | |
| 322 | |
| 323 function WorldPlanDataProvider:OnShow() | |
| 324 assert(self.ticker == nil); | |
| 325 self.ticker = C_Timer.NewTicker(10, function() self:RefreshAllData() end); | |
| 326 end | |
| 327 function WorldPlanDataProvider:OnHide() | |
| 328 self.ticker:Cancel(); | |
| 329 self.ticker = nil; | |
| 330 end | |
| 331 | |
| 332 function WorldPlanDataProvider:OnAdded(mapCanvas) | |
| 333 self.activePins = {}; | |
| 334 self.owningMap = mapCanvas | |
| 335 end | |
| 336 | |
| 337 | |
| 338 | |
| 339 function WorldPlanDataProvider:RefreshAllData() | |
| 340 local print = mprint | |
| 341 print('|cFFFF0088'..self.owningMap:GetName()..':RefreshAllData()|r') | |
| 342 | |
| 343 | |
| 344 local pinsToRemove = {}; | |
| 345 for questId in pairs(self.activePins) do | |
| 346 pinsToRemove[questId] = true; | |
| 347 end | |
| 348 | |
| 349 SetMapZoom(8) | |
| 350 | |
| 351 local mapAreaID = self:GetMap():GetMapID(); | |
| 352 for zoneIndex = 1, C_MapCanvas.GetNumZones(mapAreaID) do | |
| 353 local zoneMapID, zoneName, zoneDepth, left, right, top, bottom = C_MapCanvas.GetZoneInfo(mapAreaID, zoneIndex); | |
| 354 print(zoneMapID, zoneName) | |
| 355 if zoneDepth <= 1 then -- Exclude subzones | |
| 356 local taskInfo = C_TaskQuest.GetQuestsForPlayerByMapID(zoneMapID, mapAreaID); | |
| 357 | |
| 358 if taskInfo then | |
| 359 for i, info in ipairs(taskInfo) do | |
| 360 if HaveQuestData(info.questId) then | |
| 361 if QuestUtils_IsQuestWorldQuest(info.questId) then | |
| 362 local pin = WorldPlanQuests:AcquirePin(info.questId, zoneMapID) | |
| 363 pin:RefreshData(info) | |
| 364 pin:IsShowable() | |
| 365 if pin.used then | |
| 366 print(i, pin.x, pin.y, pin.used, pin.isNew, pin.isStale, pin:IsShown(), pin:GetAlpha()) | |
| 367 pinsToRemove[info.questId] = nil; | |
| 368 | |
| 369 local frame = self.activePins[info.questId] | |
| 370 if not frame then | |
| 371 frame = self:GetMap():AcquirePin("WorldPlanPinContainer") | |
| 372 frame:SetAlphaLimits(1, 0.7, 1) | |
| 373 frame:SetScalingLimits(1, 3, 1.5); | |
| 374 frame:SetFrameLevel(1000 + self:GetMap():GetNumActivePinsByTemplate("WorldPlanPinContainer")); | |
| 375 frame:Show() | |
| 376 self.activePins[info.questId] = frame | |
| 377 end | |
| 378 frame:SetPosition(info.x, info.y) | |
| 379 frame.pin = pin | |
| 380 | |
| 381 pin.isStale = true | |
| 382 pin:SetParent(frame) | |
| 383 pin:ClearAllPoints() | |
| 384 pin:SetPoint('CENTER', frame, 'CENTER') | |
| 385 | |
| 386 end | |
| 387 pin:SetShown(pin.used) | |
| 388 end | |
| 389 end | |
| 390 end | |
| 391 end | |
| 392 end | |
| 393 end | |
| 394 | |
| 395 for questId in pairs(pinsToRemove) do | |
| 396 self:GetMap():RemovePin(self.activePins[questId]); | |
| 397 self.activePins[questId] = nil; | |
| 398 end | |
| 399 self:GetMap():RemoveAllPinsByTemplate("WorldQuestPinTemplate"); | |
| 400 | |
| 401 end | |
| 402 | |
| 403 function WorldPlanDataPinMixin:OnShow() | |
| 404 mprint('|cFFFFFF00'..tostring(self:GetName())..':OnShow()|r') | |
| 405 end | |
| 406 | |
| 407 function WorldPlanDataPinMixin:OnMouseEnter () | |
| 408 self.pin:OnEnter() | |
| 409 end | |
| 410 | |
| 411 function WorldPlanDataPinMixin:OnMouseLeave () | |
| 412 self.pin:OnLeave() | |
| 413 end | |
| 414 | |
| 415 function WorldPlanDataPinMixin:RemoveAllData() | |
| 416 wipe(self.activePins); | |
| 417 self:GetMap():RemoveAllPinsByTemplate("WorldQuestPinTemplate"); | |
| 418 end |
