UNPKG

@evilkiwi/astar

Version:

Synchronous A* pathfinding for TypeScript

63 lines (52 loc) 1.7 kB
<div align="center"> <a href="https://www.npmjs.com/package/@evilkiwi/astar" target="_blank"> <img src="https://img.shields.io/npm/v/@evilkiwi/astar?style=flat-square" alt="NPM" /> </a> <img src="https://img.shields.io/npm/l/@evilkiwi/astar?style=flat-square" alt="GPL-3.0-only" /> <h3>Synchronous A* pathfinding for TypeScript.</h3> </div> `@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! ## Installation ```bash npm install @evilkiwi/astar ``` ## Usage ```typescript 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.