Skip to content

evilkiwi/astar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

03db717 · Nov 11, 2023

History

23 Commits
Nov 22, 2022
Nov 11, 2023
Nov 11, 2023
Aug 24, 2023
Nov 11, 2023
Sep 27, 2022
Nov 11, 2023
Nov 11, 2023
Nov 11, 2023
Jan 15, 2022
Nov 22, 2022
Jun 20, 2023
Jun 20, 2023
Aug 1, 2023
Nov 11, 2023
Nov 11, 2023
Dec 11, 2022
Dec 11, 2022

Repository files navigation

NPM Discord GPL-3.0-only

Synchronous A* pathfinding for TypeScript

@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:

yarn add @evilkiwi/astar

# or

npm install @evilkiwi/astar

Usage

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.