Pathfinding library that implements A* with Euclidean distance.
On success it can return the full backtracked path or only the waypoints.
This library provides you with:
- path finding for a map represented by a matrix (1D / flat or 2D).
- path found as
int[]
that can be the full path array of tiles or only the waypoints tiles (where the direction changes). - logic can run in a loop (step by step, e.g. only 30 times per second) or continuous (e.g. Webworker)
- hooks like
onInsertQueue(node)
ononSuccess
.
Result type | Demo |
---|---|
FULL_PATH_ARRAY |
![]() |
WAYPOINT_PATH_ARRAY |
![]() |
npm install @serbanghita-gamedev/pathfinding
const aStar = new AStarPathFinding({
matrix2D: [
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 1, 0],
],
matrixTileSize: 1,
searchType: AStarPathFindingSearchType.BY_STEP,
startCoordinates: { x: 0, y: 0 },
finishCoordinates: { x: 4, y: 2 },
});
// include the following in your loop() fn.
let result = aStar.search();
Config option | Type | Description |
---|---|---|
matrix2D | number[][] |
A 2d matrix. |
matrix1D | number[] |
A 1d matrix (flat array). |
matrixWidth | number |
Matrix width, mandatory for matrix1D . |
matrixHeight | number |
Matrix height, mandatory for matrix1D . |
searchType | enum |
AStarPathFindingSearchType.BY_STEP , AStarPathFindingSearchType.CONTINUOUS |
startCoordinates | {x: number, y: number} |
Starting point |
finishCoordinates | {x: number, y: number} |
End goal point |
onInsertQueue | function(node: MinHeapNode): void |
Callback function executing for each node inserted in the MinHeap |
onSuccess | function(foundPath: number[]) : void |
Callback function executing when a successful path has been found. |
You can use the library in two modes:
BY_STEP
- recommended for loops, batches (e.g. game loop). This is when you're executingaStar.search()
on each tick.CONTINUOUS
- Recommended for separate thread (e.g. WebWorker). This is for when you're executingaStar.search()
in one blocking operation.
- Always include tests
- Make sure you run
vitest --watch=false --coverage
- Lint the code with
eslint ./src
- Open a PR, assign
@serbanghita
as reviewer