https://github.com/evilkiwi/astar
Synchronous A* pathfinding for TypeScript
https://github.com/evilkiwi/astar
astar-algorithm grid javascript pathfinding typescript
Last synced: 2 months ago
JSON representation
Synchronous A* pathfinding for TypeScript
- Host: GitHub
- URL: https://github.com/evilkiwi/astar
- Owner: evilkiwi
- License: gpl-3.0
- Created: 2022-01-15T03:00:44.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-11-11T08:54:01.000Z (over 1 year ago)
- Last Synced: 2024-08-09T04:07:08.116Z (11 months ago)
- Topics: astar-algorithm, grid, javascript, pathfinding, typescript
- Language: TypeScript
- Homepage: https://evil.kiwi
- Size: 1.12 MB
- Stars: 7
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
`@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
This package is available via NPM:
```bash
yarn add @evilkiwi/astar# or
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.