From 6d0bf72ba6d96d31064c3f21cce52f6db2e88130 Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Mon, 8 Oct 2012 08:20:30 +0200 Subject: [PATCH] Add a method to get a table of default callbacks This makes it possible for an add-on to create a waypoint with custom callbacks without losing the tooltip/onclick functionality that currently exists in TomTom. Usage is something like this: local opts = {} -- any options for your waypoint, such as title, etc. opts.callbacks = TomTom:DefaultCallbacks() opts.callbacks.distance[15] = function(event, uid, range, distance, lastdistance) -- this function will be called when the player moves from -- outside 15 yards to within, or vide-versa and passed -- several parameters -- -- event: "distance" -- uid: the UID of the waypoint -- range: the callback range being triggered (15 in this case) -- distance: the current distance to the waypoint -- this MAY be less than 15, if you move really fast -- lastdistance: the previous distance to the waypoint. This -- can be used to determine whether or not you are -- leaving the circle or entering it. if not lastdistance or lastdistance and lastdistance > dist then -- entering circle else -- exiting circle end end --- TomTom.lua | 65 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/TomTom.lua b/TomTom.lua index 3f7f842..2b51c87 100755 --- a/TomTom.lua +++ b/TomTom.lua @@ -786,34 +786,39 @@ function TomTom:AddZWaypoint(c, z, x, y, desc, persistent, minimap, world, callb }) end --- TAG: AddCode -function TomTom:AddMFWaypoint(m, f, x, y, opts) +-- Return a set of default callbacks that can be used by addons to provide +-- more detailed functionality without losing the tooltip and onclick +-- functionality. +-- +-- Options that are used in this 'opts' table in this function: +-- * cleardistance - When the player is this far from the waypoint, the +-- waypoint will be removed. +-- * arrivaldistance - When the player is within this radius of the waypoint, +-- the crazy arrow will change to the 'downwards' arrow, indicating that +-- the player has arrived. + +function TomTom:DefaultCallbacks(opts) opts = opts or {} - local callbacks - if opts.callbacks then - callbacks = opts.callbacks - else - callbacks = { - minimap = { - onclick = _minimap_onclick, - tooltip_show = _minimap_tooltip_show, - tooltip_update = _both_tooltip_update, - }, - world = { - onclick = _world_onclick, - tooltip_show = _world_tooltip_show, - tooltip_update = _both_tooltip_show, - }, - distance = { - }, - } - end + local callbacks = { + minimap = { + onclick = _minimap_onclick, + tooltip_show = _minimap_tooltip_show, + tooltip_update = _both_tooltip_update, + }, + world = { + onclick = _world_onclick, + tooltip_show = _world_tooltip_show, + tooltip_update = _both_tooltip_show, + }, + distance = { + }, + } local cleardistance = self.profile.persistence.cleardistance local arrivaldistance = self.profile.arrow.arrival - -- Allow both of these to be overridde by options + -- Allow both of these to be overriden by options if opts.cleardistance then cleardistance = opts.cleardistance end @@ -835,11 +840,23 @@ function TomTom:AddMFWaypoint(m, f, x, y, opts) end end - -- Default values + return callbacks +end + +function TomTom:AddMFWaypoint(m, f, x, y, opts) + opts = opts or {} + + -- Default values if opts.persistent == nil then opts.persistent = self.profile.persistence.savewaypoints end if opts.minimap == nil then opts.minimap = self.profile.minimap.enable end if opts.world == nil then opts.world = self.profile.worldmap.enable end if opts.crazy == nil then opts.crazy = self.profile.arrow.autoqueue end + if opts.cleardistance == nil then opts.cleardistance = self.profile.persistence.cleardistance end + if opts.arrivaldistance == nil then opts.arrivaldistance = self.profile.arrow.arrival end + + if not opts.callbacks then + opts.callbacks = TomTom:DefaultCallbacks(opts) + end local zoneName = lmd:MapLocalize(m) @@ -873,7 +890,7 @@ function TomTom:AddMFWaypoint(m, f, x, y, opts) -- No need to convert x and y because they're already 0-1 instead of 0-100 self:SetWaypoint(uid, callbacks, opts.minimap, opts.world) if opts.crazy then - self:SetCrazyArrow(uid, arrivaldistance, opts.title) + self:SetCrazyArrow(uid, opts.arrivaldistance, opts.title) end waypoints[m] = waypoints[m] or {} -- 1.7.9.5