Jumper
Jumper is a pathfinding library designed for uniform-cost 2D grid-based games. It aims to be lightning fast and lightweight. It also features a clean public interface with chaining features which makes it very friendly and easy to use.
Technical notes
Jumper implements a lots if search algorithms: A-star, Dijkstra, Breadth-First search, Depth First search and Jump Point search (the fastest amongst all).
A benchmark program running in console is available on Github. It features a set of 132 maps from the 2012 Grid-based Path Planning Competition.
Usage
Jumper is easy to use. Here is a basic example using the latest version available.
-- Usage Example -- First, set a collision map local map = { {0,1,0,1,0 }, {0,1,0,1,0 }, {0,1,1,1,0 }, {0,0,0,0,0 }, } -- Value for walkable tiles local walkable = 0 -- Library setup local Grid = require ("jumper.grid") -- The grid class local Pathfinder = require ("jumper.pathfinder") -- The pathfinder lass -- Creates a grid object local grid = Grid(map) -- Creates a pathfinder object using Jump Point Search local myFinder = Pathfinder(grid, 'JPS', walkable) -- Define start and goal locations coordinates local startx, starty = 1,1 local endx, endy = 5,1 -- Calculates the path, and its length local path, length = myFinder:getPath(startx, starty, endx, endy) if path then print(('Path found! Length: %.2f'):format(length)) for node, count in path:iter() do print(('Step: %d - x: %d - y: %d'):format(count, node.x, node.y)) end end --> Output: --> Path found! Length: 8.83 --> Step: 1 - x: 1 - y: 1 --> Step: 2 - x: 1 - y: 3 --> Step: 3 - x: 2 - y: 4 --> Step: 4 - x: 4 - y: 4 --> Step: 5 - x: 5 - y: 3 --> Step: 6 - x: 5 - y: 1
Jumper offers a lot more options to customize the pathfinding behavior. Please, kindly check out the Readme to figure them out.
Feedback
If you have any question, proposal, idea to improve, or if you are just using Jumper in a project, I would love to hear your feedback. Issues/suggestions can be posted on the project issue tracker on Github, or by e-mail.
Links