From 86a44a056c8b293cf18c7329b84c3d9883c749e3 Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Tue, 2 Oct 2012 08:57:03 +0200 Subject: [PATCH] Add a function to fetch coordinates safely For the coordinate feed and coordinate block. this function can be used instead of the heavier player position function to get the current player's coordinates. This means that depending on the current map zoom, the 'coordinates' will display the position on that map, which is what we'd expect. The arrow and rest of the addon continues to function correctly. This fixes an issue in the deeprun tram and other zones with no coordinates. --- TomTom.lua | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/TomTom.lua b/TomTom.lua index 230e454..b3771db 100755 --- a/TomTom.lua +++ b/TomTom.lua @@ -202,37 +202,19 @@ function TomTom:GetKeyArgs(m, f, x, y, title) return key end --- Removed after 5.0.4 and a patch to Astrolabe --- local flipFixFrame = CreateFrame("Frame", "TomTomMapFlipFixFrame", UIParent) --- do --- local throttle = 0.25 --- local counter = 0 --- flipFixFrame:SetScript("OnUpdate", function(self, elapsed) --- counter = counter + elapsed --- if counter >= throttle then --- counter = counter - throttle --- if not WorldMapFrame:IsVisible() and not WorldMapFrame:IsShown() then --- local x, y = GetPlayerMapPosition("player") --- if x <= 0 or y <= 0 then --- -- Flip the map, do not flip it back --- SetMapToCurrentZone() --- end --- end --- end --- end) --- end +-- Returns the player's current coordinates without flipping the map or +-- causing any other weirdness. This can and will cause the coordinates to be +-- weird if you zoom the map out to your parent, but there is no way to +-- recover this without changing/setting the map zoom. Deal with it =) +function TomTom:GetCurrentCoords() + local x, y = GetPlayerMapPosition("player"); + if x and y and x > 0 and y > 0 then + return x, y + end +end function TomTom:GetCurrentPlayerPosition() - return astrolabe:GetCurrentPlayerPosition() - -- -- Try to get the position without 'flipping' the map - -- local m, f, x, y = astrolabe:GetUnitPosition("player", true) - -- if m and x and y and not (x <= 0 or y <= 0) then - -- if not f then - -- local floors = astrolabe:GetNumFloors(m) - -- f = floors == 0 and 0 or 1 - -- end - -- return m, f, x, y - -- end + return astrolabe:GetUnitPosition("player", true) end function TomTom:ReloadOptions() @@ -972,7 +954,7 @@ do end function WorldMap_OnUpdate(self, elapsed) - local m,f,x,y = TomTom:GetCurrentPlayerPosition() + local x,y = TomTom:GetCurrentCoords() local opt = TomTom.db.profile if not x or not y then @@ -998,7 +980,7 @@ do if bcounter > TomTom.profile.block.throttle then bcounter = bcounter - TomTom.profile.block.throttle - local m,f,x,y = TomTom:GetCurrentPlayerPosition() + local x,y = TomTom:GetCurrentCoords() local opt = TomTom.db.profile if not x or not y then -- 1.7.9.5