Mercurial > wow > worldplan
changeset 78:fadf00b437fb v1.4.1
- Fixed pins not being removed upon completion
- Fixed animation stuttering
author | Nenue |
---|---|
date | Mon, 10 Apr 2017 13:14:05 -0400 |
parents | d55ceee94714 |
children | 9be69336c0b3 |
files | QuestPOI.lua WorldQuests.lua |
diffstat | 2 files changed, 55 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/QuestPOI.lua Mon Apr 10 07:34:29 2017 -0400 +++ b/QuestPOI.lua Mon Apr 10 13:14:05 2017 -0400 @@ -259,7 +259,7 @@ end WorldMap_HijackTooltip(self.owningFrame); self:SetFrameLevel(pinBaseIndex+100) - self.Overlay:SetFrameLevel(pinBaseIndex+101) + self.Overlay:SetFrameLevel(overlayBaseIndex+100) if previousHighlight then previousHighlight:SetFrameLevel(pinBaseIndex+previousHighlight:GetID()) @@ -573,7 +573,7 @@ function QuestPOI:OnAnimStart() --qprint('|cFFFFFF00OnAnimStart(|r'..self:GetID()..'|cFFFFFF00)|r', self.fadeEvent) - self.isAnimating = true + self:Refresh('FADE_IN_START') self.isNew = nil end @@ -587,9 +587,7 @@ if self.dataLoaded then --qprint('|cFFFFFF00TryToFade('..self:GetID()..'|cFFFFFF00)|r', event) self:SetAlpha(0) - self:Refresh(event) self.FadeIn.FadeIn:SetToAlpha(db.PinAlpha) - self.isStale = true self.FadeIn:Play() else @@ -598,7 +596,6 @@ end function QuestPOI:OnAnimStop() - self.isAnimating = nil self:SetAlpha(db.PinAlpha) end @@ -606,19 +603,28 @@ if self.isNew then self:TryToFade('POI_ONSHOW_NEW') - else - if not self.isAnimating then - --print('|cFF00FF00Alpha correction') - self:SetAlpha(db.PinAlpha) -- fix stuck alpha - end + elseif not self.FadeIn:IsPlaying() then + print('|cFF00FF00Alpha correction') + self:SetAlpha(db.PinAlpha) -- fix stuck alpha if self.isStale then --print('|cFF00FF00refresh on show') self:Refresh('POI_ONSHOW_STALE') end end + self:RegisterEvent('QUEST_LOG_UPDATE') self:ShowFrames() end +function QuestPOI:OnEvent(event) + if not TQ_IsActive(self.questID) then + + self:UnregisterEvent('QUEST_LOG_UPDATE') + + self.hideReason = 'Hiding self because quest is inactive.' + self:SetShown(false) + end +end + function QuestPOI:OnHide() --DEFAULT_CHAT_FRAME:AddMessage('|cFFFFFF00'..self:GetName()..'|r:OnHide()') self:HideFrames() @@ -644,6 +650,10 @@ if owner then self:SetParent(owner) self.Overlay:SetParent(owner) + self:SetFrameStrata('HIGH') + self:SetFrameLevel(pinBaseIndex + self:GetID()) + self.Overlay:SetFrameStrata('HIGH') + self.Overlay:SetFrameLevel(overlayBaseIndex + self:GetID()) self.isStale = true else owner = self:GetParent() @@ -766,6 +776,7 @@ end +-- Non-hieriarchical display states, checked separately from used/filtered states function QuestPOI:GetCriteriaState() local isCriteria, isBounty, isSpellTarget if self.factionID then @@ -981,41 +992,44 @@ function QuestPOI:CheckFilterRules () local print = qprint local qType = self.worldQuestType - local filtered - local canShow = TQ_IsActive(self.questID) - + if not TQ_IsActive(self.questID) then + self.hideReason = 'Filter check ended because quest is inactive.' + self.used = nil + self:SetShown(false) + return + end if qType == LE_QUEST_TAG_TYPE_PROFESSION then if not(self.isKnownProfession or db.Config.ShowAllProfessionQuests) then - canShow = nil + self.hideReason = 'Failed profession check.' + self.used = nil + self:SetShown(false) + return end end - if canShow then - for filterKey, value in pairs(db.UsedFilters) do - if self[filterKey] ~= value then - if not self.filtered then - print('|cFFFF4400filtering', filterKey, value, '~=', self[filterKey], self.title) - end - filtered = true + local filtered + for filterKey, value in pairs(db.UsedFilters) do + if self[filterKey] ~= value then + if not self.filtered then + print('|cFFFF4400filtering', filterKey, value, '~=', self[filterKey], self.title) end + filtered = true end - if self.rewardType and cvar_check[self.rewardType] then - if not GetCVarBool(cvar_check[self.rewardType]) then - filtered = true - end + end + if self.rewardType and cvar_check[self.rewardType] then + if not GetCVarBool(cvar_check[self.rewardType]) then + filtered = true end - if canShow and self.filtered ~= filtered then - self.isStale = true - print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r ', canShow, filtered, self.title) - end - self.filtered = filtered end - self.used = canShow - if not canShow then - self.hideReason = "Failed filter check." + + print(' '..self.questID..':|cFFFFFF00CheckFilterRules()|r', filtered, self.title) + if self.filtered ~= filtered then + self.isStale = true end - self:SetShown(canShow) + + self.used = true + self:SetShown(true) end --- Fixes icons upon size update
--- a/WorldQuests.lua Mon Apr 10 07:34:29 2017 -0400 +++ b/WorldQuests.lua Mon Apr 10 13:14:05 2017 -0400 @@ -30,7 +30,6 @@ 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", [HIGHMOUNTAIN_ID] = 'Highmountain', [STORMHEIM_ID] = 'Stormheim', [SURAMAR_ID] = 'Suramar', [EOA_ID] = 'EyeOfAszhara', } @@ -348,7 +347,6 @@ pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin') pin:SetID(totalPins) - pin:SetFrameStrata('HIGH') numOverlays = numOverlays + 1 --pin.iconBorder:SetVertexColor(0,0,0,1) end @@ -385,8 +383,11 @@ if (not pin.dataLoaded) then local dataLoaded = pin:GetData() - isDataLoaded = (isDataLoaded and dataLoaded) - WorldPlan.dataFlush = true + if dataLoaded then + WorldPlan.dataFlush = true + else + isDataLoaded = false + end end @@ -412,8 +413,9 @@ db.TasksByID[id] = nil end pin.isActive = nil + pin.used = nil pin.dataLoaded = nil - pin:HideFrames() + pin:SetShown(false) tinsert(db.FreePins, pin) WorldPlan.dataFlush = true @@ -585,8 +587,6 @@ if pin:IsShown() and (layoutDirty or pin.isStale) then local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1] pin.owningFrame = WorldMapFrame - pin:SetFrameLevel(PinBaseIndex+pin:GetID()) - pin.Overlay:SetFrameLevel(overlayBaseIndex+pin:GetID()) pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor) if pin.isStale then pin:Refresh('WORLDMAP_REFRESH ' .. GetTime())