@evilkiwi/astar
is an synchronous A* pathfinding implementation in TypeScript.
- Supports diagonal or manhattan heuristics
- Optionally supports 3-dimensional grids with elevation
- Highly configurable (corner cutting, diagonal movement, etc.)
- First-class TypeScript
- Fully tested
- It's not awfully performant, but it works!
This package is available via NPM:
yarn add @evilkiwi/astar
# or
npm install @evilkiwi/astar
import { search, type Grid } from '@evilkiwi/astar';
/**
* The first step is to have a Grid.
*
* -1 = un-walkable, like a wall or water.
* 0 = walkable, optionally any integer above 0 for elevation support
*/
const grid: Grid = [
[ 0, 5, -1, 0, 0, -1, 0, 0],
[ 0, 4, -1, 0, 0, -1, 0, 0],
[ 0, 3, -1, 0, 0, -1, 0, 0],
[ 0, 2, -1, 0, 0, 0, 0, 0],
[ 0, 1, -1, 0, 0, -1, 0, 0],
[ 0, 0, -1, 0, 0, -1, 0, 0],
[ 0, 0, 0, 0, 0, -1, 0, 0],
[ 0, 0, -1, 0, 0, -1, 0, 0],
];
/**
* Once you have a Grid, you can find an efficient tile-based path
* from one vector to another.
*/
const path = search({
cutCorners: false,
diagonal: true,
from: [0, 0],
to: [7, 6],
grid,
});
// Path is either an array of vectors or null (could not find a path)
console.log(path);
The library is immutable/side-effect free, and the grid reference won't be changed when searched.