feat(pkg): Add pathfinding edge pkg to packages dir

This commit is contained in:
Braks
2022-05-22 22:46:47 +02:00
parent b9dbb97374
commit 4ee7eb909a
27 changed files with 6901 additions and 0 deletions
@@ -0,0 +1,34 @@
import { AStarFinder, Util, DiagonalMovement, Heuristic } from 'pathfinding'
import type { Grid } from 'pathfinding'
import { XYPosition } from '@braks/vue-flow'
// https://www.npmjs.com/package/pathfinding#advanced-usage
declare module 'pathfinding' {
interface FinderOptions extends Heuristic {
diagonalMovement?: DiagonalMovement
weight?: number
allowDiagonal?: boolean
dontCrossCorners?: boolean
}
}
export const generatePath = (grid: Grid, start: XYPosition, end: XYPosition): number[][] => {
const finder = new AStarFinder({
diagonalMovement: DiagonalMovement.Always,
allowDiagonal: true,
dontCrossCorners: true,
})
let path: number[][] = []
try {
path = finder.findPath(start.x, start.y, end.x, end.y, grid)
path = Util.smoothenPath(grid, path)
} catch {
// No path was found. This can happen if the end point is "surrounded"
// by other nodes, or if the starting and ending nodes are on top of
// each other.
}
return path
}