You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.2 KiB
32 lines
1.2 KiB
/**
|
|
* @author aniero / https://github.com/aniero
|
|
*/
|
|
var DiagonalMovement = require('../core/DiagonalMovement');
|
|
var JPFNeverMoveDiagonally = require('./JPFNeverMoveDiagonally');
|
|
var JPFAlwaysMoveDiagonally = require('./JPFAlwaysMoveDiagonally');
|
|
var JPFMoveDiagonallyIfNoObstacles = require('./JPFMoveDiagonallyIfNoObstacles');
|
|
var JPFMoveDiagonallyIfAtMostOneObstacle = require('./JPFMoveDiagonallyIfAtMostOneObstacle');
|
|
|
|
/**
|
|
* Path finder using the Jump Point Search algorithm
|
|
* @param {object} opt
|
|
* @param {function} opt.heuristic Heuristic function to estimate the distance
|
|
* (defaults to manhattan).
|
|
* @param {DiagonalMovement} opt.diagonalMovement Condition under which diagonal
|
|
* movement will be allowed.
|
|
*/
|
|
function JumpPointFinder(opt) {
|
|
opt = opt || {};
|
|
if (opt.diagonalMovement === DiagonalMovement.Never) {
|
|
return new JPFNeverMoveDiagonally(opt);
|
|
} else if (opt.diagonalMovement === DiagonalMovement.Always) {
|
|
return new JPFAlwaysMoveDiagonally(opt);
|
|
} else if (opt.diagonalMovement === DiagonalMovement.OnlyWhenNoObstacles) {
|
|
return new JPFMoveDiagonallyIfNoObstacles(opt);
|
|
} else {
|
|
return new JPFMoveDiagonallyIfAtMostOneObstacle(opt);
|
|
}
|
|
}
|
|
|
|
module.exports = JumpPointFinder;
|