Last active
December 11, 2015 04:19
-
-
Save McFunkypants/4544660 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// world is a 2d array of integers (eg world[10][15] = 0) | |
// pathStart and pathEnd are arrays like [5,10] | |
function findPath(world, pathStart, pathEnd) | |
{ | |
// shortcuts for speed | |
var abs = Math.abs; | |
var max = Math.max; | |
var pow = Math.pow; | |
var sqrt = Math.sqrt; | |
// the world data are integers: | |
// anything higher than this number is considered blocked | |
// this is handy is you use numbered sprites, more than one | |
// of which is walkable road, grass, mud, etc | |
var maxWalkableTileNum = 0; | |
// keep track of the world dimensions | |
// Note that this A-star implementation expects the world array to be square: | |
// it must have equal height and width. If your game world is rectangular, | |
// just fill the array with dummy values to pad the empty space. | |
var worldWidth = world[0].length; | |
var worldHeight = world.length; | |
var worldSize = worldWidth * worldHeight; | |
// which heuristic should we use? | |
// default: no diagonals (Manhattan) | |
var distanceFunction = ManhattanDistance; | |
var findNeighbours = function(){}; // empty | |
/* | |
// alternate heuristics, depending on your game: | |
// diagonals allowed but no sqeezing through cracks: | |
var distanceFunction = DiagonalDistance; | |
var findNeighbours = DiagonalNeighbours; | |
// diagonals and squeezing through cracks allowed: | |
var distanceFunction = DiagonalDistance; | |
var findNeighbours = DiagonalNeighboursFree; | |
// euclidean but no squeezing through cracks: | |
var distanceFunction = EuclideanDistance; | |
var findNeighbours = DiagonalNeighbours; | |
// euclidean and squeezing through cracks allowed: | |
var distanceFunction = EuclideanDistance; | |
var findNeighbours = DiagonalNeighboursFree; | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment