Mercurial > wow > worldplan
changeset 69:31de7e9e7849
stop hiding pins when the timeleft returns 0; use C_TQ.IsActive
author | Nenue |
---|---|
date | Wed, 05 Apr 2017 11:36:06 -0400 |
parents | cce68795f955 |
children | bb2baedae81f |
files | FilterBar.lua QuestPOI.lua WorldPlan.lua WorldPlan.xml WorldQuests.lua |
diffstat | 5 files changed, 279 insertions(+), 152 deletions(-) [+] |
line wrap: on
line diff
--- a/FilterBar.lua Sun Apr 02 13:51:24 2017 -0400 +++ b/FilterBar.lua Wed Apr 05 11:36:06 2017 -0400 @@ -78,12 +78,13 @@ self:ClearAllPoints() self:SetPoint('TOPRIGHT') WorldPlan:AddHandler(self) - for index, info in ipairs(db.DefaultFilters) do + --[[for index, info in ipairs(db.DefaultFilters) do info.zone = db.DefaultFilterType info.continent = db.DefaultFilterType info.pinMask = "Interface\\Minimap\\UI-Minimap-Background" WorldPlan:AddTypeInfo(self,index, info) end + --]] end @@ -165,7 +166,6 @@ end function Module:Reset() - self.pinLayout = self:GetTypeInfo(255) self:GetFilters() end
--- a/QuestPOI.lua Sun Apr 02 13:51:24 2017 -0400 +++ b/QuestPOI.lua Wed Apr 05 11:36:06 2017 -0400 @@ -59,7 +59,14 @@ local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS -local REWARD_HONOR = WORLD_QUEST_REWARD_TYPE_FLAG_HONOR + +local REWARD_TYPE_NAMES = { + [REWARD_CASH] = 'Money', + [REWARD_ARTIFACT_POWER] = 'AP', + [REWARD_GEAR] = 'Equipment', + [REWARD_CURRENCY] = 'Currency', + [REWARD_REAGENT] = 'Trade Goods' +} local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE @@ -75,6 +82,7 @@ local DEFAULT_STYLE = { border = {1,1,1}, + textColor = {1,1,1,1}, x = 0, y = 0, desaturated = true, iconMask = "Interface\\Minimap\\UI-Minimap-Background", @@ -103,7 +111,9 @@ hideNumber = true, }, - [REWARD_CURRENCY] = {}, + [REWARD_CURRENCY] = { + textColor = {1,1,0,.5} + }, [REWARD_REAGENT] = { hideNumber = true, @@ -365,7 +375,7 @@ self.worldQuestType = worldQuestType self.tagAtlas = tagAtlas - local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality = self:UpdateRewards() + local dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality, xpType, xpName, xpIcon, xpCount = self:UpdateRewards() dprint('|cFFBB8844 dataLoaded|r =', dataLoaded, rewardType, itemName, itemTexture, itemNumber, quality) if dataLoaded then self.rewardType = rewardType @@ -375,6 +385,8 @@ self.itemQuality = quality self.dataLoaded = true self.isStale = true + self.xpType, self.xpName, self.xpIcon, self.xpCount = xpType, xpName, xpIcon, xpCount + end end @@ -382,6 +394,9 @@ return self.dataLoaded end +local ID_RESOURCES = 1220 +local ID_LEGIONFALL = 1342 + --- Returns true if data has changed (either from loading in or qualifications changed) function QuestPOI:UpdateRewards() local questID = self.questID @@ -393,6 +408,7 @@ local rewardItems, rewardCurrency = {}, {} local rewardIcon, rewardName, rewardCount, rewardStyle, rewardType, itemID, quantity, quality local xpIcon, xpName, xpCount, xpType + local foundPrimary if (GetNumQuestLogRewardCurrencies(questID) > 0 or GetNumQuestLogRewards(questID) > 0 or GetQuestLogRewardMoney(questID) > 0 or GetQuestLogRewardArtifactXP(questID) > 0 or GetQuestLogRewardHonor(questID)) then local money = GetQuestLogRewardMoney(questID) @@ -411,11 +427,12 @@ rewardCount = artifactXP rewardType = REWARD_ARTIFACT_POWER qprint(' artifactXP', artifactXP) + foundPrimary = true end local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID); for i = 1, numQuestCurrencies do - local name, texture, numItems = GetQuestLogRewardCurrencyInfo(i, questID); + local name, texture, numItems, currencyID = GetQuestLogRewardCurrencyInfo(i, questID); local text = BONUS_OBJECTIVE_REWARD_WITH_COUNT_FORMAT:format(texture, numItems, name); tinsert(rewardCurrency, { name = name, @@ -423,11 +440,21 @@ numItems = numItems, text = text }) - qprint(' currency', i, name, " |T"..tostring(texture)..":12:12|t") - rewardIcon = texture - rewardCount = numItems - rewardName = name - rewardType = REWARD_CURRENCY + + qprint(' currency', i, currencyID, name, " |T"..tostring(texture)..":12:12|t") + if currencyID == ID_RESOURCES then + rewardIcon = texture + rewardCount = numItems + rewardName = name + rewardType = REWARD_CURRENCY + foundPrimary = true + elseif currencyID == ID_LEGIONFALL then + xpIcon = texture + xpCount = numItems + xpName = name + xpType = REWARD_CURRENCY + end + end local honorAmount = GetQuestLogRewardHonor(questID); if honorAmount > 0 then @@ -439,7 +466,6 @@ local numQuestRewards = GetNumQuestLogRewards(questID); if numQuestRewards > 0 then - local foundPrimary for i = 1, numQuestRewards do local name, texture, numItems, quality, isUsable, itemID = GetQuestLogRewardInfo(i, questID) @@ -496,6 +522,7 @@ isUsable = isUsable }) if not foundPrimary then + print(' -updating primary') rewardType = REWARD_GEAR rewardIcon = texture @@ -516,7 +543,7 @@ return false end - return true, rewardType, rewardName, rewardIcon, rewardCount, quality + return true, rewardType, rewardName, rewardIcon, rewardCount, quality, xpType, xpName, xpIcon, xpCount else return false @@ -546,16 +573,19 @@ function QuestPOI:StartFade() if not self.isAnimating then - --qprint('|cFFFFFF00'.. self.title .. ' added to quest log.') + qprint('|cFFFFFF00clearing new status') self:SetAlpha(0) + if self.dataLoaded then + self:Refresh() self.FadeIn.FadeIn:SetToAlpha(db.PinAlpha) self.PendingFade.FadeIn:SetToAlpha(db.PinAlpha) self.PendingFade.FadeOut:SetFromAlpha(db.PinAlpha) - self.isAnimating = true - self.isNew = nil - self.isStale = true - self.FadeIn:Play() + self.isAnimating = true + self.isNew = nil + self.isStale = true + self.FadeIn:Play() + end end end @@ -566,20 +596,18 @@ function QuestPOI:OnShow () - if self.isStale then - qprint('|cFF0088FFflagged for refresh') - self:Refresh() + if self.isNew then + self:StartFade() + else + if not self.isAnimating then + print('|cFF00FF00Alpha correction') + self:SetAlpha(db.PinAlpha) -- fix stuck alpha + end + if self.isStale then + print('|cFF00FF00refresh on show') + self:Refresh() + end end - - if self.isNew then - qprint('|cFFFFFF00popping new pin handler') - self:StartFade() - end - - if not self.isAnimating then - self:SetAlpha(db.PinAlpha) -- fix stuck alpha - end - self:ShowFrames() end @@ -589,12 +617,17 @@ -- reset flags self:SetAlpha(db.PinAlpha) self.isAnimating = nil + if db.Config.DebugEnabled then + db.log(tostring(self.questID) .. ' ' .. tostring(self.title) .. "\n" .. tostring(REWARD_TYPE_NAMES[self.rewardType]) .. ' ' .. tostring(self.itemName) .. ' ' .. tostring(self.itemNumber) .. "\n|cFFFF4400" .. (self.hideReason or 'NO_MESSAGE') .. "|r\n|cFF00FFFF" .. debugstack(2,3,0) .. '|r') + end + self.hideReason = nil end -- Applies position and sizing parameters to the pin data function QuestPOI:SetAnchor(owner, dX, dY, mapWidth, mapHeight, scaleFactor) dprint(self:GetName()..':SetAnchor()', owner, dX, dY, scaleFactor, self.filtered, self.used) if not self.used then + self.hideReason = 'SetAnchor() on an unused frame.' self:HideFrames() return end @@ -616,7 +649,7 @@ local scaleChanged if scaleFactor and (self.scaleFactor ~= scaleFactor) then - print('scaleFactor') + --print('scaleFactor') self:SetScale(scaleFactor) self.Overlay:SetScale(scaleFactor) self.scaleFactor = scaleFactor @@ -645,8 +678,6 @@ print('|cFFFFFF00' ..self:GetName()..':ShowFrames()') -- do not SetShown() here end - - self.count:SetShown(true) self.Overlay:SetShown(true) self.count:SetShown(true) self.timeLabel:SetShown(true) @@ -654,10 +685,12 @@ function QuestPOI:HideFrames() if self:IsShown() then - print(self:GetName()..':HideFrames()') + if not self.hideReason then + self.hideReason = "HideFrames() called" + end + --print(self:GetName()..':HideFrames()') self:SetShown(false) end - self.count:SetShown(false) self.Overlay:SetShown(false) self.count:SetShown(false) self.timeLabel:SetShown(false) @@ -709,35 +742,24 @@ --@end-debug@ -- query for reward data if it wasn't found in the original scan - local questID = self.questID + if not self.dataLoaded then print('|cFFFF4400'..self:GetID()..':|r polling reward info') - if not (self.isAnimating) then - self.PendingFade:Play() - end + local dataLoaded = self:GetData() if dataLoaded and not tContains(db.UpdatedPins, self) then - print('|cFF00FF88'..self:GetID()..':|r reward info loaded! queue it up') - + print('|cFF00FF88'..self:GetID()..':|r delayed reward info, queueing for update') + self.PendingFade:Stop() tinsert(db.UpdatedPins, self) end return - else - if self.PendingFade:IsPlaying() then - print('|cFFFF4400'..self:GetID()..':|r cancel fader') - self.PendingFade:Stop() - end - - if self.isStale then - print(self.questID, '|cFFFFFF00flagged for update') - self:CheckFilterRules() - self:Refresh() - return - end end - self:UpdateStatus() + if self.maxAlertLevel then + self:UpdateStatus() + end + end -- Called at static intervals and with Refresh @@ -755,10 +777,6 @@ tl = timeState self.timeLabel:SetText(text) end - else - if self.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION then - self:HideFrames() - end end if tl and (timeLeft < 120) then @@ -771,10 +789,9 @@ self.alertLevel = tl self.timeLabel:SetShown(self.worldQuest and (self.maxAlertLevel >= 1)) else - if not self.completed then - self.completed = true - self:HideFrames() - end + self.hideReason = "No longer active." + self:HideFrames() + end end @@ -799,6 +816,7 @@ local tagSize = style.TagSize or DEFAULT_STYLE.TagSize local hideIcon = style.hideIcon or DEFAULT_STYLE.hideIcon local borderColor = style.border or DEFAULT_STYLE.border + local textColor = style.textColor or DEFAULT_STYLE.textColor local questID = self.questID local iconBorder = self.RewardBorder local trackingBorder = self.HighlightBorder @@ -829,7 +847,9 @@ end numberString = numberString .. 'k' end + self.count:SetText(numberString) + self.count:SetTextColor(unpack(textColor)) self.count:Show() else self.count:SetText(nil) @@ -907,16 +927,24 @@ } - function QuestPOI:CheckFilterRules () local print = qprint local qType = self.worldQuestType local filtered local canShow = TQ_IsActive(self.questID) - if SpellCanTargetQuest() then - -- hiding so player can click a valid target - self.used = nil - elseif qType == LE_QUEST_TAG_TYPE_PROFESSION then + + if db.canTargetQuests then + self:EnableMouse(false) + if not IsQuestIDValidSpellTarget(self.questID) then + self.hideReason = "Not a valid spell target." + self:SetShown(false) + return + end + else + self:EnableMouse(true) + end + + if qType == LE_QUEST_TAG_TYPE_PROFESSION then if not(self.isKnownProfession or db.Config.ShowAllProfessionQuests) then canShow = nil end @@ -942,10 +970,11 @@ end self.filtered = filtered end - self.used = canShow - - + if not canShow then + self.hideReason = "Failed filter check." + end + self:SetShown(canShow) end --- Fixes icons upon size update
--- a/WorldPlan.lua Sun Apr 02 13:51:24 2017 -0400 +++ b/WorldPlan.lua Wed Apr 05 11:36:06 2017 -0400 @@ -11,6 +11,7 @@ local BROKEN_ISLES_ID = 1007 local GetCurrentMapAreaID = GetCurrentMapAreaID local GetTime, IsLoggedIn = GetTime, IsLoggedIn +local DEBUG_HISTORY = {} -- Define tables here so the pointers match up WorldPlanCore = { defaults = {}, modules = {}, TaskQueue = {}, } @@ -192,6 +193,50 @@ end end +function db.log(msg) + WorldPlanData.Debug = WorldPlanData.Debug or {} + tinsert(WorldPlanData.Debug, msg) + tinsert(DEBUG_HISTORY, msg) + if WorldPlanDebug:IsShown() then + WorldPlanDebug:Update() + end +end + +WorldPlanDebugMixin = { + OnLoad = function(self) + self:SetFont("Interface\\Addons\\Devian\\font\\SourceCodePro-Regular.ttf", 13, 'NORMAL') + self:SetJustifyH('LEFT') + self:SetFading(false) + self:SetMaxLines(2048) + self.loadedMessages = 0 + end, + OnShow = function(self) + if self.loadedMessages < #DEBUG_HISTORY then + self:Update() + end + end, + Update = function(self) + for i = self.loadedMessages, #DEBUG_HISTORY do + self:AddMessage(DEBUG_HISTORY[i]) + self.loadedMessages = i + end + end , + OnMouseWheel = function(self, delta) + + local up = delta > 0 + if IsControlKeyDown() then + if up then self:ScrollToTop() + else self:ScrollToBottom() end + elseif IsShiftKeyDown() then + if up then self:PageUp() + else self:PageDown() end + else + if up then self:ScrollUp() + else self:ScrollDown() end + end +end +} + function WorldPlanCore:OnConfigUpdate() for _, module in ipairs(db.OrderedModules) do if module.OnConfigUpdate then @@ -389,7 +434,16 @@ if not WorldPlanData then WorldPlanData = {key = 0} end + + -- debug info WorldPlanData.key = (WorldPlanData.key or 0) + 1 + WorldPlanData.Debug = WorldPlanData.Debug or {} + for _, msg in ipairs(WorldPlanData.Debug) do + tinsert(DEBUG_HISTORY, msg) + end + tinsert(DEBUG_HISTORY, '--SESSION BREAK--') + wipe(WorldPlanData.Debug) + db.Config = WorldPlanData for k,v in pairs(db.DefaultConfig) do --[===[@non-debug@ @@ -484,6 +538,14 @@ self:print('WorldPlanSummary:Refresh(true)') WorldPlanSummary:Refresh(true) end + elseif arg1 == 'log' then + WorldPlanDebug:SetShown(true) + elseif arg1 == 'debug' then + if WorldPlanData then + WorldPlanData.DebugEnabled = (not WorldPlanData.DebugEnabled) + self:print(WorldPlanData.DebugEnabled and "Debugger on." or "Debugger off.") + end + else self:print('Refreshing data.') self:Refresh(true)
--- a/WorldPlan.xml Sun Apr 02 13:51:24 2017 -0400 +++ b/WorldPlan.xml Wed Apr 05 11:36:06 2017 -0400 @@ -81,6 +81,7 @@ <Anchor point="CENTER" /> </Anchors> </Texture> + </Layer> <Layer level="OVERLAY"> <Texture parentKey="dot" hidden="true" setAllPoints="false"> @@ -173,5 +174,25 @@ </Scripts> </Frame> + <ScrollingMessageFrame name="WorldPlanDebug" parent="UIParent" mixin="WorldPlanDebugMixin" hidden="true" frameStrata="TOOLTIP"> + <Size x="700" y="500" /> + <Anchors> + <Anchor point="CENTER" /> + </Anchors> + <Scripts> + <OnLoad method="OnLoad" /> + <OnShow method="OnShow" /> + <OnUpdate method="OnUpdate" /> + <OnMouseWheel method="OnMouseWheel" /> + </Scripts> + <Layers> + <Layer level="BACKGROUND"> + <Texture setAllPoints="true"> + <Color a="1" r="0" g="0" b="0" /> + </Texture> + </Layer> + </Layers> + </ScrollingMessageFrame> + </Ui> \ No newline at end of file
--- a/WorldQuests.lua Sun Apr 02 13:51:24 2017 -0400 +++ b/WorldQuests.lua Wed Apr 05 11:36:06 2017 -0400 @@ -13,7 +13,7 @@ local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe local GetTaskInfo, GetTasksTable, HaveQuestData = GetTaskInfo, GetTasksTable, HaveQuestData local GetTime = GetTime -local SpellCanTargetQuest = SpellCanTargetQuest +local SpellCanTargetQuest, IsQuestIDValidSpellTarget = SpellCanTargetQuest, IsQuestIDValidSpellTarget local tonumber, abs = tonumber, math.abs local GetQuestLogRewardInfo = GetQuestLogRewardInfo local GetCurrentMapAreaID, GetMapInfo, GetMapNameByID = GetCurrentMapAreaID, GetMapInfo, GetMapNameByID @@ -25,6 +25,8 @@ local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end +local ToggleButton = {} +local callbacks = {} local PinBaseIndex = 1200 local BROKEN_ISLES_ID, DALARAN_ID, AZSUNA_ID, VALSHARAH_ID, HIGHMOUNTAIN_ID, STORMHEIM_ID, SURAMAR_ID, EOA_ID = 1007, 1014, 1015,1018, 1024, 1017, 1033, 1096 local WORLD_QUEST_MAPS = { [DALARAN_ID] = 'Dalaran70', [AZSUNA_ID] = 'Azsuna', [VALSHARAH_ID] = "Val'sharah", @@ -39,12 +41,12 @@ 0.25, 0.7, 1 } -local ToggleButton = {} +local currentScale = WorldMapDetailFrame:GetScale() +local canTargetQuests local numShown = 0 local numLoaded = 0 -local isDataLoaded -local numPins = 0 -local NumPinFrames = 1 +local isDataLoaded = true +local numOverlays = 1 local scaleConstant = 1 Module.TasksByID = {} @@ -69,42 +71,28 @@ end -local currentScale = WorldMapDetailFrame:GetScale() -function Module:RefreshIfChanged() - local scaleCheck = WorldMapDetailFrame:GetScale() - if scaleCheck ~= currentScale then - print('|cFF00FF88scale changed from', currentScale, 'to', scaleCheck) - self:Refresh() - currentScale = scaleCheck - end -end function Module:Setup() print('|cFFFF4400'..self:GetName()..':Setup()') - for mapID, mapName in pairs(WORLD_QUEST_MAPS) do db.QuestsByZone[mapID] = {} end - - hooksecurefunc("ClickWorldMapActionButton", function () self:OnClickWorldMapActionButton() end) - hooksecurefunc("WorldMapScrollFrame_ReanchorQuestPOIs", function() - print("WorldMapScrollFrame_ReanchorQuestPOIs") - self:RefreshIfChanged() - end) - hooksecurefunc("WorldMap_UpdateQuestBonusObjectives", function () - self:OnUpdateQuestBonusObjectives() - end) - hooksecurefunc("WorldMapFrame_UpdateMap", function() - print("WorldMapFrame_UpdateMap") - self:RefreshIfChanged() - end) - WorldMapFrame.UIElementsFrame.BountyBoard:SetSelectedBountyChangedCallback(function() - self:OnSelectedBountyChanged() - end); - WorldMapFrame.UIElementsFrame.ActionButton:SetOnCastChangedCallback(function() - print("CastChangedCallback") - self:Refresh(true) - end); + for target, arg in pairs(callbacks) do + print(type(target)) + if type(target) == 'table' then + local callerName = target:GetName() + for name, method in pairs(arg) do + print(callerName, arg) + hooksecurefunc(target, name, function(...) + self:OnSecureHook(callerName .. '.' .. arg, method, ...) + end) + end + else + hooksecurefunc(target, function(...) + self:OnSecureHook(target, arg, ...) + end) + end + end self.Status = CreateFrame('Frame', nil, self) self.Status:SetPoint('TOPLEFT', WorldMapPOIFrame, 'TOPLEFT', 0, 0) @@ -127,8 +115,6 @@ translateTo = numShown * status:GetWidth() status.t:SetWidth(translateTo) end - - end) self:SetAllPoints(WorldMapPOIFrame) @@ -137,6 +123,29 @@ end self:Show() end +callbacks.ClickWorldMapActionButton = function(WorldQuests) + WorldQuests:GetUsedPOIs() +end +callbacks.WorldMap_UpdateQuestBonusObjectives = function(WorldQuests) + WorldQuests:GetUsedPOIs() +end +callbacks.WorldMapFrame_UpdateMap = function(WorldQuests) + WorldQuests:RefreshIfChanged() +end +callbacks.WorldMapScrollFrame_ReanchorQuestPOIs = function (WorldQuests) + WorldQuests:RefreshIfChanged() +end +callbacks[WorldMapFrame.UIElementsFrame.BountyBoard] = { + SetSelectedBountyIndex = function(WorldQuests) + WorldQuests:UpdateBountyInfo() + end +} +callbacks[WorldMapFrame.UIElementsFrame.ActionButton] = { + UpdateCastingState = function(WorldQuests) + WorldQuests:Refresh(true) + end +} + local GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted = GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID, IsQuestFlaggedCompleted function Module:UpdateBountyInfo() @@ -181,10 +190,6 @@ db.BountyUpdate = nil end -function Module:OnSelectedBountyChanged() - self:UpdateBountyInfo() -end - function Module:OnConfigUpdate() print('|cFFFFFF00OnConfigUpdate()|r') if db.Config.FadeWhileGrouped then @@ -217,25 +222,23 @@ end end -function Module:UpdateBlizzButtons() - - local func = SpellCanTargetQuest() and InternalShowButton or InternalHideButton +db.UsedPOIs = {} +function Module:GetUsedPOIs() + db.canTargetQuests = SpellCanTargetQuest() + local func = db.canTargetQuests and InternalShowButton or InternalHideButton + wipe(db.UsedPOIs) for i = 1, NUM_WORLDMAP_TASK_POIS do local button = _G['WorldMapFrameTaskPOI'..i] if button and button.worldQuest then func(button, i) + db.UsedPOIs[button.questID] = button end end end -function Module:OnUpdateQuestBonusObjectives() - rprint('|cFFFF4400WorldMap_UpdateQuestBonusObjectives') - self:UpdateBlizzButtons() -end - -function Module:OnClickWorldMapActionButton() - rprint('|cFFFF4400ClickWorldMapActionButton') - self:UpdateBlizzButtons() +function Module:OnSecureHook(callbackName, func, ...) + rprint('|cFFFF4400'..callbackName..'|r', ...) + func(self, ...) end local defaults = {} @@ -255,6 +258,7 @@ self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED') self:RegisterEvent('SKILL_LINES_CHANGED') self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED') + self:RegisterEvent('ARTIFACT_UPDATE') end function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen) @@ -278,15 +282,11 @@ function Module:OnEvent (event, ...) print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...) - if (event == 'QUEST_LOG_UPDATE') or (event == 'SUPER_TRACKED_QUEST_CHANGED') then - local questID, added = ... - if questID and added then - local questPOI = self:AcquirePin(questID) - questPOI:GetQuestInfo() - questPOI.isStale = true + if (event == 'QUEST_LOG_UPDATE') then + if self:IsVisible() then + self:Refresh() + else self.isStale = true - else - self:Refresh() end print('WorldMapFrame', WorldMapFrame:IsVisible(), 'hasUpdates:', self.isStale) elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then @@ -303,9 +303,10 @@ print('push artifact knowledge update', self.akLevel, 'to', ak) self.akLevel = ak for index, pin in pairs( db.QuestsByID) do - pin.dataLoaded = nil + if pin.rewardType == REWARD_ARTIFACT_POWER then + pin.dataLoaded = nil + end end - self:Refresh() end elseif event == 'SUPER_TRACKED_QUEST_CHANGED' then if superTrackedQuestID and db.QuestsByID[superTrackedQuestID] then @@ -339,7 +340,7 @@ --print('|cFF00FF00Re-using', pin:GetName()) else totalPins = totalPins + 1 - local name = 'WorldPlanQuestMarker' .. NumPinFrames + local name = 'WorldPlanQuestMarker' .. numOverlays --print('|cFF00FF00Creating', name) pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') @@ -348,7 +349,7 @@ return self:GetTypeInfo(typeID) end pin:SetID(totalPins) - NumPinFrames = NumPinFrames + 1 + numOverlays = numOverlays + 1 --pin.iconBorder:SetVertexColor(0,0,0,1) end pin.questID = questID @@ -381,7 +382,6 @@ pin.isActive = TQ_IsActive(questID) pin:CheckFilterRules() rprint(pin:GetID(), pin.filtered, pin.used) - pin:SetShown(pin.used) return pin end @@ -520,7 +520,14 @@ local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] print(pin.title, pin.dataLoaded and not pin.filtered, scaleFactor) pin:SetAnchor(nil, pin.x, pin.y, self.hostWidth, self.hostHeight, scaleFactor) + + if pin.isNew then + pin:OnShow() + end + + pin = tremove(db.UpdatedPins) + end end @@ -607,6 +614,7 @@ return self:MarkAllPins() end if not db.Config.EnablePins then + numShown = 0 return end @@ -618,13 +626,10 @@ pin.used = nil end - if SpellCanTargetQuest() then - self:UpdateBlizzButtons() - else - self:UpdateAnchors(nil) - end + canTargetQuests = SpellCanTargetQuest() + self:UpdateAnchors() - --local showQuestPOI = db.Config.EnablePins + -- calculate quests shown numShown = 0 numLoaded = 0 for questID, pin in pairs(db.QuestsByID) do @@ -644,6 +649,7 @@ if oV == true then rprint('|cFFFF4400 -|r', questID, pin.title) end + pin.hideReason = "Not used in map area " .. (db.currentMapID) pin:HideFrames() end end @@ -659,6 +665,18 @@ self.isZoomDirty = nil end +function Module:RefreshIfChanged() + local scaleCheck = WorldMapDetailFrame:GetScale() + if scaleCheck ~= currentScale then + print('|cFF00FF88scale changed from', currentScale, 'to', scaleCheck) + self:Refresh() + currentScale = scaleCheck + elseif self.isStale then + print('|cFF00FF88isStale flag was set') + self:Refresh() + end +end + -- update visibility states of all pins function Module:MarkAllPins(pins) print(' |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins) @@ -676,10 +694,8 @@ return end - --print(' |- ', pin.questID, pin.title) rprint('|cFF00FF00update|r', pin.questID, pin.title) - if x and y then local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] pin:SetFrameLevel(PinBaseIndex+pin:GetID()) @@ -688,10 +704,10 @@ --tinsert(self.UsedPositions, pin) end - if self:IsVisible() and (pin.isStale) then pin:Refresh() end + if mapID then if not db.QuestsByZone[mapID] then db.QuestsByZone[mapID] = {} @@ -700,15 +716,16 @@ end end -function Module:UpdateMap(taskInfo, mapID) +-- Updates quest markers in taskInfo while associating them with the given map +function Module:UpdateQuestsForMap(taskInfo, mapID) rprint('Map', GetMapNameByID(mapID), GetMapNameByID(db.currentMapID)) for index, info in pairs(taskInfo) do self:UpdateQuestButton(info, mapID) end end +-- Used to refresh the visible quest markers function Module:UpdateAnchors () - wipe(self.UsedPositions) print(' |cFF00FF00'..self:GetName()..':UpdateAnchors()') self.hostWidth, self.hostHeight = WorldMapPOIFrame:GetSize() @@ -720,13 +737,11 @@ if isMicroDungeon then return end - -- starts as true + isDataLoaded = true - - numPins = 0 local taskInfo = TQ_GetQuestsForPlayerByMapID(db.currentMapID) if taskInfo then - self:UpdateMap(taskInfo, db.currentMapID) + self:UpdateQuestsForMap(taskInfo, db.currentMapID) end local numZones = MC_GetNumZones(db.currentMapID) if numZones then @@ -734,7 +749,7 @@ local mapAreaID = MC_GetZoneInfo(db.currentMapID, i) local taskInfo = TQ_GetQuestsForPlayerByMapID(mapAreaID, db.currentMapID) if taskInfo then - self:UpdateMap(taskInfo, mapAreaID) + self:UpdateQuestsForMap(taskInfo, mapAreaID) end end end