From 74329cfecfcf2682abb599f707e6df5cfa99409a Mon Sep 17 00:00:00 2001 From: James Whitehead Ii Date: Wed, 19 Sep 2007 01:21:06 +0000 Subject: [PATCH] * Initial working implementation of TomTom:SetWaypoint(c,z,x,y,far,near,arrive,callback) and TomTom:SetCrazyArrow(point, distance) --- TomTom_CrazyArrow.lua | 74 +++++++++++++++++++++++--------- TomTom_Waypoints.lua | 114 ++----------------------------------------------- 2 files changed, 59 insertions(+), 129 deletions(-) diff --git a/TomTom_CrazyArrow.lua b/TomTom_CrazyArrow.lua index 046121c..140ba0c 100644 --- a/TomTom_CrazyArrow.lua +++ b/TomTom_CrazyArrow.lua @@ -6,6 +6,8 @@ -- with the artwork.) ----------------------------------------------------------------------------]] +local Astrolabe = DongleStub("Astrolabe-0.4") + local twopi = math.pi * 2 local playerModel @@ -44,33 +46,67 @@ wayframe.arrow = wayframe:CreateTexture("OVERLAY") wayframe.arrow:SetTexture("Interface\\Addons\\TomTom\\Arrow") wayframe.arrow:SetAllPoints() -local active_point -function TomTom:SetCrazyWaypoint(point) - active_point = point +local active_point, arrive_distance, showDownArrow +function TomTom:SetCrazyArrow(point, dist) + active_point = point.minimap + arrive_distance = dist wayframe:Show() end local status = wayframe.status local arrow = wayframe.arrow - +local count = 0 local function OnUpdate(self, elapsed) local dist,x,y = Astrolabe:GetDistanceToIcon(active_point) - local angle = Astrolabe:GetDirectionToIcon(active_point) - local player = playerModel:GetFacing() - - status:SetText(string.format("%d yards", dist)) - - angle = angle - player - - local cell = floor(angle / twopi * 108 + 0.5) % 108 - local column = cell % 9 - local row = floor(cell / 9) - local xstart = (column * 56) / 512 - local ystart = (row * 42) / 512 - local xend = ((column + 1) * 56) / 512 - local yend = ((row + 1) * 42) / 512 - arrow:SetTexCoord(xstart,xend,ystart,yend) + status:SetText(string.format("%d yards", dist)) + + -- Showing the arrival arrow? + if dist <= arrive_distance then + if not showDownArrow then + arrow:SetHeight(70) + arrow:SetWidth(53) + arrow:SetTexture("Interface\\AddOns\\TomTom\\Arrow-UP") + showDownArrow = true + end + + count = count + 1 + if count >= 55 then + count = 0 + end + + local cell = count + local column = cell % 9 + local row = floor(cell / 9) + + local xstart = (column * 53) / 512 + local ystart = (row * 70) / 512 + local xend = ((column + 1) * 53) / 512 + local yend = ((row + 1) * 70) / 512 + arrow:SetTexCoord(xstart,xend,ystart,yend) + else + if showDownArrow then + arrow:SetHeight(56) + arrow:SetWidth(42) + arrow:SetTexture("Interface\\AddOns\\TomTom\\Arrow") + showDownArrow = false + end + + local angle = Astrolabe:GetDirectionToIcon(active_point) + local player = playerModel:GetFacing() + + angle = angle - player + + local cell = floor(angle / twopi * 108 + 0.5) % 108 + local column = cell % 9 + local row = floor(cell / 9) + + local xstart = (column * 56) / 512 + local ystart = (row * 42) / 512 + local xend = ((column + 1) * 56) / 512 + local yend = ((row + 1) * 42) / 512 + arrow:SetTexCoord(xstart,xend,ystart,yend) + end end wayframe:SetScript("OnUpdate", OnUpdate) \ No newline at end of file diff --git a/TomTom_Waypoints.lua b/TomTom_Waypoints.lua index 463f63a..d17568f 100644 --- a/TomTom_Waypoints.lua +++ b/TomTom_Waypoints.lua @@ -251,10 +251,10 @@ do end data.state = newstate end - end - -- Update the last distance with the current distance - data.lastdist = dist + -- Update the last distance with the current distance + data.lastdist = dist + end end local tooltip_count = 0 @@ -272,111 +272,5 @@ do end end end -end - - -function foo() - local twopi = math.pi * 2 - - -- Test for waypoints - local c,z = TomTom:GetZoneNumber("Shattrath City") - - local OnDistanceArrive,OnDistanceNear - local callback = function(...) - for i=1,select("#", ...) do - ChatFrame1:AddMessage(tostring(select(i, ...))) - end - local event = select(1, ...) - if event == "OnDistanceArrive" then - OnDistanceArrive() - elseif event == "OnDistanceNear" then - OnDistanceNear() - end - end - - local point = TomTom:SetWaypoint(c,z,51,44, 100, 50, 15, callback) - local dist,x,y = Astrolabe:GetDistanceToIcon(point.minimap) - - local playerModel - local children = { Minimap:GetChildren() } - for idx,child in ipairs(children) do - if child:IsObjectType("Model") and child:GetModel() == "Interface\\Minimap\\MinimapArrow" then - playerModel = child - break - end - end - - local wayframe = CreateFrame("Frame", nil, UIParent) - wayframe:SetHeight(56) - wayframe:SetWidth(42) - wayframe:SetPoint("CENTER", 0, 0) - wayframe:EnableMouse(true) - wayframe:SetMovable(true) - - local status = wayframe:CreateFontString("OVERLAY", nil, "GameFontNormal") - status:SetPoint("TOP", wayframe, "BOTTOM", 0, 0) - - wayframe:SetScript("OnDragStart", function(self, button) - self:StartMoving() - end) - wayframe:SetScript("OnDragStop", function(self, button) - self:StopMovingOrSizing() - end) - wayframe:RegisterForDrag("LeftButton") - local arrow = wayframe:CreateTexture("OVERLAY") - arrow:SetTexture("Interface\\Addons\\TomTom\\Arrow") - arrow:SetAllPoints() - - local function OnUpdate(self, elapsed) - local dist,x,y = Astrolabe:GetDistanceToIcon(point.minimap) - local angle = Astrolabe:GetDirectionToIcon(point.minimap) - local player = playerModel:GetFacing() - - status:SetText(string.format("%d yards", dist)) - - angle = angle - player - - local cell = floor(angle / twopi * 108 + 0.5) % 108 - local column = cell % 9 - local row = floor(cell / 9) - - local xstart = (column * 56) / 512 - local ystart = (row * 42) / 512 - local xend = ((column + 1) * 56) / 512 - local yend = ((row + 1) * 42) / 512 - arrow:SetTexCoord(xstart,xend,ystart,yend) - end - - local count = 0 - local function ThereOnUpdate(self, elapsed) - count = count + 1 - if count > 54 then count = 0 end - - local cell = count - local column = cell % 9 - local row = floor(cell / 9) - - local xstart = (column * 53) / 512 - local ystart = (row * 70) / 512 - local xend = ((column + 1) * 53) / 512 - local yend = ((row + 1) * 70) / 512 - arrow:SetTexCoord(xstart,xend,ystart,yend) - end - - - function OnDistanceArrive() - arrow:SetHeight(53) - arrow:SetWidth(70) - arrow:SetTexture("Interface\\Addons\\TomTom\\Arrow-UP") - wayframe:SetScript("OnUpdate", ThereOnUpdate) - end - - function OnDistanceNear() - arrow:SetHeight(56) - arrow:SetWidth(42) - arrow:SetTexture("Interface\\Addons\\TomTom\\Arrow") - wayframe:SetScript("OnUpdate", OnUpdate) - end - - wayframe:SetScript("OnUpdate", OnUpdate) + tooltip:SetScript("OnUpdate", Tooltip_OnUpdate) end -- 1.7.9.5